Я использую стандартный wsdl (расположенный here) для связи с сервисом (OpenXDS). Я создал ссылку на службу, которая создала очень большой файл Reference.cs. В файле есть иерархия типов:wcf клиент игнорирует производные типы во время десериализации
public partial class ExtrinsicObjectType : RegistryObjectType
. . .
[System.Xml.Serialization.XmlIncludeAttribute(typeof(ExtrinsicObjectType))]
public partial class RegistryObjectType : IdentifiableType
. . .
[System.Xml.Serialization.XmlIncludeAttribute(typeof(RegistryObjectType))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(ExtrinsicObjectType))]
public partial class IdentifiableType : object
Все три типа имеют одинаковую XmlType:
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0")]
Там есть коллекция в типе реагирования объектов IdentifiableType:
[System.Xml.Serialization.XmlArrayAttribute(Namespace="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0", Order=0)]
[System.Xml.Serialization.XmlArrayItemAttribute("Identifiable", IsNullable=false)]
public IdentifiableType[] RegistryObjectList {
Когда служба на самом деле отвечает, это дает сбор элементов внешних элементов:
<rim:RegistryObjectList xmlns:rim="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0">
<ns1:ExtrinsicObject xmlns:ns1="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" ...
<ns1:ExtrinsicObject xmlns:ns1="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" ...
<ns1:ExtrinsicObject xmlns:ns1="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" ...
<ns1:ExtrinsicObject xmlns:ns1="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" ...
<ns1:ExtrinsicObject xmlns:ns1="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" ...
</rim:RegistryObjectList>
Я вижу эти элементы в журнале трассировки, и я могу получить тот же ответ в SoapUI. Но когда я получаю десериализованный ответ от клиентского прокси, RegistryObjectList пуст. Он полностью игнорирует элементы ExtrinsicObject.
Я не могу изменить сервер, а клиент создан VS2012. Кажется, это должно работать, и я пропускаю какую-то настройку или что-то в этом роде.
Вот теории у меня до сих пор:
- Там какая-то установка на ссылки на службу, и если я проверил и обновил код всё будет работать.
- wsdl, который я использую, отличается от wsdl, с которым они согласились.
- Мне нужно выяснить, как вручную десериализовать ответы.
Любая помощь приветствуется. Я попытался включить то, что, как я думал, было уместным, но было много редактирования, поскольку wsdl, xsd и Reference.cs все довольно большие.
В этом случае я пытаюсь построить сервер CUCH с сервером WSDL и посмотреть, как отклик от него отличается от того, который отправляет настоящий сервер. –
Ссылка на wsdl не работает .... –
Кажется, он отрезал конец. Используйте https://code.google.com/p/epsos-common-components/source/browse/ihe-profiles/src/wsdl/XCARespondingGatewayQuery.wsdl?r=e6bea12e067eb13d9276b8da7c9667a45ec5685f – qanwi1970