每个ASP.NET请求的WCF客户端?

时间:2014-04-24 11:50:22

标签: asp.net wcf

我有WCF服务,由ASP.NET Web应用程序调用。当每个页面请求有多个调用时,最好是保持客户端打开并在整个请求中共享实例,还是最好为每个服务调用创建和配置客户端,如下所示?

using (var client = new WcfClient())
{
    var result = client.Method();
}

1 个答案:

答案 0 :(得分:3)

如果您正在使用webHttpbinding,wshttpbinding或basicHttpbinding,则默认行为是每个客户端请求(调用)获取其自己的唯一连接和Web服务对象的实例。这意味着当客户端A和B向您的Web服务发送请求时,每个客户端都将获得它自己的服务实例,由托管程序实例化,然后在响应被发送回客户端时整齐地(希望)处理掉。 WCF .NET基础结构和托管程序会为您完成所有连接和对象的创建和销毁,除非您劫持该过程并做一些奇特的事情。

可以创建持久的客户端会话,使连接保持打开状态,服务在内存中,但我从未尝试过。以下是有关如何执行此操作的说明的链接: WCF sessions with a wsHttpBinding and without windows security

在过去两年中,我在工业规模上完全使用WCF客户端和主机软件,并且没有太多理由担心在WCF Web服务上持续打开和关闭连接的效率。我已经使用数百个并发客户端连接对我们的测试服务进行了基准测试,每个客户端连接上传和下载文件,并且它几乎不会强调WCF服务器的CPU。在我们的测试中,大部分压力(像往常一样)落在数据库方面。