كيف يمكنني اجبار WCF إلى الإنشاء التلقائي WSDLs مع معلمات الأسلوب المطلوبة (minoccurs = "1")؟
سؤال
وأثناء استخدام WCF وOperationContracts لقد الأسلوب التالي تعريف:
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
عند هذا يحصل ترجمت إلى WSDL بواسطة وقت التشغيل WCF، فإنه ينتهي مع مع minoccurs = "0" المدرجة لsomeId المعلمات وmessageData (وبعد ذلك يلقي خطأ وقت التشغيل إذا كانت هذه المعايير مفقودة).
إذا كنت توليد وكيل باستخدام SoapUI أحصل على شيء يشبه هذا:
<com:DoSomething>
<!--Optional-->
<com:EventId>1</com:EventId>
<!--Optional-->
<com:myComplexType >
<com:id>1</com:id>
</com:myComplexType >
</com:DoSomething>
ويتم وضع علامة على حقل معرف في MyComplexType مع DataMemeber السمة باستخدام ل requi أحمر = "صحيح"، وبالتالي يتعرض إلزاميا.
من الواضح مضللة تماما لWSDL لتحديد أن المعلمة اختيارية عندما لا يكون، ولكن لا أستطيع أن أرى أي طريقة واضحة لتوصيف وOperationContract لإجبار WCF الاعتراف وفضح هذه المعايير على النحو المطلوب.
وأنا في حيرة قليلا لا يبدو وسيلة واضحة للقيام بذلك (التحسس القراءة / MSDN / جوجل). أو أنا ذاهب أعمى وتطل على شيء واضح.
وأي أدلة؟
المحلول
وبصرف النظر عن تحميل الملف المصدر، تحتاج فقط إلى إضافة سمة لتعريف العقد. مثل ذلك:
[ServiceContract]
[RequiredParametersBehavior]
public interface ICalculatorService
{
[OperationContract]
int Add(int firstValue, int secondValue);
}
وفيما يلي منصب مدونة أن يفسر ذلك بمزيد من التفصيل: <لأ href = "http://thorarin.net/blog/post.aspx؟id=30244f37-99be-49e0-acc3-3678e493abaf" يختلط = "noreferrer" > التحكم WSDL minOccurs مع WCF
نصائح أخرى
وتأكد من أن MyComplexType تم وضع علامة عليها سمة [DataContract].
لعقدي WCF الخاصة، وجدت أن minOccurs = 1 لن تظهر للل requi أحمر = true في اختصار لدت حتى تميزت سلسلة كاملة من الأشياء المتورطين في العقد على هذا النحو.