هل هناك طريقة لإرجاع أنواع مختلفة من طريقة WCF REST؟

StackOverflow https://stackoverflow.com/questions/140255

  •  02-07-2019
  •  | 
  •  

سؤال

أحاول كتابة خدمة ويب وفقًا للمواصفات وتتطلب نص استجابة مختلفًا اعتمادًا على ما إذا كانت الطريقة قد اكتملت بنجاح أم لا.لقد حاولت إنشاء فئتين مختلفتين من DataContract، ولكن كيف يمكنني إرجاعهما وإجراء تسلسل لهما بشكل صحيح؟

هل كانت مفيدة؟

المحلول

الجواب هو نعم ولكنه أمر صعب وتفقد الكتابة القوية على الواجهة الخاصة بك.إذا رجعت أ تدفق ثم يمكن أن تكون البيانات بتنسيق XML أو نص أو حتى صورة ثنائية.بالنسبة لفئات DataContract، يمكنك بعد ذلك إجراء تسلسل للبيانات باستخدام ملف DataContractSerializer.

انظر مدونةSvc وبشكل أكثر تحديدا RestAtomPubService.cs خدمة دبليو سي إف لمزيد من التفاصيل.لاحظ أن كود المصدر سيوضح لك أيضًا كيفية قبول أنواع مختلفة من البيانات في طريقة راحة WCF والتي تتطلب مخطط نوع المحتوى.

نصائح أخرى

أفضل طريقة للإشارة إلى فشل خدمة الويب WCF الخاصة بك هي طرح خطأ FaultException.توجد إعدادات في ملفات web.config الخاصة بخدمتك تسمح بتمرير رسالة الخطأ بأكملها إلى العميل كجزء من الخطأ.

قد يكون هناك أسلوب آخر يتمثل في وراثة نتائجك من نفس الفئة الأساسية أو الواجهة.ستقوم الخدمة بإرجاع مثيل من النوع الأساسي.يمكنك بعد ذلك استخدام سمة KnownType لإعلام العميل بأنه قد يتم إرجاع أنواع متعددة.لنفكر في الأمر، قد يكون من الممكن استخدام الكائن كنوع أساسي، لكنني لم أجربه.

في حالة فشل أي من هذه الأساليب، يمكنك إنشاء كائن نتيجة مخصص يحتوي على خصائص النتيجة والخطأ ويمكن لعميلك بعد ذلك تحديد مسار الإجراء الذي يجب اتخاذه.اضطررت إلى استخدام هذا الأسلوب مع Silverlight 2 لأن Beta 2 لا يدعم بشكل كامل العقود الخاطئة.إنها ليست جميلة، ولا أوصي بها عادةً، ولكن إذا كانت هذه هي الطريقة الوحيدة الناجحة أو كنت تشعر أنها أفضل طريقة لموقفك...

إذا كنت تواجه مشكلات مع ADO.NET Data Services، فلدي خبرة أقل هناك.

وهنا بعض المعلومات بشأن تنفيذ FaultContracts

إذا كنت تستخدم رابطًا مستندًا إلى XML، فأعتقد أنه لا توجد طريقة للقيام بذلك.الحل البسيط في هذه الحالة هو الحصول على جزء من علامة الرسالة في حالة حدوث فشل، وتخزين معلومات الفشل في مكان ما إذا لزم الأمر.بالنسبة لربط JSON، قد تتمكن من استخدام طريقة تُرجع كائنًا، ثم تُرجع نوعين مختلفين من الكائنات.إذا كنت أتذكر بشكل صحيح (وهو أمر نادر)، فمن الممكن لأن فئة JavaScriptSerializer تستخدم الانعكاس إذا كان الكائن خاليًا من سمات التسلسل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top