Проблема вызова веб-службы - используйте атрибут XmlInclude или SoapInclude - PullRequest
2 голосов
/ 02 октября 2009

Я звоню в чужой веб-сервис, они предоставили файл WSDL и несколько файлов XSD. Я создал веб-ссылку в своем проекте, используя локальный файл WSDL, и создал класс, используя xsd.exe. Веб-метод, который я вызываю, -

object MyService.MyMethod(object myObj)

Итак, я создаю новый экземпляр моего сервиса и новый экземпляр моего объекта, созданный xsd. В документации веб-службы говорится, что myObj имеет тип ObjectRQ (созданный из xsd).

Мой код такой:

MyService service = new MyService();

ObjectRQ request = new ObjectRQ();

// Set the values of request.

object result = service.MyMethod(request);

В последней строке этого кода я получаю сообщение об ошибке:

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

Я не знаю, что может быть причиной этой ошибки, и мой поиск не дал ничего полезного. Кто-нибудь может мне помочь с этим?

1 Ответ

1 голос
/ 02 октября 2009

Поскольку тип параметра в вашем прокси - это объект, XmlSerializer, который составляет ваши сообщения, не знает о типе ObjectRQ. В этом смысле это было неожиданно. Таким образом, в основном вам нужно сообщить XmlSerializer, так или иначе, ожидать такого типа. Одним из способов является атрибут XmlInclude. Другим способом является добавление типа к прокси-классу операций известных типов. В контракте данных вы делаете это с помощью атрибута KnownType, но, поскольку у вас есть только контроль над клиентом, вам придется делать это в коде самостоятельно. Вы можете найти сообщение об этом в блоге здесь .

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...