2017-09-24 10 views
0

と、これは非常に単純な質問です:あなたは、Webサーバーに接続するときC#のHttpWebRequest WSDLのURL

  • は、通常は、.asmxというアドレスを持っているし、この場合、異なる方法で(のはWebService1それを呼びましょう。 ASMXとメソッドのHelloWorld)この場合、【選択呼び出しはこのようなものになるだろう: "http://localhost:56405/WebService1.asmx?op=HelloWorld" @

    のHttpWebRequest WebRequestクラス=(HttpWebRequestの)WebRequest.Create();

  • 私の場合、私はWSDLアドレス(https://www.websirte.es:8443/webservices/methodIhavetocall?wsdl)しか持っていませんし、メソッドを呼び出すためのパラメータも知っています。 HttpWebRequestを作成したい場合、どうすればいいですか?

+0

Welcome to stackoverflow.comあなたの質問を明確にすることはできますか? wsdlファイルから独自のWebServiceを作成する方法を尋ねますか? https://stackoverflow.com/questions/1394930/how-to-generate-web-service-out-of-wsdl – wp78de

答えて

0

URLにパラメータを追加するときは、HTTP GETを実行しています。 HTTP経由で「標準の」SOAPを行っている場合、あなたの前提は正しくありません。すべてのSOAPサービスはPOSTを使用します。彼らは技術的にGETを使うことができますが、通常はPOSTが表示されます。理由は簡単です。 SOAP XMLは複雑であり、URL内のXMLは本当の苦痛になるでしょう。

はあなたのようなXMLのシンプルな一枚を持っていると仮定すると:

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

GETのURLは恐ろしい何かになるだろう。

これで、サーバーはどの操作を実行するのかを知ることができます。さて、それは作られた要求を見ます。操作はURLに指定されていません。

たとえば、ListAccountsForStatusとListTelephonicContactsByDateという2つの操作を持つサービスがあり、どちらもURLはhttp://my-server:9100/AccountService/V1です。しかし、要求が異なって見える:

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> 

2つ目:操作はSOAPActionヘッダーに指定されていること

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> 

は注意してください。つまり、SOAP Webサービスを使用することです。

  1. ポイントあなたのコード生成ライブラリ(あなたのケースでWCFブルーのための外観、またはどのようにC#のためのWSDLからコードを生成するために) WSDLに、必要なクラスを生成します。
  2. 生成されたクラスを使用して、WSDL URL以外のURLを使用してサービスとやり取りします。

xmlリクエストを手作業でコード化してレスポンスを読む必要はありません。

関連する問題