1

我有一个 WM 6.1 Prof. 应用程序,可以在用户希望时检查更新。

我想在尝试连接到服务器之前检查是否有任何可用的连接(GPRS 或 Wifi)。

我也在使用 openNETCF.NET dll,这是我所做的,但不是每次都有效,

我也不确定我应该使用哪种类型的连接等等。

好吧,你觉得这样好吗?

非常感谢你!

  private static HttpWebRequest ConnectWeb(string urlx)
  {

      try
      {
          HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(urlx));

          request.ContentType = @"application/octet-stream";
          request.Credentials = CredentialCache.DefaultCredentials;
          request.Timeout(6000);
          return request;
      }
      catch (Exception ex)
      {
          MessageBox.Show(Lang.CONNECTIONPROBLEM);
          return null;
      }
  }


    private bool downloadTest()
    {

        Stream stream;
        HttpWebResponse response;
        HttpWebRequest request = ConnectWeb(FileManager.url);
        if (request!=null)
        {
            try
            {

                using (response = (HttpWebResponse)request.GetResponse())
                {

                    using (stream = response.GetResponseStream())
                    {
                        byte[] data = ReadFully(stream, (int)response.ContentLength);
                        writeByteArrayToFile(data, "data.zip");                                           
                    }                  
                }

                response.Close();
                stream.Close();

            }
            catch (Exception ex)
            {
                MessageBox.Show(Lang.CONNECTIONPROBLEM);
                return false;
            }

}

4

1 回答 1

1

不要断开连接管理器。

只要您使用 Windows Mobile 连接管理器,网络堆栈的插件(Autobind Winsock 分层服务提供程序)就会开始自动将您的网络连接绑定到与所选目标对应的网络接口。基本上,它强制数据包以正确的方式传输。如果您请求断开连接,它可能根本不会发送它们。

相反,您应该在尝试连接到更新服务器之前调用 Connect,然后在完成后调用 RequestDisconnect。如果您希望它在后台工作,请使用异步连接并附加到 Connected 事件。

要遵循 IE 选择正确目的地(WiFi 或 GPRS)所做的事情,请使用 ConnectionManager.MapUrl 来确定目的地 GUID,并将其传递给 Connect。默认映射行为是:

  • 如果 URL 的服务器名称部分没有点,则它是工作地址
  • 如果服务器名称部分出现在例外列表中,则它是工作地址
  • 否则,它是一个 Internet 地址

然后它的作用取决于 ActiveSync/Windows Mobile 设备中心的设置方式、设备是否放置在底座上以及在“我的网卡连接到”下选择的内容,用于 WiFi(开始 > 设置 > 连接选项卡 > 网卡或 WiFi图标)。如果将其设置为“工作”并且映射为“互联网”,它将永远不会使用 WiFi。如果它设置为“Internet”,如果关联,它将使用 WiFi,如果没有关联,则回退到 GPRS。

我记得,.NET CF 的 HttpWebRequest 将自动使用连接管理器,遵循 IE 映射目标的行为,因此您可能根本不需要 OpenNETCF 类。

于 2010-07-13T10:22:05.013 回答