私はHttpWebResponse.BeginGetResponse()メソッドを使用して自分のサーバーにリクエストを行います。 「リクエスト完了」の通知では、私は次の操作を行います(エラー処理コードは含まれません):メンバ変数としてどこか)response.GetResponseStream(から取得したStreamを保存するためにOKですし、場合HttpWebResponse.GetResponseStream()を使用して取得したストリームからの読み取りをキャンセルする方法は?
HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.EndGetResponse(result);
BinaryReader streamReader = new BinaryReader(response.GetResponseStream());
while ((readSize = streamReader.Read(buffer, 0, buffer.Length)) > 0)
{
...
}
私の質問があります
m_requestState.httpRequest.Abort();
m_requestState.httpRequestStream.Close(); // If this is missing then
// streamReader.Read() locks for a long time when connection is lost.
このコードは、streamReader.Read()がSystem.ObjectDisposedExceptionをスローするようにします。
ありがとうございました!
ミハイ
こんにちは、Valipour! IsCancelledに似たフラグがありますが、ストリームからデータを読み込んでいる間に、実行したいキャンセル要求が「要求完了」通知の内側にあるため、これでは不十分です。 「Request Complete」が呼び出されたときに、すべてのデータがローカルで使用できるように、myHttpWebRequest.AllowReadStreamBuffering = falseを使用していることに注意してください。 m_requestState.httpRequestStream.Close()を呼び出さなければ、アプリケーションは破損した接続からそれ以上のデータを読み取ることができないため、streamReader.Read()呼び出しにロックされます。 – Mihai
また、Webリクエストをm_requestState.httpRequestとして保存しています。キャンセル関数でAbortを呼び出します。 'm_requestState.httpRequest.Abort();' – Mihai