سؤال

لدي واجهة الخدمة:

[ServiceContract]
[ServiceKnownType(typeof(Models.ArticleImage))]
public interface IPhotoManagementService
{
    [OperationContract]
    bool Login(string username, string password);

    [OperationContract]
    bool IsLoggedIn();

    [OperationContract]
    void UpdateImage(string articleID, string selectedImage);
}

كما ترون أنني حدد نوعا (Models.ArtileImage) على ServiceConact الخاص بي.

لذلك يجب أن تسبب بناء WSDL من هذه الخدمة articleImage على السطح في WSDL. لسوء الحظ هذا لا يحدث على الإطلاق. لماذا هذا؟

articleimage لديه datacontract على ذلك. وعندما أرجع articleimage في واجهة بلدي، فإن WSDL لا تلتقط articleImage.

تحرير: لا ينبثق حتى في مرجع الخدمة في المشروع المستهلكة!


هذه هي نتيجة الكثير من الاختبار:

  • النموذج الذي أحاول إضافته هو طراز LinQ إلى SQL.
  • عندما أضيف نموذجا عاديا مع ServiceKnownType يعمل.
  • عندما أستخدم LinQ الخاص بي إلى كيانات SQL في واجهة، فإنها تعمل.
  • عندما أضيف My LinQ إلى كيان SQL من خلال ServiceKnownType، فإنه لا ينبثق.
هل كانت مفيدة؟

المحلول

لماذا تحتاج إلى؟ أين تعرض خدمتك شيئا يمكن ربما فاصوليا ArticleImage?

إعادة تعليقك؛ عند استخدام [ServiceKnownType], ، لا يزال tripe الإضافي يتعرض في "mex" (المستهلكة عبر "svcutil") - ولكن ليس من قبل WSDL. هل تستخدم عميل WCF؟ يجب أن تظهر (لقد فحصت للتو ... فعلت). بشكل عام، رغم ذلك، فإن إعادة البيانات الغامضة من خدمة الويب ليست فكرة رائعة ... أنواع فرعية، بالتأكيد! Dictionary<string,ArticleImage> او حتى Dictionary<string,SomeBaseType> (مع [KnownType] إلخ)، جيد! ولكن object, HashTable, ، إلخ - ليست فكرة جيدة (IMO).

قد أيضا فقط إرجاع قائمة من نوعك (List<ArticleImage>) والتي ستعمل في جميع السيناريوهات (وتكون سهلة ل WSDL وغيرها)؛ واسمحوا العميل جعل القاموس في نهايته.


فيما يتعلق Linq-to-SQL؛ الكائنات ل "mex" بحاجة إلى مزين [DataContract] / [DataMember]. وبعد يمكنك القيام بذلك في المصممة من خلال تبديل خاصية "التسلسل" الخاص ب DBML. مع هذه المجموعة (وضع التسلسل = أحادي الاتجاه)، يجب أن تعمل. أن نكون صادقين، على الرغم من ذلك، أعتقد أنك أفضل قبالة إضافة طريقة وهمية تجعل من النوع الصريح على API.

نصائح أخرى

يتم نشر الأنواع الوحيدة المستخدمة كمعلمات الإدخال / الإخراج لعمليات عقود الخدمة في WSDL.

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