我在Visual Studio 2008中有一个Windows CE项目。对Windows Server 2003上的IIS 6.0中托管的服务有多个Web引用。当我调试应用程序或在部署后运行时,我无法使用Web服务由于以下WebException:
消息:“无法建立与网络的连接。”
回复:没什么
状态:System.Net.WebExceptionStatus.ConnectFailure
StackTrace:“at System.Net.HttpWebRequest.finishGetResponse()at
System.Net.HttpWebRequest.GetResponse()at
System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest的
请求)
System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest的
请求)
System.Web.Services.Protocols.SoapHttpClientProtocol.doInvoke(字符串
methodName,Object []参数,WebClientAsyncResult asyncResult)
在System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String
methodName,Object [] parameters)at
WMS4.Tests.TestService.GetData()...
我已经创建了一个测试服务来测试行为。该服务只返回字符串“Success”。以下是来自WCF服务库的app.config的服务模式部分,其中包含测试服务。其他服务已被省略:
<system.serviceModel>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://*myserver*"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<services>
<service name="WMSDataService.TestService">
<endpoint address="" binding="basicHttpBinding" contract="WMSDataService.ITestService"></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="basicConfig">
<security mode="None">
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="basicBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
由于这是一个Windows CE项目,因此没有客户端app.config文件。
现在,有些生产设备正在使用相同的服务而没有例外。我也可以从测试控制台客户端使用该服务。似乎只有我正在测试的新移动设备受此影响。
我觉得这是代理身份验证问题,但我没有看到参考文件中代理有任何问题。那么,我该怎么做才能消除这种异常并使用该服务呢?
答案 0 :(得分:2)
为后代:
我无法找出为什么只有新设备无法使用这些服务(请参阅上面的错误详情)。来自控制台和现有生产设备的测试都没有任何问题地使用服务。
要解决此问题,我为每个端点设置了一个绝对地址,而不是相对地址,如下所示:
<system.serviceModel>
<services>
<service name="WMSDataService.TestService">
<endpoint address="http://*MyServerURL*/WMSDataService.TestService.svc" binding="basicHttpBinding" contract="WMSDataService.ITestService" />
</service>
</services>
</system.serviceModel>