私は簡単な方法で取得し、投稿実行するHttp Web Requestクラスのラッパーを開発した.NET HTTP要求タイムアウトは、連続的なストリーミングサイト上で「中止」ではない
範囲。このライブラリはすでに2年以上問題なく使用されていますが、今日は奇妙な問題に直面しました。
one website(ロードに時間がかかります)は、明らかにHTMLフロントエンドにストリーミング文字を保持しているので、私たちのライブラリ「Get」リクエストはループに巻き込まれます。我々は二つの異なるtimeout
性質があることを見つけるのHttp Webリクエストの参照を見てみると
異なるタイムアウトプロパティ
。私たちは両方を使用していますが、どれも適切に中断していないようです。
- Read Write Timeout - ストリームへの書き込みまたはストリームからの読み取りのタイムアウトをミリ秒単位で取得または設定します。
- Timeout - GetResponseおよびGetRequestStreamメソッドのタイムアウト値をミリ秒単位で取得または設定します。
つのタイムアウトは、それらを支配するために、すべての
いくつかの事前設定した時間後に廃棄ストリーム/接続を強制的に「操作タイムアウト」を設定する方法はありますか?
いくつかのコードサンプル
public class Program
{
public static void Main()
{
string url = "http://anus.io";
Console.WriteLine("Initializing Request State Object");
RequestState myRequestState = new RequestState();
// Creating Http Request
myRequestState.request = (HttpWebRequest)WebRequest.Create(url);
myRequestState.request.Method = "GET";
myRequestState.request.ReadWriteTimeout = 4000;
myRequestState.request.Timeout = 4000;
Console.WriteLine("Begining Async Request");
IAsyncResult ar = myRequestState.request.BeginGetResponse(new AsyncCallback(ResponseCallback), myRequestState);
Console.WriteLine("Waiting for Results");
ar.AsyncWaitHandle.WaitOne();
myRequestState.response = (HttpWebResponse)myRequestState.request.EndGetResponse(ar);
Console.WriteLine("Response status code = {0}", myRequestState.response.StatusCode);
}
public static void ResponseCallback (IAsyncResult asyncResult)
{
Console.WriteLine("Completed");
}
}
This Code seem to work fineが、それは常にtransmitedされているので、(ブラウザが示すように)どのように私は、文字列として応答を読んでいますか?
質問
このようなウェブサイトを処理するための適切な方法は何ですか? (?ハンドルによって私は、サーバーは、単に送信を止めるつもりはないような状況を識別し、スキップできるようにする意味)