SoapHttpClientProtocol抛出ConnectFailure,尽管它已经在wm6.5和.net CF 3



这是一个棘手的问题。

这是一个运行。net Compact Framework 3.5.9085.00的Windows Mobile 6.5设备,通过一个自动生成的SOAP代理,一个System.Net.SoapHttpClientProtocol (c#)的子类,来实现一个简单的自动生成的web服务调用

doInvoke()的调用几乎立即抛出system.net.webeexception,因为没有连接到网络。正常情况下,这将表明某种web代理或连接错误,然而,当我在web服务地址上放置一个简单的日志服务器时,我可以清楚地看到收到的POST,因此它可以清楚地连接到网络。

相同的代码在相同型号的另一个设备上运行完全正常。当我使用简单的日志服务器,我可以看到一个相同的POST到其他设备,但这一个最终抛出system.net.webeexception:操作已经超时而不是(它会,因为它不会得到一个响应)。

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

就好像第一个设备与服务器建立了一个只写连接,当它试图读取响应时发生了故障,但我以前从未听说过这种情况。

有人能解释一下这个吗?

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网络适配器被设置为"工作"而不是"互联网"。

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

HKLMControlPanelWiFiEthernet
包含值

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

(这是互联网的GUID)。

如果这个注册表项不存在,'Work'似乎是默认值。

一旦设置了这个值,连接就可以正常工作。

为什么连接可以在'Work'模式下发送但不能接收(而不是,说,两者都不做)仍然是一个谜,但这就是它是如何解决的。

相关内容

  • 没有找到相关文章

最新更新