次のコードがあります
private bool IsOnline()
{
try
{
var wr = WebRequest.CreateHttp("http://www.google.com");
wr.KeepAlive = false;
wr.Credentials = CredentialCache.DefaultCredentials;
using (wr.GetResponse())
{
return true;
}
}
catch
{
return false;
}
}
私がそれを実行すると、GetResponse 行に永遠にスタックしたままになります。
回答のおかげで、問題はデフォルト プロキシにあることがわかりました。実際、次の方法で新しいプロキシを作成すると、機能します
var registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", false);
var proxy = (string)registry.GetValue("ProxyServer");
var isProxyEnabled = (int)registry.GetValue("ProxyEnable");
if (isProxyEnabled > 0)
{
wr.Proxy = new WebProxy(proxy, true, null, System.Net.CredentialCache.DefaultNetworkCredentials);
}
問題は、この回避策のコードが手動で設定されたプロキシをレジストリから読み取ることです。ユーザーが「設定を自動的に検出する」を選択した場合は機能しません。
そう: - その場合、どのようにプロキシ アドレスを見つけることができますか? - デフォルトのプロキシが機能しないのはなぜですか?