2014-03-04 27 views
3

我正在编写一个旨在联机和脱机工作的Windows Phone 8应用程序。要做到这一点,它需要能够检查互联网连接。这没问题,如果没有连接,或者有连接,但如果用户连接到一个wifi热点,但他们没有通过身份验证,那么我需要返回一个“无连接”状态。但是,即使尝试捕获,似乎也无法使用WebClient或HttpWebRequest捕获System.Net.WebException错误。我搜索了解决方案,但似乎没有工作 - 任何帮助,将不胜感激。Windows Phone 8连接检查WebClient抛出可怕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; 
      } 
     } 
    } 
+0

该代码看起来对我来说很合适。你确定没有其他的异常类型被抛出吗? –

+0

是的,如果你有一个连接,代码工作正常,但如果它不能连接,那么它会抛出System.Net.WebException“Not Found”。实际发生的情况是WiFi代理重定向任何流量,因此无法解析服务URL,因此无法找到。这很好,但我只需要能够处理它! – James

+0

你是否检查过疯狂的东西,比如你的catch中的'WebException'解析为本地类型而不是'System.Net.WebException'? –

回答

2

听起来像是你有捕捉处理的异常开启。

在visual studio中,点击'Debug'菜单并选择'Exceptions'。

在“公共语言运行时例外”项目下,取消选中“投掷”列。

您的调试器将不再中断,并且异常将被捕获。

enter image description here

+0

谢谢 - 你是对的。我之前实际上已经通过解除system.net.webexception来尝试此操作。这个解决方案虽然有问题,但是: - 一旦进入捕获,代码运行非常缓慢。 - 这不会影响所有Visual Studio项目吗? - 这真的是处理这个问题的最好方法吗?感觉像一个丑陋的黑客... – James

+1

你看到的是'第一次机会例外',这不是黑客 - 调试器告诉你发生了异常。你不需要知道,因为你正确地处理它。我通常在关闭此选项的情况下工作,并且只在我正在主动调试我的项目并希望查找发生的不在正确位置处理的异常时才将其打开。 –

+0

好的。感谢您的帮助 - 非常感谢。 – James

相关问题