2011-07-11 25 views
4

サーバーにPOST HTTP要求を送信する必要がありますが、応答は期待できません。私はそれにどのような方法を使うべきですか?応答を期待せずにサーバーにhttp要求を送信

私がリクエストを送信し、応答を取り戻すために

WebRequest request2 = WebRequest.Create("http://local.ape-project.org:6969"); 
request2.Method = "POST"; 
String sendcmd = "[{\"cmd\":\"SEND\",\"chl\":3,\"params\":{\"msg\":\"Helloworld!\",\"pipe\":\"" + sub1 + "\"},\"sessid\":\"" + sub + "\"}]"; 
byte[] byteArray2 = Encoding.UTF8.GetBytes(sendcmd); 
Stream dataStream2 = request2.GetRequestStream(); 
dataStream2.Write(byteArray2, 0, byteArray2.Length); 
dataStream2.Close(); 
WebResponse response2 = request2.GetResponse(); 

を使用してきました。要求がサーバーから応答を返す場合、これは正常に動作します。しかし、私の必要性のために、私はちょうどPOSTリクエストを送る必要があります。そして、私が送っている要求に関連する応答はありません。どうすればいいのですか ?

私はrequest2.GetRespnse()コマンドを使用している場合は、私が「接続が予期せず終了しました」というエラーが出る

すべてのヘルプは理解されるであろう。ありがとう

答えて

6

HTTPプロトコルを使用している場合は、にはという応答があります。

しかし、それは非常に大きな応答する必要はありません。

HTTP/1.1 200 OK 
Date: insert date here 
Content-Length: 0 
\r\n 
+0

こんにちは、私はちょうどすべての応答を取得するリクエストを送信しないことができる方法があります。私の場合、GetResponse()メソッドは要求を送信し、応答を待ちます。私は第二の部分が欲しくない。私はただ要求を送る必要がある。 – CuriousCoder

+7

私の答えをお読みください。 HTTPには応答が必要です。期間。必要がない場合は、HTTPを使用せず、独自のプロトコルを実装してください。 –

2

thisの回答を参照してください。

あなたが探しているのは、Fire and Forgetパターンです。

0

HTTPには、Mike Caronが既に述べたように応答が必要です。しかし、クイック(汚れた)修正プログラムでは、 "接続が予期せず閉じられました"というエラーを受け取り、続行することができます。

0

サーバーでこれで問題ない場合は、RAWソケットを使用して要求を送信してから閉じることができます。

0

あなたが別のスレッドや簡単な使用 WebClient.UploadStringAsyncにデータを送信することができます応答を待つが、注意して応答を常に要求した後に場所を取るしたくない場合。要求に別のスレッドを使用すると、応答処理を無視できます。

0

これを参考にしてください。

public static void SetRequest(string mXml) 
{ 
    HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.CreateHttp("http://dork.com/service"); 
    webRequest.Method = "POST"; 
    webRequest.Headers["SOURCE"] = "WinApp"; 

    // Decide your encoding here 

    //webRequest.ContentType = "application/x-www-form-urlencoded"; 
    webRequest.ContentType = "text/xml; charset=utf-8"; 

    // You should setContentLength 
    byte[] content = System.Text.Encoding.UTF8.GetBytes(mXml); 
    webRequest.ContentLength = content.Length; 

    var reqStream = await webRequest.GetRequestStreamAsync(); 
    reqStream.Write(content, 0, content.Length); 

    var res = await httpRequest(webRequest); 

}

関連する問題