هل هناك قيود معروفة مع تطبيق عميل اختبار WCF؟
-
05-09-2019 - |
سؤال
لقد حدث هذا عدة مرات معي. إذا أضفت إلى العديد من المتعاقد إلى ServiceConactract، فإن تطبيق عميل اختبار WCF يلقي استثناء:
"فشل في إضافة خدمة. قد لا يمكن الوصول إلى خدمة البيانات الوصفية. تأكد من أن خدمتك تعمل وتكشف عن البيانات الوصفية".
في التفاصيل التي يستمرها:
خطأ: لا يمكن الحصول على بيانات التعريف من. فشل الطلب مع حالة HTTP 400: طلب سيء.
إذا قمت بإزالة اثنين من عقود التشغيل، فكل شيء على ما يرام. خارج عميل الاختبار جيد أيضا.
المحلول 2
شكرا على الردود.
كانت هذه الخطوط المخالفة:
<OperationContract(), FaultContract(GetType(WcfService.Common.DefaultFaultContract))> _
Function GetJobSubTypesForJobTypeList(ByVal jobTypeList As Dictionary(Of Integer, String)) As List(Of JobSubTypeOfJobTypeDTO)
<OperationContract(), FaultContract(GetType(WcfService.Common.DefaultFaultContract))> _
Function GetActivityTypesForJobTypeList(ByVal jobTypeList As Dictionary(Of Integer, String)) As List(Of ActivityTypeOfJobTypeDTO)
اتضح أننا كنا نفتقد setters في أنواع العودة (DTO) ومنشئ افتراضي.
نصائح أخرى
هل يمكن أن تكون أكثر تحديدا حول أنواع العمليات التي يجب إزالتها من عقد الخدمة لجعلها تعمل؟
هنا بعض القيود المعروفة في wcftestclient.exe. الأداة التي تأتي مع .NET Framework 3.5 SDK. لاحظ أنه تم إصلاح كل هذه المشكلات في الإصدار الذي يأتي مع .NET 3.5 SP1.
- العميل لا يحتفظ جلسة مع الخدمة المستدقة. يتم إجراء جميع المكالمات على مثيلات وكيل جديدة
- الناتج تلقائيا ملف الضبط لوكيل العميل يمكن عرضه ولكن لم يتم تحريره
- الخدمات باستخدام XML Serializer. بدلا من عدم استدعاء تسلسل عقد البيانات
- الخدمات باستخدام عقود الرسائل لا يمكن استدعاءها
هذا هو واحد من أغرب المشاكل التي صادفتها. قد تضطر إلى مراجعة التعليمات البرمجية وتنظر إلى مشاكل مثل:
Private _NetPay As Boolean
<DataMember()> _
Public Property NetPay() As Boolean
Get
Return _Amount = 0
End Get
Set(ByVal value As Boolean)
_NetPay = value
End Set
End Property
كنت قد حددت Datamember على النحو الوارد أعلاه. لاحظ إكمال العودة. يحاول إرجاع قيمة محسوبة. قمت بإزالة عضو البيانات هذا؛ عملت بشكل جيد.
هذا ما كان علي إضافته إلى Devenv.exe.config من أجل الحصول على عميل اختبار WCF الخاص بي للعمل مع خدمة كبيرة جدا. ثم اضطررت لإعادة تشغيل IDE. قد لا يكون هذا ما تبحث عنه، لكنني آمل أن يساعد ذلك.
<system.serviceModel>
<bindings>
<customBinding>
<binding name="MyBinding">
<textMessageEncoding>
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
</textMessageEncoding>
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"/>
</binding>
</customBinding>
</bindings>
<client>
<endpoint binding="customBinding" bindingConfiguration="MyBinding" contract="IMetadataExchange" name="http"/>
</client>
</system.serviceModel>