3

現在、私たちのアプリの 1 つで、最初の HTTP Web リクエストを実行するときに大きなラグが発生します。ログによると、30 ~ 60 秒の遅延があります。HttpWebRequest.BeginGetResponse でブロックします

以下は MSDN からの引用です。

BeginGetRequestStream メソッドでは、このメソッドが非同期になる前に、いくつかの同期セットアップ タスク (DNS 解決、プロキシ検出、TCP ソケット接続など) を完了する必要があります。結果として、このメソッドはユーザー インターフェイス (UI) スレッドで呼び出されるべきではありません。これは、通常は数秒かかる場合があるためです。Webproxy スクリプトが正しく構成されていない一部の環境では、これに 60 秒以上かかる場合があります。config file 要素の downloadTime 属性のデフォルト値は 1 分であり、これが潜在的な時間の遅延の大部分を占めています。

DNS 解決、プロキシ検出、その他必要なものがあることを理解しています。しかし、30~60 秒では長すぎます。どのブラウザでも同じ URL を入力すると、すぐにページが表示されます。DNS マニュアルを解決すると、遅延もありません。同じ URI へのすべての同時要求はブロックされません。アプリケーションを再起動すると、最初のリクエストが再びブロックされます。30秒。

これは既知の問題ですか? バグはありますか?これはさまざまなマシンで見られるため、開発者のマシンに問題があるとは思いません。

コード例を次に示します。

private void TestWebRequest()
{
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://matrix.ag-software.de/http-bind");
   request.ContentType = "text/xml; charset=utf-8";
   request.Method = "POST";   
   request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);            
}

private void GetRequestStreamCallback(IAsyncResult result)
{
   //
}

更新:これは、Windows 7 のインストールに問題があるに違いありません。他の 2 台のマシンをテストしましたが、そこで同じ問題が発生することはありません。まったく同じ問題を抱えている顧客からのログファイルを見てきました。これは、一部のマシンの特定の条件下で発生するようです。

4

2 に答える 2

1

私はちょうど同じことを経験しました。

Microsoft Client Firewall がそれを生成していることがわかりました。会社のプロキシを経由しないようにするために使用していました。私の最初の回避策は、request.Proxyハードコードを設定することでした。その醜いコード行を避けるために、Microsoft クライアント ファイアウォールを無効にし、インターネット オプションでプロキシを設定することになります。

お役に立てれば。

@EricLaw が言ったように、System.Net ログが役立つ場合があります。System.Net ログを有効にするための MSDN へのリンクを次に示します。

于 2014-04-24T16:41:32.823 に答える
0

これは既知の問題です。これらのリンクで利用可能な詳細情報があります。

http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/939e78bf-b9be-4d0b-894e-ae7f0d6013ff

http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/2cb74a7e-6e8f-4d05-b86a-2401df5d2ed3/

于 2013-03-26T14:27:03.967 に答える