2009-08-12 27 views
0

タイムアウトとReadWriteTimeoutの両方をHttpWebRequestに設定しました。まだ存在しないサーバーに接続しようとすると、GetRequestStreamはタイムアウトしません。私は過去にDNS解決が打ち切られたときに同様の問題に遭遇しましたが、今回は問題のサーバーが自分のマシン(localhost)上で実行されているため、これは関係ありません。HttpWebRequest.GetRequestStreamでタイムアウトを設定するにはどうすればよいですか?

シナリオはこれです:私は私のサーバー

  • を上げる

    1. 私は正常に私は、サーバー
    2. を殺す、それに接続するPOSTを実行し、
    3. 要求/応答ストリームを閉じI再度接続しようとすると、私が設定したタイムアウトに達することを期待します。

    この時点でスレッドがハングします。私はKeepAliveをfalseに設定しようとしましたが、それは助けになりませんでした。

    私は上記のシナリオを別のスレッドで実行することを考えましたが、それが長すぎる場合は自分自身でやってください。しかし、この解決策は非常に醜いものであり、リソースリークを防ぎません。

  • 答えて

    5

    GetRequestStreamの代わりにBeginGetRequestStreamとEndGetRequestStreamを使用してみてください。タイマーを設定し、EndGetRequestStreamを十分に時間が経過した後に早期に呼び出して、要求がハングすると想定します。 EndGetRequestStreamを2回呼び出すことを防ぐために、2つのスレッド間の同期が必要であるため、要求を通常処理する場合は、BeginGetRequestStreamに渡されるデリゲートでEndGetRequestStreamも呼び出す必要があります。

    +0

    もちろん、私はこの1つを逃した方法を確信していません:) – ripper234

    関連する問題