私が書いている統合テストの一環として、すべての応答データが送信される前に、クライアントのHTTPリクエストが早期に終了すると、サーバが正しく動作することを主張したいと思います。Webリクエストを早期に終了する
HTTPリクエストを作成し、C#でわずか数バイトのデータを受信した後に終了することはできますか?
私が書いている統合テストの一環として、すべての応答データが送信される前に、クライアントのHTTPリクエストが早期に終了すると、サーバが正しく動作することを主張したいと思います。Webリクエストを早期に終了する
HTTPリクエストを作成し、C#でわずか数バイトのデータを受信した後に終了することはできますか?
私のために働く解決策が見つかりました。私はちょうどそれを取得した後、応答を閉じます。これは私に応答ヘッダーを残しているようですが、サーバーが送信を完了する前に接続を閉じます。
var response = request.getResponse();
response.Close();
// Assert that server has dealt with closed response correctly
バックグラウンドワーカーを使用して非同期に呼び出しを開始し、スレッド/チャネルを閉じます。
スレッド/ bgworkerは必要ありません。非同期的に処理したい場合は、WebRequestのBeginGetResponseメソッドとEndGetResponseメソッドを使用することができます。http://msdn.microsoft.com/en-us/library/86wf6409.aspx – Ravi
応答のすべてのバイトを読み取る必要はありません。必要なだけ多くのバイトを読み、テストから戻ってください。あなたは便利WebReponse上のドキュメントを見つけることが
Stream myStream = resp.GetResponseStream();
myStream.Read(bufferArray, 0, 1); //read 1 byte into bufferArray
return;
:
あなたはこのように、多かれ少なかれ行うことができます。
これはかなりうまく動作します!私の場合、特定の応答データは気にしませんが、ストリームをただちに閉じることはできません。 – Karl
@Karl、あなたは正しい。応答を正確に確認してください。 –
"*リクエスト*データがすべて送信される前に"という意味ですか? –
いいえ、要求は正常に送信されますが、すべての応答データがサーバーから返される前に接続を終了します。イメージングが完了する前にファイルのダウンロードを停止します。 – Karl