尽管已使用 .NET CF 3.5 在 WM 6.5 上成功发送消息,SoapHttpClientProtocol 仍会抛出 ConnectFailure

SoapHttpClientProtocol throws ConnectFailure despite having successfully sent message on WM 6.5 with .NET CF 3.5

这是一个棘手的问题。

这是一个 Windows Mobile 6.5 设备 运行 .net Compact Framework 3.5.9085.00,通过自动生成的 SOAP 代理进行简单的自动生成的 Web 服务调用,System.Net.SoapHttpClientProtocol (C#)

调用 doInvoke() 几乎立即抛出 System.Net.WebException 未连接到网络。通常这表示某种网络代理或连接错误,但是当我在网络服务地址上放置一个简单的日志服务器时,我可以看到接收到的 POST 响亮而清晰,因此它显然可以连接到网络。

相同的代码在同一型号的另一台设备上绝对可以正常工作。当我使用简单的日志服务器时,我可以看到与另一台设备相同的 POST,但是这台设备最终会抛出 System.Net.WebException:操作已超时(它会这样,因为它不是'不会得到回应)。

我很困惑。毫无疑问,导致问题的两者之间存在一些配置差异,但我不知道是什么。

好像第一台设备已经建立了一个只写连接到服务器,当它试图读取响应时它失败了,但我以前从未听说过这种情况。

有人对这个有任何看法吗?

System.Net.WebException: Could not establish connection to network.
       at System.Net.HttpWebRequest.finishGetResponse()
       at System.Net.HttpWebRequest.GetResponse()
       at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
       at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
       at System.Web.Services.Protocols.SoapHttpClientProtocol.doInvoke(String methodName, Object[] parameters, WebClientAsyncResult asyncResult)
       ...

    Exception Status: ConnectFailure
    Exception Message: Could not establish connection to network.
    No Inner exception. 

原来这种奇怪的行为是由于设备的 WiFi 网络适配器设置为 'Work' 而不是 'The Internet'。

这可以通过控制面板设置,或者通过添加注册表项

HKLM\ControlPanel\WiFi\Ethernet

含值

"DestId"="{436EF144-B4FB-4863-A041-8F905A62C572}"

(这是 Internet 的 GUID)。

如果此注册表项不存在,

'Work' 似乎是默认值。

一旦设置了这个值,连接就正常了。

为什么在 'Work' 模式下连接可以发送但不能接收(而不是什么都不做)仍然是个谜,但这就是解决方法。