web-dev-qa-db-ja.com

HttpWebRequestクラスの使用

HttpWebRequestオブジェクトをインスタンス化します。

HttpWebRequest httpWebRequest = 
    WebRequest.Create("http://game.stop.com/webservice/services/gameup")
    as HttpWebRequest;

このサービスにデータを「投稿」すると、サービスはデータを送信するWebメソッドをどのように知るのですか?

私はこのWebサービスのコードを持っていません、私が知っているのはそれがJavaで書かれたということだけです。

14
Developer

これは少し複雑になりますが、完全に実行可能です。

実行するSOAPActionを知っている必要があります。そうしないと、リクエストを行うことができません。これを手動で設定したくない場合は、Visual Studioにサービス参照を追加できますが、サービスエンドポイントを知っている必要があります。

以下のコードは、手動のSOAPリクエスト用です。

// load that XML that you want to post
// it doesn't have to load from an XML doc, this is just
// how we do it
XmlDocument doc = new XmlDocument();
doc.Load( Server.MapPath( "some_file.xml" ) );

// create the request to your URL
HttpWebRequest request = (HttpWebRequest)WebRequest.Create( Your URL );

// add the headers
// the SOAPACtion determines what action the web service should use
// YOU MUST KNOW THIS and SET IT HERE
request.Headers.Add( "SOAPAction", YOUR SOAP ACTION );

// set the request type
// we user utf-8 but set the content type here
request.ContentType = "text/xml;charset=\"utf-8\"";
request.Accept = "text/xml";
request.Method = "POST";

// add our body to the request
Stream stream = request.GetRequestStream();
doc.Save( stream );
stream.Close();

// get the response back
using( HttpWebResponse response = (HttpWebResponse)request.GetResponse() )
{
     // do something with the response here
}//end using
18
Justin

異なるWebサービスエンジンは、着信要求を特定のWebサービス実装に異なる方法でルーティングします。

「Webサービス」とおっしゃいましたが、SOAPの使用を指定していませんでした。私はSOAPを想定します。

SOAP 1.1仕様 は...

SOAPAction HTTPリクエストヘッダーフィールドを使用して、SOAPHTTPリクエストの意図を示すことができます。値は、インテントを識別するURIです。 SOAPは、URIの形式や特異性、またはURIが解決可能であることを制限しません。 HTTPクライアントは、SOAP HTTPリクエストを発行するときにこのヘッダーフィールドを使用する必要があります。

ほとんどのWebサービスエンジンは仕様に準拠しているため、SOAPAction:ヘッダーを使用します。これは明らかにSOAP-over-HTTP送信でのみ機能します。

HTTPが使用されていない場合(たとえば、TCPなど)、Webサービスエンジンは何かにフォールバックする必要があります。多くの場合、メッセージペイロード、具体的にはsoap:envelope内のXMLフラグメントの最上位要素の名前を使用します。たとえば、エンジンは次の着信メッセージを確認する場合があります。

<soap:Envelope
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
  soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <soap:Body>
       <m:GetAccountStatus xmlns:m="Some-URI">
           <acctnum>178263</acctnum>
       </m:GetAccountStatus>
   </soap:Body>
</soap:Envelope>

... GetAccountStatus要素を見つけ、それに基づいてリクエストをルーティングします。

1
Cheeso

Java Webサービスと通信しようとしている場合は、HttpWebRequestを使用しないでください。 「サービス参照の追加」を使用して、Javaサービスを指す必要があります。

0
John Saunders