我有一个 WCF Web 服务,充当我的 ASP.NET 网页的数据提供程序。
在整个网页中,通过自动生成的 ServiceClient 对 Web 服务进行了多次调用。
目前,我创建一个新的 ServiceClient 并为每个请求打开它,即获取用户、获取角色、获取客户列表等......其中每一个都会创建一个新的 ServiceClient 并打开一个新连接。
我可以将 ServiceClient 类设为全局或静态可用类,以便 ASP.NET 网页中的所有函数都可以使用同一客户端吗?这似乎效率更高。这样做有什么问题吗?这样做时我应该考虑什么建议?
如果我向客户提出多个请求会怎样?据推测,它都是同步的,所以我对它进行 1 次或 50 次调用应该不重要吗?
Thanks
当使用面向会话(具有安全上下文的 wsHttp 或可靠会话)或面向连接(net.tcp、net.pipe)的绑定时,您必须按照您想要处理会话的方式来处理代理。因此,如果您共享代理,所有调用都将在单个 WCF 会话中处理(默认情况下由单个服务实例处理)。但是您必须处理额外的复杂性,例如:未处理的服务异常将终止您的通道,并且来自客户端的后续调用将导致异常。
当使用无会话 HTTP 绑定(basicHttp、webHttp)时,您可以共享您的代理,甚至使其静态。每个调用都是单独处理的,服务异常不会导致通道故障,并且它是透明的重用打开的 HTTP 持久连接。但正因为如此,创建新的代理/通道应该不会有太大的开销。
所以我的建议是:当您需要在 ASP.NET 应用程序中的单个请求处理中多次调用服务时,请使用相同的代理/通道。但不要在不同的请求之间共享代理/通道。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)