WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转)
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。 在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就认为是一个会话....
第一种解决方案与第二种都可以解决,不过第一种的话,我们不知道要设置多大的会话,为了减少会话,第二种会更好些
WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转)的更多相关文章
- Pycharm 在Windows下出现闪退问题(即是在运行一段时间后,自己就退出崩掉了)的解决方法
Pycharm 在Windows下出现闪退问题(即是在运行一段时间后,自己就退出崩掉了)的解决方法 最近自己下载了最新版本的Pycharm,运行程序过程中发现,在运行一段时间后(比如10几分钟),Py ...
- 【生产环境】Tomcat运行一段时间后访问变慢分析历程
环境运行一天或者几天,网站访问就很卡,手机端app访问页面出现白屏.Tomcat运行一段时间后访问变慢,但是cpu,内存都正常.日志也是发现不了啥.... 问题的原先分析 1.环境配置(cpu,内存, ...
- 网站运行一段时间后就无法访问,重启Tomcat才能恢复
网站运行一段时间后就无法访问,重启Tomcat才能恢复出现这种情况,很可能是以下几种情况:1.超过数据库连接池上限2.并发数达到上限3.内存溢出具体还是需要通过打印的日志进行具体分析.解决方法1.如果 ...
- Spring Boot定时任务运行一段时间后自动关闭的解决办法
用Spring Boot默认支持的 Scheduler来运行定时任务,有时在服务器运行一段时间后会自动关闭.原因:Schedule默认是单线程运行定时任务的,即使是多个不同的定时任务,默认也是单线程运 ...
- IIS服务器运行一段时间后卡死,且无法打开网站(IIS管理无响应,必须重启电脑)
问题描述: 公司希望使用IIS配合网站显示一些订单跟进的情况并展示出来,所以我们在一台演示的Win7 Pro电脑上安装了IIS,但使用了一段时间后发现每过几天页面就无法正常访问了,而且打开IIS管理器 ...
- 【解决】网站运行一段时间后就无法访问,重启Tomcat才能恢复
[背景]重新部署了网站,运行环境是Linux(centOS6.5)+Tomcat7+mysql5,作了相关安全配置和系统优化工作: [问题]运行几天后,出现了网站无法访问的现象,具体是进入网站首页时页 ...
- windows服务器下,mysql运行一段时间之后忽然无法连接,但是mysql服务启动正常
出现这种情况以前都是重启服务器可以解决,但是治标不治本,一段时间之后仍然会出现此问题. 此问题不是mysql应用程序的问题而是windows server system 的配置问题.因此需要修改win ...
- 一个部署了tomcat服务的linux服务器,运行一段时间后出现内存和空间不足的问题
—— 前段时间项目上的事比较忙,期间笔记都是临时存在本地txt,这些天有点时间了,整理出来,以便日后查看: linux 查看内存使用情况:free -m 释放缓存: /proc/sys/vm/drop ...
- mysql event_scheduler运行一段时间后 自动关闭
应该是你重启过电脑或重启过服务了. SELECT * FROM mysql.event;SET GLOBAL event_scheduler = 1; -- 开启定时器 0:off 1:on SHO ...
随机推荐
- 关于html5 -- plus Webview模块管理应用窗口界面
Webview模块管理应用窗口界面,通过plus.webview可获取应用界面管理对象. 方法: all:获取所有的webview窗口 close:关闭webview窗口 create:创建新的web ...
- [总结]Android系统体系结构
Android 从图中可以看出Android主要的组成部分,其中底层是Linux的内核,包括的主要就是文件.内存.系统资源等的管理,Google在这部分的工作主要就是电源管理和一部分驱动,并且整合上层 ...
- 转发 PHP 资料(一)
WebShell隐藏思路.webshell磁盘读写动态检测.webshell沙箱动态检测(2) 作为WebShell检测.CMS修复.WebShell攻防研究学习的第二篇文章 本文旨在研究Webs ...
- php,javscript调用百地图度API实现标记
最近一个项目需要用到地图的定位和标记功能,本来考虑使用google map API .但是在国内这个速度确实很慢,有时候加载到一半就出现错了,不过可以通过google agent 来解决在国内的访问速 ...
- 运用百度开放平台接口根据ip地址获取位置
使用百度开放平台接口根据ip地址获取位置 今天无意间发现在百度开放平台接口,就把一段代码拿了下来,有需要的可以试试看:http://opendata.baidu.com/api.php?query=5 ...
- Nagios脚本编写事例
目标:编写一个简单的nagios脚本,实现监控client上的nginx进程是否启动,假如没启动的话发出报警. 首先在master上对nagios的配置文件进行设置,修改services.cfg文件, ...
- 【转】perl 变量 $/ 的用法解析 上下文为行模式时,$/ 定义以什么来区分行
默认状态下,很显然都是用\n来区分行,\n也被我们称作为换行符. 当读取序列时,按行来读取时,就是以换行符为标准. 读取的strawberry1.gb的文件内容如下: LOCUS JX118024 4 ...
- 1.JSP 简介及工作原理
1.JSP 简介 JSP(Java Server Pages)是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动态网页技术标准.JSP技术有点类似ASP技术,它是在传统的网页H ...
- mac 下 sphinx + mysql + php 实现全文搜索(xampp)(4)php api 解析
1:function GetLastError() // 假如报错的话,会输出报错信息 2:function GetLastWarning ()// 输出 警告信息 3:function SetSe ...
- python学习笔记12(函数三): 参数类型、递归、lambda函数
一.函数参数的类型 之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求.而在Python中还有一种是通过参 ...