我有一个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;
}
}
答案 0 :(得分:1)
请勿断开连接管理器。
只要您使用Windows Mobile Connection Manager,网络堆栈(Autobind Winsock分层服务提供商)的插件就会开始自动将您的网络连接绑定到与所选目标对应的网络接口。基本上,它会强制数据包以正确的方式运行。如果您请求断开连接,则可能根本不发送它们。
相反,您应该在尝试连接到更新服务器之前调用Connect,然后在完成后再调用RequestDisconnect。如果您希望它在后台运行,请使用异步连接并附加到Connected事件。
要按照IE所做的选择正确的目的地 - WiFi或GPRS - 使用ConnectionManager.MapUrl确定目标GUID,并将其传递给Connect。默认映射行为是:
它的作用取决于如何设置ActiveSync / Windows Mobile设备中心,设备是否已安装,以及“我的网卡连接到”下选择的内容,用于WiFi(开始>设置>连接选项卡) >网卡或WiFi图标)。如果将其设置为“工作”并且映射为“互联网”,则永远不会使用WiFi。如果它被设置为“互联网”,它将使用WiFi,如果相关联,并返回GPRS,如果没有。
我记得,.NET CF的HttpWebRequest将根据IE映射目的地的行为自动使用Connection Manager,因此您可能根本不需要OpenNETCF类。