Полученный тип неизвестен веб -сервису WSE 3.0
-
20-09-2019 - |
Вопрос
У меня есть веб -сервис на основе WSE 3.0 и клиентское приложение Winforms, которое использует типы, определенные в ссылках этой службы.
Однако, когда я передаю экземпляр подкласса обратно в веб -сервис, хотя я явно отбрасываю обратно в оригинальный тип, я получаю страх:
Используйте атрибут 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 и выполнив глубокую копию соответствующих полей. Есть ли способ лучше?
Решение
Поскольку XML -сериализатор использует отражение для работы с объектами, нет способа удержать его от того, что ваш базовый класс ссылается на экземпляр вашего производного класса. Да, вы должны использовать XmlInclude
.
OTOH, рассматривали ли вы использование частичных классов для добавления функциональности к исходным классам прокси? Таким образом, вам вообще не понадобится полученный класс.