Windows Server 2003を実行している1つのサーバーでこのエラーが発生しています。
System.Net.WebException:基礎となる接続が閉じられました:送信時に予期しないエラーが発生しました。
これが私のコードです...アイデアはありますか?
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https:// URL HERE ");
//request.Headers.Add("Accept", "application/xml");
byte[] bytes;
bytes = System.Text.Encoding.ASCII.GetBytes(xml);
request.KeepAlive = false;
request.Accept = "application/xml";
request.ContentType = "application/xml; charset='UTF-8'";
request.ContentLength = bytes.Length;
request.Method = "POST";
request.Timeout = 10000;
request.ServicePoint.Expect100Continue = false;
この問題は、クライアントコンピューターがHTTP要求を送信できない場合に発生します。接続が閉じられているか、利用できないため、クライアントコンピューターはHTTP要求を送信できません。この問題は、クライアントコンピューターが大量のデータを送信しているときに発生する可能性があります。この問題を解決するには、解像度A、D、E、F、およびOを参照してください。
HttpWebRequest.KeepAliveをfalseに設定しても機能しませんでした。
HTTPSページにアクセスしていたので、Service Point Security ProtocolをTls12に設定する必要がありました。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
他のSecurityProtocolTypesがあることに注意してください。
SecurityProtocolType.Ssl3
SecurityProtocolType.Tls
SecurityProtocolType.Tls11
Tls12が機能しない場合は、残りの3つのオプションを試してください。
また、複数のプロトコルを設定できることに注意してください。これはほとんどの場合に適しています。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12| SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
.NET 4.5でRestSharpを使用すると、同じエラーが発生していました。同じURLをcURLでテストしましたが、うまくいきました。長いデバッグの後、SecurityProtocolを設定することで問題が解決することがわかりました。
私の場合、環境間でURLを交換するときに「https」から「s」を削除するのを忘れていました。偶然にhttpsでLocalhostにアクセスしていました。 https証明書がない、または期限切れの証明書があるhttpサイトにアクセスしている場合も、同じことが起こります。
この場合、この問題が発生する可能性があります。フィルターリンクであるリンクをダウンロードする必要があり、そのリンクをダウンロードする権限がありません。
HttpWebRequestでrssファイルをダウンロードしようとすると、このエラーが発生していました。ブラウザでテストし、応答コードを確認したとき、URLは正常でした。ここですべてを試した後、サイトがユーザーエージェントに基づいてブロックしている可能性がありました。
リクエスト内のユーザーエージェント文字列の変更は機能しました:
let request = WebRequest.Create(url) :?> HttpWebRequest
request.UserAgent <- @"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
let response = request.GetResponse()
このユーザーエージェント文字列は、Google Chromeで「ユーザーエージェントとは」と入力したことに由来しています。