Проблема пространства имен Webservice - PullRequest
3 голосов
/ 13 ноября 2010

У меня есть веб-сервис ASP.NET, который вызывается клиентом Java.Клиент отправляет сообщение SOAP в качестве входных данных, но проблема в том, что он никогда не достигает моего метода веб-сервиса.Я всегда получаю нулевой ввод.Я использовал TraceListener и увидел это предупреждение, которое может вызвать проблему:

Элемент не ожидался в этом контексте: ... Ожидаемые элементы: http://client.ns.url/:ListenerInput.

Этовот что отправляет клиент:

<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S = "http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:Listener xmlns:ns2 = "http://client.ns.url/">
            <ListenerInput>
                <errorCode>0</errorCode>
                <errorDescription>Success</errorDescription>
                <firstPrice xsi:nil = "true" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"/>
            </ListenerInput>
        </ns2:Listener>
    </S:Body>
</S:Envelope>

А вот мой веб-метод:

[System.Web.Services.WebServiceAttribute(Namespace = "http://client.ns.url/")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Web.Services.WebServiceBindingAttribute(Name = "ListenerWebServicePortSoapBinding", Namespace = "http://client.ns.url/")]
public partial class ListenerService : System.Web.Services.WebService
{

    [System.Web.Services.WebMethodAttribute()]
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://client.different.url/services/action/ListenerService/Listener", RequestElementName = "Listener", RequestNamespace = "http://client.ns.url/", ResponseNamespace = "http://client.ns.url/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    [return: System.Xml.Serialization.XmlElementAttribute("return")] 
    public ListenerResponse Listener([System.Xml.Serialization.XmlElementAttribute("ListenerInput")]ListenerInput listenerInput)
    {
..

Это входной класс:

[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://client.ns.url")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class ListenerInput
{
    public int errorCode;
    public string errorDescription;
    public float? firstPrice;
}

Что я должен сделать, чтобы решитьэтот?Вот некоторые из журнала трассировки:

Calling IHttpHandler.ProcessRequest
    Caller: System.Web.Services.Protocols.SyncSessionlessHandler#47754503::ProcessRequest()
    Request Host Address: xxx
    Request Url: [POST] http:/my.website/Listener.asmx
..
Calling XmlSerializer [Read Request]
    Method: Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer#53218107::Deserialize(System.Web.Services.Protocols.SoapServerProtocol+SoapEnvelopeReader#4153573=.., (null))
    Caller: System.Web.Services.Protocols.SoapServerProtocol#51389704::ReadParameters()
...
The element was not expected in this context: <ListenerInput>..</ListenerInput>. Expected elements: http://client.ns.url/:ListenerInput.
...
Return from XmlSerializer [Read Request]
    Caller: System.Web.Services.Protocols.SoapServerProtocol#51389704::ReadParameters()
...
 Calling ListenerResponse Listener(ListenerInput)
    Method: ListenerService#64693151::Listener((null))
    Caller: System.Web.Services.Protocols.SyncSessionlessHandler#47754503::Invoke()

1 Ответ

1 голос
/ 14 ноября 2010

Решил проблему.Я использовал адрес пространства имен клиента, когда я должен был использовать свой собственный.Изменено это:

[System.Web.Services.WebServiceBindingAttribute(Name = "ListenerWebServicePortSoapBinding", Namespace = "http://client.ns.url/")]
public partial class ListenerService : System.Web.Services.WebService

на это:

[System.Web.Services.WebServiceBindingAttribute(Name = "ListenerWebServicePortSoapBinding", Namespace = "http://my.ns.url/")]
public partial class ListenerService : System.Web.Services.WebService
...