1. ホーム
  2. c#

[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました

2022-02-15 04:05:37

質問

次のようなコードがあります。

private Uri currentUri;

private void Form1_Load(object sender, EventArgs e)
{
    currentUri = new Uri(@"http://www.stackoverflow.com");
    HttpWebRequest myRequest = (HttpWebRequest) HttpWebRequest.Create("http://www.stackoverflow.com");
    WebProxy myProxy = new WebProxy("120.198.230.8:81");
    myRequest.Proxy = myProxy;

    HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

    webBrowser1.DocumentStream = myResponse.GetResponseStream();

    webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating);
}

void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
    if (e.Url.AbsolutePath != "blank")
    {
        currentUri = new Uri(currentUri, e.Url.AbsolutePath);
        HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(currentUri);

        HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

        webBrowser1.DocumentStream = myResponse.GetResponseStream();
        e.Cancel = true;
    }
}

コンパイル後

エラーが発生しました。タイプ 'System.Net.WebException' の処理されない例外が発生しました。 System.dll で発生しました。

追加情報です。基礎となる接続が閉じられました。接続は閉じられました。 受信時に予期せぬエラーが発生しました。

ラインにて HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

よろしくお願いします。

どのように解決するのですか?

基礎となる接続が閉じられた。受信時に予期しないエラーが発生しました。

<ブロッククオート

この問題は、サーバーまたは他のネットワークデバイスが 既存のTCP(Transmission Control Protocol)を不意に終了させる。 コネクションを使用します。この問題は、接続のタイムアウト値によって発生する可能性があります。 サーバーまたはネットワーク機器の設定が低すぎる。この問題を解決するには この問題は、解決策 A、D、E、F、および O を参照してください。 が発生した場合など、サーバーが予期せず接続をリセットした場合に起こります。 処理されない例外がサーバープロセスをクラッシュさせます。サーバーを分析する のログを見て、これが問題である可能性があるかどうかを確認します。

解決方法

この問題を解決するには、最新バージョンの.NET Frameworkを使用していることを確認します。

をオーバーライドするメソッドをクラスに追加します。 GetWebRequest メソッドを使用します。この変更により、HttpWebRequestオブジェクトにアクセスできるようになります。Microsoft Visual C# を使用している場合、新しいメソッドは以下のようなものである必要があります。

class MyTestService:TestService.TestService
{
    protected override WebRequest GetWebRequest(Uri uri)
    {
        HttpWebRequest webRequest = (HttpWebRequest) base.GetWebRequest(uri);
        //Setting KeepAlive to false
        webRequest.KeepAlive = false;
        return webRequest;
    }
}

からの抜粋 KB915599:.NET Framework 1.1 Service Pack 1で構築されたアプリケーションでHTTPリクエストを実行すると、1つまたは複数のエラーメッセージが表示されることがあります。 .