Производный тип неизвестен веб-сервису WSE 3.0 - PullRequest
0 голосов
/ 15 января 2010

У меня есть веб-служба на основе WSE 3.0 и клиентское приложение WinForms, которое использует типы, определенные в References.cs этой службы, но подклассирует их для предоставления некоторых дополнительных функций, требуемых клиентом.

Тем не менее, когда я передаю экземпляр подкласса обратно в веб-службу, даже если я явно приведу обратно к исходному типу, я получаю ужас:

Используйте атрибут XmlInclude или SoapInclude для указания типовкоторые не известны статически.

в отношении моего производного типа.

Сводка кода:

public class DefinedInReferenceCs
{ 
    // ... 
}

public class ClientSubclass : DefinedInReferenceCs
{
    // My extra stuff
}

public class MyClient
{
    public CallTheWebService(ClientSubclass  obj)
    {
        // obj is an instance of ClientSubclass,  cast as DefinedInReferenceCs
        svc.MyMethod((DefinedInReferenceCs)obj); 
        // Throws an exception complaining that ClientSubclass is not statically known
    }
}

Я могу обойти это, явно создав DefinedInReferenceCsэкземпляр и выполнение глубокого копирования соответствующих полей.Есть ли лучший способ?

1 Ответ

1 голос
/ 15 января 2010

Поскольку XML Serializer использует Reflection для работы с объектами, нет способа не дать ему увидеть, что ваша ссылка на базовый класс ссылается на экземпляр вашего производного класса. Да, вы должны использовать XmlInclude.

OTOH, вы рассматривали возможность использования частичных классов для добавления функциональности в исходные прокси-классы? Таким образом, вам вообще не понадобится производный класс.

...