问题描述
项目马上就要验收了,遇到点困难,望知道的朋友能够相助。具体情况是这样的,客户的内部网络是局域网,有192,172两个网段(两个网段可以互相ping通),具体如何映射的我也不知道。当我把WCF服务和客户端分别部署在这两个不同网段时(例如:WCF服务器网段是192,客户端是172),发现客户端无法调用WCF服务,但是通过IE可以访问服务(例如:http://192.168.168.18/BDService.svc),同时通过VS2010可以正常更新服务。由于采用一个一级服务器,几个二级服务器,二级服务器也要调用一级服务器的WCF服务,求大家能够帮助解决这一问题。WCF服务配置文件:<?xmlversion="1.0"encoding="utf-8"?><configuration><system.web><compilationdebug="true"targetFramework="4.0"/></system.web><system.serviceModel><client><endpointaddress="http://192.168.168.18/BDService.svc/BDService"binding="wsDualHttpBinding"bindingConfiguration="WSDualHttpBinding_IService"contract="MainBDService.IService"name="WSDualHttpBinding_IService"/></client><bindings><wsDualHttpBinding><bindingname="NoneSecurity"maxBufferPoolSize="1200000"maxReceivedMessageSize="1200000"useDefaultWebProxy="false"><readerQuotasmaxStringContentLength="1200000"maxArrayLength="1200000"/><securitymode="None"/></binding><bindingname="WSDualHttpBinding_IService"closeTimeout="00:00:20"openTimeout="00:00:20"receiveTimeout="00:10:00"sendTimeout="00:00:10"bypassProxyOnLocal="false"transactionFlow="false"hostNameComparisonMode="StrongWildcard"maxBufferPoolSize="524288"maxReceivedMessageSize="65536"messageEncoding="Text"textEncoding="utf-8"useDefaultWebProxy="true"><readerQuotasmaxDepth="32"maxStringContentLength="8192"maxArrayLength="16384"maxBytesPerRead="4096"maxNameTableCharCount="16384"/><reliableSessionordered="true"inactivityTimeout="00:10:00"/><securitymode="None"><messageclientCredentialType="Windows"negotiateServiceCredential="true"/></security></binding></wsDualHttpBinding></bindings><services><servicename="BDServer.BDService"><endpointbindingConfiguration="NoneSecurity"address="BDService"binding="wsDualHttpBinding"contract="BDServer.IService"/></service></services><behaviors><serviceBehaviors><behavior><!--为避免泄漏元数据信息,请在部署前将以下值设置为false并删除上面的元数据终结点--><serviceMetadatahttpGetEnabled="true"/><!--要接收故障异常详细信息以进行调试,请将以下值设置为true。在部署前设置为false以避免泄漏异常信息--><serviceDebugincludeExceptionDetailInFaults="true"/></behavior></serviceBehaviors></behaviors><serviceHostingEnvironmentmultipleSiteBindingsEnabled="true"/></system.serviceModel><system.webServer><modulesrunAllManagedModulesForAllRequests="true"/><directoryBrowseenabled="true"/></system.webServer><connectionStrings><addname="ConStr"connectionString="DataSource=orcl;PersistSecurityInfo=true;UserId=sa;Password=sa"/></connectionStrings></configuration>
客户端配置文件:<?xmlversion="1.0"encoding="utf-8"?><configuration><system.serviceModel><bindings><wsDualHttpBinding><bindingname="WSDualHttpBinding_IService"closeTimeout="00:00:10"openTimeout="00:00:10"receiveTimeout="00:00:10"sendTimeout="00:00:10"bypassProxyOnLocal="false"transactionFlow="false"hostNameComparisonMode="StrongWildcard"maxBufferPoolSize="524288"maxReceivedMessageSize="65536"messageEncoding="Text"textEncoding="utf-8"useDefaultWebProxy="true"><readerQuotasmaxDepth="32"maxStringContentLength="8192"maxArrayLength="16384"maxBytesPerRead="4096"maxNameTableCharCount="16384"/><reliableSessionordered="true"inactivityTimeout="00:10:00"/><securitymode="None"><messageclientCredentialType="Windows"negotiateServiceCredential="true"/></security></binding></wsDualHttpBinding></bindings><client><endpointaddress="http://172.27.138.24/BDService.svc/BDService"binding="wsDualHttpBinding"bindingConfiguration="WSDualHttpBinding_IService"contract="SurService.IService"name="WSDualHttpBinding_IService"/></client></system.serviceModel></configuration>
解决方案
解决方案二:
先看看你程序中写vardata=newWebClient().Download("http://192.168.168.18/BDService.svc");varresult=Encoding.UTF8.GetString(data);
能不能保证联通。如果不能,那就是肯定是的网管需要检查的事情。如果能联通,那么查看你初始化wcf客户端代理对象时的参数(应该是用三个参数形式,而不是一个)得值是否正确,或者继续向后调试两三行。
解决方案三:
引用1楼sp1234的回复:
先看看你程序中写vardata=newWebClient().Download("http://192.168.168.18/BDService.svc");varresult=Encoding.UTF8.GetString(data);能不能保证联通。如果不能,那就是肯定是的网管需要检查的事情。如果能联通,那么查看你初始化wcf客户端代理对象时的参数(应该是用三个参数形式,而不是一个)得值是否正确,或者继续向后调试两三行。
谢谢你的回复,我试试看吧!
解决方案四:
<endpointaddress="http://172.27.138.24/BDService.svc/BDService"客户端配置错了吧,应该是服务端的地址
解决方案五:
解决方案六:
引用3楼feiyun0112的回复:
<endpointaddress="http://172.27.138.24/BDService.svc/BDService"客户端配置错了吧,应该是服务端的地址
服务端那个配置中的终结点是一级服务器的地址,我给的配置的例子是二级服务器WFC服务的配置,这个我可以保证没有错。
解决方案七:
但是通过IE可以访问服务(例如:http://192.168.168.18/BDService.svc),既然ie可以,你可以把wcf服务绑定http协议webHttpBinding
解决方案八:
我遇到过类试问题,是交换机的规则设置不允许使用内网地址访问,即时网络是通的,也会被交换机发送reset指令断开.这个需要使用公网地址来操作,或使用类似的虚拟服务器设置.