WCF服务中的并发能力可以通过一些手段进行提高,来帮助开发人员进行更好的使用。在这里我们将会针对各种提高办法做一个详细介绍,以方便大家对此的理解,希望你能从中获得一些帮助。#t#
WCF并发能力提高步骤:
1.把同样的WCF服务,在多个端口上"启动"(即同时运行多个wcf的实例,但每个实例都监听不同的端口)
2.用svcutil.exe生成的代理类,里面有N多构造函数的重载版本,观察一下类似下面的这个版本
- public AstroServiceClient(string endpointConfigurationName) :
- base(endpointConfigurationName)
- {
- }
即传入配置名生与代码类的实例,我们在web.config中的wcf配置节,做如下处理:
- < client>
- < endpoint address="http://localhost:8001/Astro/"
binding="wsHttpBinding"- bindingConfiguration="WSHttpBinding_IAstroService"
contract="IAstroService"- name="1">
- < identity>
- < dns value="localhost" />
- < /identity>
- < /endpoint>
- < endpoint address="http://localhost:8002/Astro/"
binding="wsHttpBinding"- bindingConfiguration="WSHttpBinding_IAstroService"
contract="IAstroService"- name="2">
- < identity>
- < dns value="localhost" />
- < /identity>
- < /endpoint>
- < endpoint address="http://localhost:8003/Astro/"
binding="wsHttpBinding"- bindingConfiguration="WSHttpBinding_IAstroService"
contract="IAstroService"- name="3">
- < identity>
- < dns value="localhost" />
- < /identity>
- < /endpoint>
- < /client>
即对应多个wcf服务端的实例,配置多个name的endpoint节点
3.修改客户端的调用代码提高WCF并发能力
把原来类似这样的代码:
- using (AstroServiceClient _client = new AstroServiceClient())
改成
- using (AstroServiceClient _client =
new AstroServiceClient(new Random().Next(1, 4).ToString()))
即客户端随机从多个wcf服务端的host中挑一个,生成代码类实例
大功告成,说白了就是把一个wcf的host分身成了3个,并且客户端随机调用3者之一。以上就是WCF并发能力的相关提高方法介绍。