Я портирую существующую веб-службу SOAP на веб-службу C #. Это разработка в коричневом поле, поэтому я должен придерживаться существующей схемы / WSDL. Я пишу веб-службу вручную (ничего не генерируя).
Моя проблема, похоже, связана с тем, что мой веб-метод имеет такой же тип XSD для своего параметра и типа возврата . Я использовал XSD.exe для генерации связанных классов для всех схем.
Вот мой веб-метод:
[WebMethod]
[SoapHeader("soapHeader")]
[SoapDocumentMethod(Action = "ActionURI", Binding = "myBinding", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Bare)]
[return: XmlElement("UQL", Namespace = "UQLNamespace")]
public UQL UQL([XmlAnyElement("UQL", Namespace = "UQLNamespace")] XmlElement wspRequest)
{ .. }
Этот метод ожидает входящее сообщение примерно так:
<soap:envelope>
<soap:header>...</soap:header>
<soap:body>
<UQLNamespace:UQL>
<childOne>...</childOne>
<childTwo>...</childTwo>
<childThree>
<childThreeA>...</childThreeA>
</childThree>
</UQLNamespace:UQL>
</soap:body>
</soap:envelope>
Должно возвращаться сообщение вроде:
<soap:envelope>
<soap:body>
<UQLNamespace:UQL>
...
</UQLNamespace:UQL>
</soap:body>
</soap:envelope>
Сгенерированный класс XSD.exe выглядит следующим образом:
[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="UQLNamespace")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="UQLNamespace", IsNullable=false)]
public partial class UQL { .. }
Теперь проблема в том, что я получаю ошибку отражения, когда я вызываю веб-службу с соответствующим форматом сообщения (как показано выше).
Метод YourWebService.UQL не может быть отражен. Там была ошибка
отражая «UQLResult». Верхний элемент XML 'UQL' из пространства имен
UQLNamespace ссылается на различные типы System.Xml.XmlElement и
UQL. Используйте атрибуты XML, чтобы указать другое имя XML или пространство имен для
элемент или типы.
Теперь, если я удалю аннотацию [return: ...]
из веб-метода, он вернется успешно, но вернет XML с именем элемента UQLResult
вместо UQL
. Что, конечно, не то, что мне нужно.
Есть ли у вас идеи, как я могу разрешить конфликт в исключении выше?