【发布时间】:2014-03-04 12:34:48
【问题描述】:
我正在编写一个 Windows Phone 8 应用程序,该应用程序旨在联机和脱机工作。为此,它需要能够检查互联网连接。如果没有连接,或者有连接,这很好,但是如果用户连接到 wifi 热点并且他们没有经过身份验证,那么我需要返回“无连接”状态。但是,即使使用 try catch 似乎也无法使用 WebClient 或 HttpWebRequest 捕获 System.Net.WebException 错误。我已经到处寻找解决方案,但似乎没有一个有效 - 任何帮助将不胜感激。
这是我的连接检查代码:
public async Task<bool> tskbooCheckConnectionSimpleNoQueue()
{
bool booHasConnection = false;
bool isNetwork = NetworkInterface.GetIsNetworkAvailable();
if (!isNetwork)
{
booHasConnection = false;
IsolatedStorageSettings.ApplicationSettings["booHasConnection"] = false;
return booHasConnection;
}
else
{
//actually check connection
WebClient wcConnectionCheck = new WebClient();
string strData = "";
string strConnectionCheck = "https://urltocheckconnection.com/connectioncheckmethod";
try
{
strData = await wcConnectionCheck.DownloadStringTaskAsync(new Uri(strConnectionCheck)); //exception thrown here
if (strData.ToString().Contains("success"))
{
booHasConnection = true;
IsolatedStorageSettings.ApplicationSettings["booHasConnection"] = true;
return booHasConnection;
}
else
{
booHasConnection = false;
IsolatedStorageSettings.ApplicationSettings["booHasConnection"] = false;
return booHasConnection;
}
}
catch (WebException ex)
{
booHasConnection = false;
IsolatedStorageSettings.ApplicationSettings["booHasConnection"] = false;
return booHasConnection;
}
}
}
【问题讨论】:
-
该代码在我看来是正确的。您确定没有抛出其他异常类型吗?
-
是的,如果您有连接,代码可以正常工作,但如果无法连接,则会抛出 System.Net.WebException“未找到”。实际发生的是 wifi 代理正在重定向任何流量,因此无法解析服务 URL,因此未找到。没关系,但我只需要能够处理它!
-
你检查过疯狂的事情吗,比如
catch中的WebException解析为本地类型而不是System.Net.WebException? -
不幸的是,它从来没有遇到过问题——这就是问题所在。它在
strData = await wcConnectionCheck.DownloadStringTaskAsync(new Uri(strConnectionCheck));上中断 -
如果您在调试器中运行,这是预期的行为。如果你点击继续,它应该继续
catch。
标签: c# windows-phone-8 webclient