استثناء وكيل عميل WCF - "لا يمكن إضافة النوع إلى قائمة الأنواع المعروفة"

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

سؤال

أواجه مشاكل في إنشاء وكيل عميل WCF لرمز الخدمة كما في هذا المثال:

// data classes
[KnownType(typeof(ClassA))]
[KnownType(typeof(ClassB))]
public abstract class BaseClass : Dictionary<string, ITest>
{
}

public class ClassA : BaseClass
{
}

public class ClassB : BaseClass
{
}


public interface ITest
{
}

// service
[ServiceContract]
public interface IService1
{
    [OperationContract]
    BaseClass Method();
}

public class Service1 : IService1
{
    public BaseClass Method()
    {
        ...
    }
}

كلما حاولت إنشاء وكيل WCF باستخدام "إضافة مرجع الخدمة" في VS ، فإنه يفشل ويقول TRACE LOG

اكتب "wcfproxytest.classa" لا يمكن إضافة إلى قائمة الأنواع المعروفة منذ نوع آخر "wcfproxytest.classb" بنفس اسم عقد البيانات "http://schemas.microsoft.com/2003/10/serialization/arrays:arrayofkeyvalueofstringanytype'موجود بالفعل. إذا كانت هناك مجموعات مختلفة من نوع معين - على سبيل المثال ، قائمةu003CTest> واختبار [] ، لا يمكن إضافتهما كنوع معروفة. فكر في تحديد واحد فقط من هذه الأنواع للإضافة إلى قائمة الأنواع المعروفة.

أستطيع أن أرى ما تقوله رسالة الخطأ ، لكن هل هناك أي طريقة أخرى للتغلب على هذا (بخلاف إعادة تمثيل الفئات). أنا أتعامل مع نظام قديم يحتوي على فصول مكتوب بنفس الطريقة كما في مثالي وإعادة كتابتها ليست خيارًا لأن هذه الأشياء تقع في صميم النظام: S

أيه أفكار؟ شكرًا!

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

المحلول

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

نصائح أخرى

حاول إضافة:

[KnownType(typeof(Dictionary<string, ITest>))]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top