WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转)
2013-11-29 16:36
477 查看
WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转)
Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。简单的说,WCF能够提供Web应用(比如一个动态网页)调用一个后台应用程序若干API的需求;也可以提供一个程序访问另外一个程序API的需求。通过WCF,就能够将不同类型的程序联合起来,也更易于实现分布式处理。
在使用WCF的时候,我们遇到了如下的问题:WCF服务启动之后,Client端初始时能够访问这个WCF服务,正确调用其接口。但是没过多久,我们的WCF Client端(一个Web页面)就无法连上WCF的服务,出现了Timeout的错误,提示WCF服务无法连接上或WCF服务没有响应。
经过调试跟踪,最后发现网上有人也有遇到类似问题,产生原因为“We were creating instances of the Service Reference proxies to the WCF service but we never called Close() on the proxy. ”(我们在应用程序中创建了很多实例连接WCF服务,但是却从没有关闭这个连接)。由此可见,使用WCF服务,就如果使用数据库服务一样,打开连接后,要记得关闭噢(参见《使用JDBC后记得关闭并释放数据库连接资源噢:)》与《针对JDBC是否释放资源对内存的影响所做的实验》)。
解决方案:
1)首先保证客户端每次建立的连接在使用完成后进行关闭.即调用Close()方法,否则此连接会在设置的会话(一般为10分钟)后才自动关闭.期间任何客户端也无法使用此服务.
2)如果默认的连接数不能满足客户端的需要,可以增加连接数.配置文件如下:
<serviceThrottling maxConcurrentCalls="20" maxConcurrentSessions="20" maxConcurrentInstances="30" />
说明: maxConcurrentCalls :最大并发数,默认为16 maxConcurrentSessions :最大的会话数,主要针对于PerSession的情况,默认为10 maxConcurrentInstances:最大实例数,默认为26
解决WCF调用多次之后没有响应的问题
2008-10-27 23:34 618人阅读 评论(0) 收藏 举报我最近遇到了一个缠扰不清的问题与WCF。 在RC1突然优良运作的应用开始断断续续地无法在发行修造.NET 3.0。 最复杂的是错误未返回,没有提供什么的调试信息。 客户调用到服务器未曾返回,但垂悬了,并且服务器没有提供故障信息。好象消息进入死区,。
在与WCF团队一些咨询以后,它被确定改变对缺省serviceThrottling的行为在修造的祸根。 缺省是16 MaxConcurrentCalls和10 MaxConcurrentSessions, 如此, 客户调用时真实地进入死区,并且服务器没有能提供任何信息,因为它没有能甚而处理他们。 在这种情况下,客户产生多条线程(~10个代理人)并且发布多个异步请求(~15)从每个代理人。 您做这种估算,并且您能看发生什么。
确定的是做二件事。 首先, < behaviors > 更新app.config文件的部分如下:
<behaviors> <serviceBehaviors> <behavior name="NewBehavior"> <serviceThrottling maxConcurrentCalls="50" maxConcurrentSessions="50" /> </behavior> </serviceBehaviors> </behaviors>
解决方案二
最近发现,导致超过会话默认值原因是:
WcfVDSelect.VDClsServiceClient MyService = new VDItemSelect.WcfVDSelect.VDClsServiceClient(); 其中WcfVDSelect是你在客户端添加服务引用时的名称,VDClsServiceClien是服务的类..GetString是类里的方法.. 多次调用出错原程序: private void btnOk_Click(object sender, EventArgs e) { WcfVDSelect.VDClsServiceClient MyService = new VDItemSelect.WcfVDSelect.VDClsServiceClient(); MyService.GetString("aaa");
} 当我们每次调用WCF服务时,都创建一个实例,这时WCF就没创建一个会话..当你点击十次按钮时,就会出错超时..原因超过会话的默认值....
其实我们可以用一个静态变量先放在内存里不释放,如 private staticWcfVDSelect.VDClsServiceClient MyService = new VDItemSelect.WcfVDSelect.VDClsServiceClient();
private void btnOk_Click(object sender, EventArgs e) { MyService.GetString("aaa");
} 无论你点多少次,都不会出错的了..这样可能WCF就认为是一个会话....
第一种解决方案与第二种都可以解决,不过第一种的话,我们不知道要设置多大的会话,为了减少会话,第二种会更好些
相关文章推荐
- 运行教学平台的主机在不用一段时间后,再次连接服务器,报告无法连接的解决办法
- Windows无法连接到System Event Notification服务的解决办法
- 利用svcutil.exe 访问windows Server 2003的wcf服务生成客户端代码报错:无法从http://XXX/XXX.svc?wsdl获取元数据”错误的解决方法
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。解决办法:
- Windows Server 2003 使用vSphere5.5连接ESXI5.5 “客户端无法向服务器发送完整的请求” 的解决办法
- 用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解决办法
- ssh客户端无法连接Ubuntu15.04的解决办法
- 关于客户端无法获得服务器端GP服务(Geoprocessing Service)结果的解决办法
- Java长期运行后, jps等工具无法连接jvm解决办法
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 解决办法
- 错误711:操作无法完成,因为它无法及时启动远程访问连接管理服务 宽带连接提示错误711的解决办法
- 无法连接到local及运行错误"91"解决办法
- WCF客户端无法访问服务原因之二:连接数问题
- WCF服务寄宿IIS时.SVC文件无法浏览的解决办法
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务--解决办法(转)
- WCF 客户端与服务器时间不同步无法连接的解决方法
- 利用svcutil.exe 访问windows Server 2003的wcf服务生成客户端代码报错:无法从http://XXX/XXX.svc?wsdl获取元数据”错误的解决方法
- "Windows Update 时提示当前无法检查更新,因为未运行服务"解决办法
- oracle 数据库 错误 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 解决办法
- win7 提示"Windows 无法连接到System Event Notification Service服务......"的解决办法