[WCF服务跨网段调用]紧急求助:WCF服务跨网段,客户端不能调用

问题描述

项目马上就要验收了,遇到点困难,望知道的朋友能够相助。具体情况是这样的,客户的内部网络是局域网,有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指令断开.这个需要使用公网地址来操作,或使用类似的虚拟服务器设置.

时间: 2025-01-20 21:26:49

[WCF服务跨网段调用]紧急求助:WCF服务跨网段,客户端不能调用的相关文章

WCF定义download出错,紧急求助

问题描述 我们项目中定义了一个wcf接口(Hostonwindowsservcies),调用很频繁,最近最近经常间歇性的出现wsdl定义下载出错的情况,但又能自行恢复.网上看了一下,有的是说是windowstemp权限不够造成的,改了以后还是出问题. 解决方案 解决方案二:没有遇到过...是不是网络不太稳定引起的?

紧急求助:WCF服务跨网段,客户端不能调用

问题描述 项目马上就要验收了,遇到点困难,望知道的朋友能够相助.具体情况是这样的,客户的内部网络是局域网,有192,172两个网段(两个网段可以互相ping通),具体如何映射的我也不知道.当我把WCF服务和客户端分别部署在这两个不同网段时(例如:WCF服务器网段是192,客户端是172),发现客户端无法调用WCF服务,但是通过IE可以访问服务(例如:http://192.168.168.18/BDService.svc),同时通过VS2010可以正常更新服务.由于采用一个一级服务器,几个二级服务

WCF技术剖析之二十九:换种不同的方式调用WCF服务

我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码和配置:通过ChannelFactory<TChannel>创建服务代理对象.在这篇文章中,我们采用一种独特的方式进行服务的调用.从本质上讲,我们只要能够创建于服务端相匹配的终结点,就能够实现正常的服务调用.在WCF客户端元数据架构体系中,利用MetadataExchangeClient可以获取服务的元数据,而利用MetadataImporter将获取的元数据导入成Serv

异步调用Restful的WCF服务

上周在pedramr blog上看到有人问是否能够异步调用Restful的WCF服务,下面便是具体实现异步调用Restful的WCF实现细节.通过本文的学习,有助于如下知识的掌握: 如何设定WCF的Restful支持 如何异步调用Restful的WCF服务 第一步:创建一个解决方案:AsyCallRestfulWcf,该解决方案包含下面四个项目: 项目名称 备注 AsyCallRestfulWcf.Contracts WCF服务的契约项目,包含服务契约和数据契约的定义 AsyCallRestfu

WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码和配置:通过ChannelFactory<TChannel>创建服务代理对象.在这篇文章中,我们采用一种独特的方式进行服务的调用.从本质上讲,我们只要能够创建于服务端相匹配的终结点,就能够实现正常的服务调用.在WCF客户端元数据架构体系中,利用MetadataExchangeClient可以获取服务的元数据,而利用MetadataImporter将获取的元数据导入成Serv

我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承

当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解.其中很大一部分人甚至认为面向服务将是面向对象的终结,现在的面向对象将会被面向服务完全代替.在开始本Blog之前,我先来谈谈我对SOA和OO的区别,首先申明,这只是一家之言,欢迎大家批评指正,并且关于SO的谈论不是本Blog的主题,只是主题的引子,在这里只是简单讨论而已 . OO和SO之间具有共同的部分,在运用的领域上存在交集,只有在基于他们交集层面上谈论谁是谁非才有意义,下面是我对SO和

Silverlight+WCF 实战-网络象棋最终篇之对战视频-下篇[客户端发送与服务端中转](六)

本篇继上一篇:Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)    一:对战视频 简单原理 略,内容见上篇.   二:对战视频 步骤解析: 略,内容见上篇.   三:对战视频 具体实施 1:如何打开视频 略,内容见上篇.   2:Silverlight如何使用Socket进行通讯 2.1:与远程建立链接: 2.2:注册编号[这里的规则是"房间号+棋手颜色值"] 2.3:开新线程,等待接收对方视频 2.4:将视频显示出来,

WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现]

(提供模拟程序) 基于HTTP-GET的元数据发布方式与基于WS-MEX原理类似,但是ServiceMetadataBehavior需要做的更多额外的工作.原因很简单,由于在WS-MEX模式下,我们为寄宿的服务添加了相应的MEX终结点,那么当服务被成功寄宿后,WCF已经为元数据的消息交换建立了如图1所示的分发体系,我们需要做的仅仅是对MEX终结点的DispatchRuntime进行相应的定制而已. 图1 WCF服务端分发体系 但是如果采用HTTP-GET模式,实际上我们需要从ChannelDis

WCF技术剖析之二十七: 如何将一个服务发布成WSDL

[基于WS-MEX的实现](提供模拟程序) 通过<如何将一个服务发布成WSDL[编程篇]>的介绍我们知道了如何可以通过编程或者配置的方式将ServiceMetadataBehavior这样一个服务形式应用到相应的服务上面,从而实现基于HTTP-GET或者WS-MEX的元数据发布机制.那么在WCF内部具体的实现原理又是怎样的呢?相信很多人对此都心存好奇,本篇文章的内容将围绕着这个主题展开. 一. 从WCF分发体系谈起 如果读者想对WCF内部的元数据发布机制的实现原理有一个全面而深入的了解,必须对