Compact Framework - WebRequest有时会无缘无故地失败?

时间:2009-01-30 10:31:39

标签: web-services windows-mobile compact-framework c#-2.0

我有一个网络服务,我通过PDA与他交谈。在与webservice asmx文件相同的目录中,我有一个html文件,我从中提取Web请求以查看目录是否可用。

我使用以下代码:

    /// <summary>
    /// Holds the web request for checking the connectivity.
    /// </summary>
    private static WebRequest m_WebRequest;


    /// <summary>
    /// Tests the connection to the provided URL.
    /// </summary>
    /// <param name="url">The URL to test.</param>
    /// <returns>True if the URL was resolved.</returns>
    public static bool TestUrl(string url)
    {

        try
        {


            // Ensure the url is valid
            url = url.Replace("http:\\", "http://");
            url = url.Replace("\\", "/");

            // Create the request
            m_WebRequest = WebRequest.Create(url);
            m_WebRequest.Timeout = 30000;

            // Get the request
            HttpWebResponse response = (HttpWebResponse)m_WebRequest.GetResponse();
            return true;

        }
        catch
        {
            m_WebRequest.Abort();
            return false;
        }

    }

我收到回复的文件总是一样的,并且始终可以从我的电脑上访问。当Web服务(与html文件在同一目录中)出错时,它似乎只会失败。这可能是相关的吗?

或者,有没有更好的方法来查看该文件是否存在于网络上?

6 个答案:

答案 0 :(得分:0)

当PDA和互联网之间的联系失败时,我经历了类似的事情。 WebRequest自动打开GPRS / HSDPA连接,可能在该级别存在问题。

答案 1 :(得分:0)

我得到的错误只是暂停。即它坐在那里直到30秒过去,然后摔倒。令人讨厌的是它只在Web服务失败或超时时才会发生。这就像Web服务失败就是锁定虚拟目录。

pda和网络之间的网络链接没有问题。网络服务在我的网络上是本地的,因此互联网不起作用。我只是使用ActiveSync连接让我的PDA与网络通信。

答案 2 :(得分:0)

我发现问题的一半是设备数据连接。尝试手动输入设备上的口袋IE中的URL。如果可行则您的应用程序应该工作。如果没有,那么您需要先设置设备数据连接设置。如果您通过ActiveSync(或WMDC)连接尝试更改自动/工作/互联网之间的连接设置,这有时会有所帮助。

至于如何测试以查看URL是否存在。使用HEAD请求而不是GET请求。这样你就不会获得返回标题的所有数据。我不是C#家伙所以我无法帮助解决HEAD请求而不是GET请求。

答案 3 :(得分:0)

该URL始终适用于移动设备上的IE - 它无法在应用程序中运行。因此,就好像应用程序被禁止发出请求,或者我的测试代码中出现了问题(根据我原来的帖子)。

答案 4 :(得分:0)

是的,摆脱了全能并获得特定的异常消息,以便您可以详细了解正在发生的事情。

我发现在使用CF.NET时,我在System.Net.HttpWebRequest.finishGetResponse()中遇到了很多错误,并且由于信号不良,它们很可能是数据连接中断。

答案 5 :(得分:0)

我使用了SDF 2.3的Ping组件。该错误始终是超时,仅在Web服务出错时发生。仍然无法解释,但我想我正在做的检查是一种不好的做法。