2017-09-24 77 views
0

这是一个很简单的问题:C#HttpWebRequest的使用WSDL URL

+0

欢迎来到stackoverflow.com。你能澄清你的问题吗?你问如何从wsdl文件创建你自己的WebService? https://stackoverflow.com/questions/1394930/how-to-generate-web-service-out-of-wsdl – wp78de

回答

0

向网址中添加参数时,您正在执行HTTP GET。如果您通过HTTP执行“标准”SOAP,则您的假设不正确。所有的SOAP服务都使用POST。他们可以在技术上使用GET,但通常您会看到POST。原因很简单。 SOAP XML很复杂,并且包含URL中的内容将是一件非常痛苦的事情。

假设你有一个简单的一块XML一样的:

<Customer> 
    <Name>John</Name> 
</Customer> 

在获取URL将是可怕的东西。

现在服务器如何知道要执行哪个操作。那么它看起来是在做出的请求。该操作未在URL中指定。

例如我有一个服务,它有两个操作ListAccountsForStatus和ListTelephonicContactsByDate,它们都在http://my-server:9100/AccountService/V1的URL上运行。然而,要求会有所不同:

POST http://my-server:9100/AccountService/V1 
Accept-Encoding: gzip,deflate 
Content-Type: text/xml;charset=UTF-8 
SOAPAction: "http://www.insol.irix.com.au/ECollNXDB_V1/EcollUtilsServices/ListTelephonicContactsByDate" 
Content-Length: 1337 
Host: my-server:9100 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/4.1.1 (java 1.5) 
<soapenv:Envelope> 
<soapenv:Header/> 
<soapenv:Body> 
    <ecol:ListTelephonicContactsByDate> 
    <ecol:ListTelephonicContactsByDateReq> 

     <ecol:Date>2016-08-04</ecol:Date> 
    </ecol:ListTelephonicContactsByDateReq> 
    </ecol:ListTelephonicContactsByDate> 
</soapenv:Body> 
</soapenv:Envelope> 

,第二个:

POSThttp://my-server:9100/AccountService/V1 HTTP/1.1 
    Accept-Encoding: gzip,deflate 
    Content-Type: text/xml;charset=UTF-8 
    SOAPAction: "http://www.insol.irix.com.au/ECollNXDB_V1/EcollUtilsServices/GetAccountStatusInfo" 
    Content-Length: 1329 
    Host: my-server:9100 
    Connection: Keep-Alive 
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5) 

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ecol="http://www.insol.irix.com.au/ECollNXDB_V1" xmlns:irix="http://www.insol.irix.com.au/IRIX_Headers_V1" xmlns:irix1="http://schemas.datacontract.org/2004/07/IRIXContract.MsgHeaderBase"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ecol:GetAccountStatusInfo> 
      <ecol:GetAccountStatusInfoReq> 

       <ecol:accountNumber>376062766403006</ecol:accountNumber> 
      </ecol:GetAccountStatusInfoReq> 
     </ecol:GetAccountStatusInfo> 
    </soapenv:Body> 
    </soapenv:Envelope> 

请注意,该操作在SOAPAction头指定。所以简而言之,您可以使用SOAP Web服务。

  1. 点代码生成库(在你的情况看WCF的蓝色,或如何从WSDL为C#代码)的 WSDL和生成所需的类。
  2. 使用生成的类与服务进行交互使用URL而不是WSDL URL。

您不想手动编写XML请求并读取响应。