6

HttpWebRequests の ReadWriteTimeout は、デフォルトで 5 分に設定されているようです。

こんなに高いのには何か理由があるのですか?API 呼び出しのタイムアウトを 10 秒に設定しようとしましたが、2 分以上回転していました。

これを 30 秒に設定すると、妥当な時間でタイムアウトになります。

これを低くしすぎると危険ですか?

アプリケーションで 20 ~ 30 秒以上かかることは想像できません (小さな 2 ~ 30kb のペイロード)。

参照: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.readwritetimeout.aspx

4

4 に答える 4

25

確かに5分のタイムアウトには理由があります。次のようになります。

ここに画像の説明を入力

この装置は、国際電波天文研究センターで使用されているロボット テープ検索システムです。32.5 ペタバイトの履歴データを保存します。サーバーが HttpWebRequest を受け取ると、マシンはロボットを送り出し、データを含むテープを取得します。ご想像のとおり、これにはしばらく時間がかかります。

これらのシステムは、.NET が設計された頃の 10 年前には非常に一般的でした。今日ではそうではありませんが、ハードディスクの記憶容量の絶え間ない改善により、それらは時代遅れに近づきました。5ペタバイトを超えるSANストレージでも、かなりの金額が戻ってきます. 速度が重要でない場合、テープに勝るものはありません。

明らかに、.NET は、ワイヤの反対側で何が起こっているかについて何も知らない場合、タイムアウトを確実に宣言できない可能性があります。したがって、デフォルトは高いです。特定のセットアップに上限があると信じる十分な理由がある場合は、ためらわずにそれを下げてください。編集可能な設定にしてください。未来を予測することはできません。

于 2013-02-02T21:36:22.613 に答える
7

Web サイトに接続するユーザーの接続速度を知ることはできません。また、このフレームワークの作成者として、開発者が何をホストするかを知ることもできません。このクラスは .NET 1.1 に既に存在していたため、非常に長い間使用されていました。そして当時、ユーザーも速度が遅かった.

適切なデフォルト値を見つけるのは非常に困難です。セキュリティ上の欠陥を防ぐために高すぎる設定は望ましくありません。また、低すぎる設定も望ましくありません。これにより、100 万の (誇張された) スレッドと中止されたリクエストに関するリクエストが発生するためです。

正式な情報源を提供できないことは申し訳ありませんが、これは理にかなっています。

于 2013-01-29T07:38:41.000 に答える
3

なんで5分?なぜだめですか? JustAnotherUserYouMayKnowはそれをかなりうまく説明してくれました。しかし、いつものように、このデフォルト値をあなたのケースに合った値に自由に変更できるので、クリスチャンが指摘した道を自由にたどってください.

何百万ものユーザーと、おそらく何百万ものシナリオが関係している場合、デフォルト値を設定するのは簡単なことではありません。

結論から言うと、なぜ 5 分なのかはそれほど重要ではなく、自分のニーズに合わせてどのように調整できるかということです。

于 2013-02-02T20:18:42.327 に答える
0

それを低く設定すると、一連の問題が発生する可能性があります。あなたは合理的な時間内にサイトにアクセスできるかもしれませんが、他の人はできないかもしれません.

Proxy Servers完璧な例は Verizon で、接続を大幅に遅くする一連の呼び出しを行います。そのような例を挙げた理由。Timeoutアプリケーションが例外をスローする1 分前に指定されています。

私たちのサーバーは大量のリクエストに問題はなく、非常に簡単に処理できます。ただし、世界中の一部のユーザーは、エラー 10060というエラーを受け取ります。

問題は、正しくないProxy Configuration、またはInvalid Registry Key実際にTimeoutリクエストを処理するものからルーティングされる可能性があります。

1 分で十分速いと思うかもしれませんが、実際にはそうではありません。この顧客の特定のネットワークと同様に、データを十分に迅速に吸い上げないため、エラーが発生します。

だからあなたは尋ねました:

HttpWebRequest の ReadWrite Timeout がデフォルトで 5 分に設定されているのはなぜですか?

彼らは最小公分母を説明しようとしています。

簡単に言えば、各ネットワークとクライアントは、目的の場所に移動するときに膨大な量のトラフィックや遅延が発生する可能性があります. ポートの理想的なソケット要求内で宛先に到達できない場合、ユーザーは例外を経験します。

ネットワークについて知っておくべき非常に重要なこと:

  • 構成されている一部のネットワークには、制限されたホップ カウント/有効期限があります。
  • データのフィルタリングとセキュリティに重いプロキシとファイアウォールは、トラフィックを遅延させる可能性があります.
  • 一部の地域では、ファイバーまたはケーブルの高速化が行われていません。衛星や DSL に依存している可能性があります。
  • 各ネットワーク プロトコルは異なります。

これらは、考慮しなければならないいくつかの変数です。インターネットについて話している場合。各クライアントにはホーム ネットワークがあります。ISPに接続します。インターネットに接続します。あなたにつながるもの。したがって、集約するトラフィックの形式がいくつかあります。

イントラネットについて話している場合、最新のテクノロジーのほとんどでは、あなたの時間が問題になる可能性はわずかですが、それでも可能性があります.

また、個々のコンピューターが問題に関与したり、問題を引き起こしたりする可能性があります。Windows 8 ではTimeout、ブラウザに指定されたデフォルトは 1 分です。場合によっては、これらのユーザーがアプリケーション、サイト、またはその他で例外を経験することがあります。ServerTimeOutそのため、レジストリのとキーを手動で変更してTimeOut、より長い値を割り当てます。

要するに:

  • クライアント マシンは、割り当てられた時間内にサイトに到達する際に問題を引き起こす可能性があります。
  • 一部のユーザーにとって、ネットワーク/ISP に問題が発生する可能性があります。
  • サーバーが正しく構成されていないか、適切な時間が割り当てられていない可能性があります。

これらはすべて考慮する必要がある変数です。アプリケーションへのアクセスに影響を与えるためです。残念ながら、サービスが開始され、ユーザーがサイトを利用し始めるまで、確実なことはわかりません。

残念ながら、指定した時間が十分かどうかはわかりません。ただし、世界中で非常に多くの変動があり、最小公分母を考慮しようとしているため、デフォルトでより高い数値が設定されています。あなたの目標は、できるだけ多くの人にリーチすることです。

ところで、非常に良い質問であり、これまでのところいくつかの素晴らしい回答もあります。

于 2013-02-04T20:37:04.653 に答える