Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Soap头异常意外元素_Asp.net_Web Services_Soap_Xsd_Wsdl - Fatal编程技术网

Asp.net Soap头异常意外元素

Asp.net Soap头异常意外元素,asp.net,web-services,soap,xsd,wsdl,Asp.net,Web Services,Soap,Xsd,Wsdl,我们在ASP.Net产品中使用的一个Web服务发布了一个新的WSDL。但他们声称功能没有改变。 因为我遇到了一个异常,所以我尝试比较新旧WSDL。 我看到一些格式“语言”的差异。 这是表示Soap WSDL的两种不同方式, 或者这是两种不同版本的模式编写?我在网上找不到这方面的任何提及 我还是.Net世界的新手! 我是否应该继续在.Net产品中简单地重新创建引用并使用它 无论如何,这是个例外 Error Type: System.Web.Services.Protocols.SoapHeader

我们在ASP.Net产品中使用的一个Web服务发布了一个新的WSDL。但他们声称功能没有改变。 因为我遇到了一个异常,所以我尝试比较新旧WSDL。 我看到一些格式“语言”的差异。 这是表示Soap WSDL的两种不同方式, 或者这是两种不同版本的模式编写?我在网上找不到这方面的任何提及

我还是.Net世界的新手! 我是否应该继续在.Net产品中简单地重新创建引用并使用它

无论如何,这是个例外

Error Type: System.Web.Services.Protocols.SoapHeaderException
Error Message: Unexpected element {urn:SOAP_PmtPortal_Server}newOrder found.   Expected {urn:ServerPmtPortal}newOrderRequest.
Error Source: System.Web.Services
Stack Trace:    at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
我包括旧的和新的WSDL(除去一个操作以外的所有操作)

旧WSDL(有关新WSDL,请参见本节后面的内容)


新的WSDL是这样的


<?xml version='1.0' encoding='UTF-8'?>
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:tns="urn:ServerPmtPortal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="ServerPmtPortalService" 
targetNamespace="urn:ServerPmtPortal">

<wsdl:types>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:ServerPmtPortal" version="1.0">

    <xs:element name="newOrderRequest">
      <xs:complexType>
        <xs:all>
          <xs:element name="appID" type="xs:string"/>
          <xs:element name="merID" type="xs:string"/>
          <xs:element name="redURL" type="xs:string"/>
          <xs:element minOccurs="0" name="uname" type="xs:string"/>
          <xs:element minOccurs="0" name="cmt" type="xs:string"/>
        </xs:all>
      </xs:complexType>
    </xs:element>

    <xs:element name="newOrderResponse">
      <xs:complexType>
        <xs:sequence>
          <xs:element minOccurs="0" name="tranID" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

  </xs:schema>
</wsdl:types>
  
<wsdl:message name="newOrder">
  <wsdl:part element="tns:newOrderRequest" name="body">
  </wsdl:part>
</wsdl:message>

<wsdl:message name="newOrderResponse">
  <wsdl:part element="tns:newOrderResponse" name="body">
  </wsdl:part>
</wsdl:message>

<wsdl:portType name="ServerPmtPortalPort">
   <wsdl:operation name="newOrder">
      <wsdl:input message="tns:newOrder" name="newOrder">
    </wsdl:input>
      <wsdl:output message="tns:newOrderResponse" name="newOrderResponse">
    </wsdl:output>
    </wsdl:operation>
</wsdl:portType>

<wsdl:binding name="ServerPmtPortalServiceSoapBinding" type="tns:ServerPmtPortalPort">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

    <wsdl:operation name="newOrder">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="newOrder">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="newOrderResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>

</wsdl:binding>
<wsdl:service name="ServerPmtPortalService">
  <wsdl:port binding="tns:ServerPmtPortalServiceSoapBinding" name="ServerPmtPortalPort">
    <soap:address location="https://stage.service.com/Pmt-proxy/services/v1/paynow"/>
  </wsdl:port>
</wsdl:service>

</wsdl:definitions>

我不知道如何理解WSDL定义中的差异。 从生成客户机或存根代码的方式来看,旧WSDL的方法newOrder采用了5个单独的参数:appID、merID、redURL、uname、cmt。 新的WSDL方法只接受一个参数,即newOrderRequest,它依次包含5个属性。
我生成了新的存根并使用它,并告诉相关人员,如果不更改代码,我们无法指向新的WSDL。

从外观上看,WSDL是不同的。但最好的检查方法是下载soapui之类的工具来模拟服务。使用soapui,您可以看到旧的和新的请求和响应布局,并对它们进行比较。

<?xml version='1.0' encoding='UTF-8'?>
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:tns="urn:ServerPmtPortal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="ServerPmtPortalService" 
targetNamespace="urn:ServerPmtPortal">

<wsdl:types>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:ServerPmtPortal" version="1.0">

    <xs:element name="newOrderRequest">
      <xs:complexType>
        <xs:all>
          <xs:element name="appID" type="xs:string"/>
          <xs:element name="merID" type="xs:string"/>
          <xs:element name="redURL" type="xs:string"/>
          <xs:element minOccurs="0" name="uname" type="xs:string"/>
          <xs:element minOccurs="0" name="cmt" type="xs:string"/>
        </xs:all>
      </xs:complexType>
    </xs:element>

    <xs:element name="newOrderResponse">
      <xs:complexType>
        <xs:sequence>
          <xs:element minOccurs="0" name="tranID" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

  </xs:schema>
</wsdl:types>
  
<wsdl:message name="newOrder">
  <wsdl:part element="tns:newOrderRequest" name="body">
  </wsdl:part>
</wsdl:message>

<wsdl:message name="newOrderResponse">
  <wsdl:part element="tns:newOrderResponse" name="body">
  </wsdl:part>
</wsdl:message>

<wsdl:portType name="ServerPmtPortalPort">
   <wsdl:operation name="newOrder">
      <wsdl:input message="tns:newOrder" name="newOrder">
    </wsdl:input>
      <wsdl:output message="tns:newOrderResponse" name="newOrderResponse">
    </wsdl:output>
    </wsdl:operation>
</wsdl:portType>

<wsdl:binding name="ServerPmtPortalServiceSoapBinding" type="tns:ServerPmtPortalPort">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

    <wsdl:operation name="newOrder">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="newOrder">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="newOrderResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>

</wsdl:binding>
<wsdl:service name="ServerPmtPortalService">
  <wsdl:port binding="tns:ServerPmtPortalServiceSoapBinding" name="ServerPmtPortalPort">
    <soap:address location="https://stage.service.com/Pmt-proxy/services/v1/paynow"/>
  </wsdl:port>
</wsdl:service>

</wsdl:definitions>