HttpWebRequest 在真实设备上抛出 ConnectFailure,但在 Windows 手持设备 6.5 的模拟器上不会

HttpWebRequest throws ConnectFailure on the real device but not on emulator for Windows Handheld 6.5

我遇到了与此类似的问题 link No Internet on the device via code

我正在研究 Intermec iRoc Ci70 设备,它是 运行 在 Windows Handheld Embedded 6.5 上。此设备具有 802.11abgn 无线 LAN 适配器。

在设备模拟器上 运行 Windows Mobile 6.5.3,HttpWebRequests 运行良好但不在设备上。我总是在设备上收到带有 ConnectFailure 状态代码的 WebException。

我尝试进一步调试 ConnMgr class 的本机代码,发现 ConnMgrMapURL 无法将 URL 映射到任何网络 Dest Guid,它总是 returns 00000000-0000-0000-0000-000000000000。进一步调试发现,出现ConnectFailure异常的错误是在mscoree.dll中的EstablishConnectionForURL方法中。不幸的是,由于设备的限制,我无法调试这个文件。

我还尝试了 OpenNETCF ConnectionManager class 来建立连接。状态已连接,但查看此 class 的代码,OpenNETCF 人员正在将 Internet Guid id 硬编码到方法中。但是 HttpWebRequest 仍然没有得到响应。

我也关闭了所有安全以及安装在设备上的SDK开发证书。

我还尝试让设备通过 ActiveSync 使用 DMA 连接到互联网并关闭 WiFi 作为另一个测试。

我还尝试针对 .NET-CF 版本 1、2、3.5 (3.5.9xxx) 和 3.5 (3.5.7xxx)

None 我试过的方法都有效。但是内置浏览器和 Intermec HTML5 浏览器(第 3 方应用程序)可以连接到互联网和本地地址。

很遗憾,我没有其他设备可以比较。请帮我解决这个问题。

如果 "None of the things I tried work. But the built-in browse and the Intermec HTML5 Browser (3rd party app) can connect to the internet and the local addresses." httpwebrequest 不会触发连接管理器连接到正确的网络类型。存在 'Work' 和 'Internet' 连接。您使用什么 URL 进行网络请求?它可能指向一个 'work' 类型的地址,一个使用非点分方案的地址。

尝试将设备上的连接设置为 'Work',同时将 'Work' 连接设置为也连接到 'Internet' 且没有代理。然后将 WiFi 适配器也设置为连接到 'work'(请参阅设置>连接>WiFi,"Network card connects to:=Work")。

在 ActiveSync 或 Windows 移动设备管理器中设置为允许 DMA 用于真实设备毫无意义。这仅适用于模拟器。但 WMDC 中的“允许数据连接”是必须的,否则硬件设备将在连接到 ActiveSync 时关闭 WiFi 连接。

感谢约瑟夫的帮助。我尝试了从设置连接和网卡到编辑注册表和使用 MS Network Analyzer 等工具的所有方法。

结果还是一样。事实证明,ConnMgr 的本地方法确实给了我线索和解决方案:-)。

正如我提到的,对于我测试过的任何一种 URL,ConnMgr.ConnMgrMapURL 总是 return 0000-0000000-00000。这个问题让我找到了 CM_Mappings 服务提供商和 Windows Mobile 提供的供应系统 Microsoft CM Mappings Definition

我按照这个 link Device Provisioning Tutorial 首先使用 RapidConfig 工具从设备查询当前 CM_Mappings 结果是......没有任何内容。模拟器有,我试图从模拟器中删除所有条目,结果是模拟器与带有消息 ConnectFailure 的设备相同。

所以我使用了在上面 link 中找到的默认值并将它们推回到设备和 VOILA!!!。它起作用了,所有类型的 URL 都被正确路由到 MetaNetworks 并且 HttpWebRequest 确实给出了响应代码 200。

那真是一场地狱般的冒险。我不知道为什么我的设备会删除这些映射,而且 MS 如何实现它们的错误处理非常令人沮丧。发生这些错误时未找到有用的信息。我花了将近一周的时间才缩小了根本原因。

希望对遇到同样问题的人有所帮助。