0

クライアントで WebRequest を使用して、インターネット上の Web サービスを使用します。各リクエストは個別のスレッドでトリガーされます。

IIS でクライアントをホストしている場合はうまく機能します。ただし、クライアントが Windows サービスでホストされている場合、ほとんどの要求はタイムアウト エラーになります。

Fiddler を使用して問題をデバッグしようとしたところ、すべてのトラフィックが 127.0.0.1:8888 を通過したため、WebRequest は正常に機能しました。

Fiddler がないと、トラフィックはランダムなポートを介して直接インターネットに送られ、タイムアウトの問題が再び発生します。

Windows サービスは、ローカル システム アカウントで実行されます。

クライアントがプロキシを使用せずに Windows サービスを使用している場合、タイムアウトになるのはなぜですか?

更新: 私の最初の質問は明確ではありませんでした。要求は同時に (または非常に短い間隔で) 行われます。これは、ServicePoint クラスの接続制限に関係しています。デフォルトでは、同じ外部宛先に対して 2 つの接続のみが許可されます。宛先がローカルの場合、制限は int.Max 値になります。そのため、フィドラーはプロキシの問題を魔法のように修正できます。そのため、手動で DefaultConnectionLimit を 100 に設定すると、リクエストはオンラインになります。

C# での HttpWebRequest 接続タイムアウトの調整

4

1 に答える 1

1

Fiddler を実行することによって "魔法のように" 修正される問題の最も一般的な原因は、.NET コードがClose()によって返されたオブジェクトの呼び出しに失敗した場合GetResponseStream()です。詳細については、 http://www.telerik.com/automated-testing-tools/blog/13-02-28/help-running-fiddler-fixes-my-app.aspxを参照してください。

于 2013-09-30T11:57:05.973 に答える