Ситуация: предполагается, что система A предоставляет веб-службу SOAP 1.2 для вызова системы B. Чтобы A знал, как выглядит сообщение, B отправил XSD в A, описывающий содержимое сообщения. A сгенерировал заглушки с помощью инструмента .NET xsd.exe, создал простой веб-сервис вокруг этого, и работа была выполнена.
Однако; когда B вызывает этот веб-сервис, A отказывается сериализовать содержимое SOAP / XML в сгенерированные экземпляры класса прокси. Я понимаю, что это должно быть связано с тем, как сериализация определяется на стороне веб-службы в системе A, но мне не удалось точно определить, что происходит не так.
Как выглядит сообщение от B (анонимно) - ОТКАЗ:
<ns2:Set_Out xmlns:ns2="http://a.a/1.0" xmlns:ns1="http://b.b/1.0" xmlns:ns0="http://c.c">
<Context xmlns="">
<Foo>test</Foo>
<Bar>test</Bar>
...
</Context>
Как выглядит тестовое сообщение от тестового клиента (на основе WSDL) - РАБОТАЕТ:
<Set_Out xmlns="http://a.a/1.0">
<Context xmlns:b="http://schemas.datacontract.org/2004/07/x.x" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:Foo>TEST</b:Foo>
<b:Bar>test</b:Bar>
...
</Context>
Когда веб-сервис, созданный A, получает сообщения из B он вообще не сериализует сообщение. Объекты прокси (например, Context
) имеют значение null
. Когда он получает сообщения от тестового клиента, все сгенерировано правильно.
Атрибуты сериализации на прокси:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://a.a/1.0")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://a.a/1.0", IsNullable=false)]
[System.ServiceModel.MessageContract]
public partial class Set_Out {
[System.Xml.Serialization.XmlElementAttribute(Namespace="http://a.a/1.0", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] [System.ServiceModel.MessageBodyMember(Order=0)]
public ContextType Context;
...
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://a.a/1.0")]
public partial class ContextType {
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string Foo;
Я считаю странными:
xmlns: b
в примере выше, например). неквалифицированные
аннотации, определенные в прокси, и делает все квалифицированным . I ' пробовал различные комбинации аннотаций, но ничего не помогает; сообщения от B некорректно десериализованы в прокси-серверы, сгенерированные A. Любые идеи / указатели / помощь будут очень признательны!