【问题标题】:Windows Phone 8 connection check WebClient throws dreaded System.Net.WebExceptionWindows Phone 8 连接检查 WebClient 抛出可怕的 System.Net.WebException
【发布时间】: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


【解决方案1】:

听起来你已经打开了捕获处理的异常。

在 Visual Studio 中,单击“调试”菜单并选择“异常”。

在“Common Language Runtime Exceptions”项下,取消选中“Thrown”列。

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

【讨论】:

  • 谢谢 - 你是对的。实际上,我之前通过取消选中 system.net.webexception 来尝试过这个。这个解决方案担心的是: - 一旦遇到问题,代码运行非常缓慢。 - 这不会影响所有 Visual Studio 项目吗? - 这真的是最好的处理方式吗?感觉就像一个丑陋的黑客......
  • 您看到的是“第一次机会异常”,这不是黑客攻击 - 调试器告诉您发生了异常。不过,您不需要知道,因为您正在正确处理它。我通常在关闭此选项的情况下工作,并且仅在我正在积极调试我的项目并希望找到我没有在正确位置处理的异常时才打开它。
  • 好的。感谢您的帮助 - 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 2015-08-27
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
相关资源
最近更新 更多