我有一个WCF Web服务,它充当我的ASP.NET网页的数据提供者.
在整个网页中,通过自动生成的ServiceClient对Web服务进行了多次调用.
目前,我创建了一个新的ServiceClient并为每个请求打开它,即获取用户,获取角色,获取客户列表等....这些中的每一个都将创建一个新的ServiceClient并打开一个新连接.
我可以将ServiceClient类设置为全局或静态可用类,以便ASP.NET网页中的所有函数都可以使用同一客户端.这似乎更有效率.这样做有什么问题吗?这样做时我应该考虑什么建议?
如果我向客户提出多个请求会怎样?据推测它是全部同步的,所以如果我拨打1或50个电话应该没关系?
谢谢
当使用会话(带安全上下文或可靠会话的wsHttp)或连接(net.tcp,net.pipe)定向绑定时,您必须以您希望处理会话的方式处理代理.因此,如果您共享代理,则所有调用都将在单个WCF会话中处理(默认情况下由单个服务实例处理).但是您必须处理额外的复杂性,例如:未处理的服务异常将终止您的频道,并且来自客户端的调用将导致异常.
使用无会话HTTP绑定(basicHttp,webHttp)时,您可以共享代理甚至使其成为静态代理.每个调用都是单独处理的,服务上的异常不会使通道出错,它会透明地重用打开的HTTP持久连接.但正因为如此,创建新的代理/渠道应该没有大的开销.
所以我的建议是:当您在ASP.NET应用程序中的单个请求处理中需要多次调用服务时,请使用相同的代理/通道.但是不要在不同的请求之间共享代理/通道.
| 归档时间: |
|
| 查看次数: |
6625 次 |
| 最近记录: |