2010-08-10

WCF服务运行一段时间后客户端无法连接WCF服务的解决办法

Posted in .NET at 22:11 Author:仲远

标签:

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

本文可以自由转载,转载时请保留全文并注明出处:
转载自仲子说 [ http://www.wangzhongyuan.com/ ]
原文链接:

Leave a Comment

*
To prove you're a person (not a spam script), type the security text shown in the picture. Click here to regenerate some new text.
Click to hear an audio file of the anti-spam word