私はローカルマシンで動作している次のコードを使用していますが、サーバー上で同じコードを試したときにエラーがスローされます
接続されたパーティが一定時間後に適切に応答しなかったために接続試行が失敗したか、接続されたホストが応答に失敗したために確立された接続が失敗しました
ここに私のコードがあります:
WebClient client = new WebClient();
// Add a user agent header in case the
// requested URI contains a query.
//client.Headers.Add ("ID", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
Stream data = client.OpenRead("http://" + Request.ServerVariables["HTTP_Host"] + Request.ApplicationPath + "/PageDetails.aspx?ModuleID=" + ID);
StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
Console.WriteLine(s);
data.Close();
reader.Close();
エラーが発生しています
Stream data = client.OpenRead("http://" + Request.ServerVariables["HTTP_Host"] + Request.ApplicationPath + "/PageDetails.aspx?ModuleID=" + ID);
ファイアウォールの設定によるものですか?
私は同様の問題があり、URLを文字列からUriオブジェクトに変換する必要がありました:
Uri myUri = new Uri(URLInStringFormat, UriKind.Absolute);
(URLInStringFormatはURLです)文字列の代わりにUriを使用して接続してみてください:
WebClient client = new WebClient();
client.OpenRead(myUri);
web.config
でプロキシアドレスを明示的に設定すると、問題が解決しました
<system.net>
<defaultProxy>
<proxy usesystemdefault = "false" proxyaddress="http://address:port" bypassonlocal="false"/>
</defaultProxy>
</system.net>
私はこのチケットが古いことを知っていますが、この問題にぶつかりました。
私のサービスでは、別のWebサービスへの呼び出しがありました。馬鹿げたように、Webサービスを公開したときにDNS設定が正しいことを確認するのを忘れていたため、公開されたWebサービスはapi.myproductionserver.comではなくapi.myproductionserver.localから呼び出そうとしました。タイムアウトの原因はバックエンドWebサービスでした。
とにかく、私はこれを渡すと思った。
このコードがブラウザでアクセス可能にしているURLはありますか?
http://" + Request.ServerVariables["HTTP_Host"] + Request.ApplicationPath + "/PageDetails.aspx?ModuleID=" + ID
最初に確認する必要があるのは、作成しているURLが正しいことです。次に、ブラウザでチェックして、ブラウズしているかどうかを確認します。次に、 Fiddler ツールを使用して、ネットワークを通過するものを確認します。コードを介して呼び出されているURLが誤ってエスケープされている可能性があります。
次に、ファイアウォール関連の問題を確認します。
この問題がありました。ローカルで実行しているときはコードが正常に機能しましたが、サーバーでは機能していませんでした。 psPingの使用( https://technet.Microsoft.com/en-us/sysinternals/psping.aspx )アプリケーションポートが何も返さないことに気付きました。ファイアウォールの問題であることが判明しました。 Windowsファイアウォールでアプリケーションポートを有効にしていませんでした。
[管理ツール]> [セキュリティが強化されたWindowsファイアウォール]により、アプリケーションポートが受信ルールに追加され、機能し始めました。
どういうわけか、アプリケーションのポート番号が変更されたため、何が起こっているのかを理解するのに少し時間がかかりました-だから、誰かが時間を節約できるなら、この可能性を共有すると思いました...
最初の可能性:関連Web.configファイルの暗号化された文字列は、上記の接続文字列に入力されたものと同じである必要があります。また、「レジストリエディタ」またはregedit.exe
(実行時に記述)、変更後、レジストリエディターを閉じ、実行時にIISRESET
と入力してインターネットインフォメーションサービスをリセットします。次に、環境にログインします。
実行時にServices.mscと入力して確認します:
ASP.NET State Servicesのステータスが開始されました。そうでない場合は、プロパティを右クリックして、スタートアップの種類を自動に変更します。
その特定の銀行のIris ReportManagerサービスは、開始済みとしてリストされています。実行中の場合、リストに「IRIS REPORT MANAGER SERVICE」と表示されます。そうでない場合は、IRIS.REPORTMANAGER.EXE
をクリックして実行します
その後、再度IISをリセットします
私はそれが古い投稿であることを知っていますが、まったく同じ問題に遭遇し、問題を引き起こしていたMALWAREBYTES
プログラムをオフにすることでこれを使用することができました。
この投稿が5年前に投稿されたことは知っていますが、最近この問題が発生しました。企業ネットワークの制限が原因である可能性があります。したがって、私の解決策は、WebClient
にプロキシサーバーを通過させて呼び出しを行うことです。ここに私のために働いたコードがあります。それが役に立てば幸い。
using (WebClient client = new WebClient())
{
client.Encoding = Encoding.UTF8;
WebProxy proxy = new WebProxy("your proxy Host IP", port);
client.Proxy = proxy;
string sourceUrl = "xxxxxx";
try
{
using (Stream stream = client.OpenRead(new Uri(noaaSourceUrl)))
{
//......
}
}
catch (Exception ex)
{
throw;
}
}
web.configに次のコードブロックを追加すると、問題が解決します
<system.net>
<defaultProxy enabled="false" >
</defaultProxy>
</system.net>
サーバーのプロキシ設定によって問題になる可能性があります。プロキシ設定を無効にして試すことができますが、<defaultProxy enabled="false" />