2017-09-24 75 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請求並讀取響應。