【问题标题】:WCF client side instancing and concurrency issuesWCF 客户端实例化和并发问题
【发布时间】:2011-02-25 22:02:06
【问题描述】:

希望WCF 可以通过Throttling 在服务端进行范围实例化和并发管理。

我的服务客户端是一个ASP.NET 应用程序。它消耗多个WCF 服务,因此我在运行时创建并参数化WCF 客户端(不使用配置文件)。

只有端点地址是动态的,所有服务(客户端使用)具有相同的方法签名(相同的合约)。

出于这个原因,我通过Visual Studio 引用了该服务,它创建了我的服务代理,所以我只在运行时处理端点地址:

class MyWcfClient
{
   void DoSomething(string endpintAddress, int data)
   {
      // Create 'binding' and 'endpoint' ('endpoint' address is dynamic)
      ServiceReference.ServiceClient serviceClient = new ServiceReference.ServiceClient(binding, endpoint);
      // Parametrize 'serviceClient'
      // Call WCF method (send 'data' to appropriate endpoint)
      serviceClient.CLose();
   }
}

由于客户端是一个asp.net应用程序,每个请求都运行在自己的工作线程上(WCF方法调用非常轻快,所以线程不会长时间阻塞)。

我的问题是关于客户端的实例化和并发。

MyWcfClient 类应该是 Singleton 和一个 serviceClient 实例,还是应该是 static 类和一个新的 serviceClient 为每个调用创建?

我应该根据端点(有 10-100 个端点)创建serviceClient(即数组或列表)吗?

请注意,我的 asp.net 线程不应长时间阻塞(即在队列中等待通过WCF 发送其相关的data

【问题讨论】:

    标签: wcf concurrency client-side


    【解决方案1】:

    客户端没有限制,也不需要限制,因为您可以控制客户端代码,因此您可以控制执行的请求数量。这就是服务的不同之处,在没有节流的情况下,无法控制在其他地方执行的传入请求的数量(不受服务控制)。

    因此,如果您想控制在客户端上同时执行的请求数量,您必须创建对象池 - 只有有限数量的 MyWcfClient 类可用,并且每个类将始终创建新的 ServiceClient。请求将在队列中等待免费的 MyWcfClient 实例。

    如果您唯一的问题是如何创建 ServiceClient 实例,那么答案取决于绑定类型。

    • 具有可靠会话或安全上下文的 Net.Tcp、Net.Pipe 或 WsHttp 等会话绑定:为每个通信关系创建新实例。如果您的关系只是单个呼叫,请为每个呼叫创建新实例。因此,您可以将静态类与静态方法一起使用,并在该方法中创建新实例。
    • BasicHttp 或 WebHttp 等无会话绑定:您可以重复使用客户端进行多次调用,但不能在后续调用之间关闭客户端。您可以使用一系列准备好的客户端实例。您仍然需要在此处处理一些错误。

    顺便说一句。还要检查asynchronous client calls 以及如何correctly close 服务客户端。

    【讨论】:

    • WCF 支持某种缓存(MRU 缓存),我在问这个问题时并不知道。不过,我不确定如何在我的场景中使用它,因为有几篇关于它的文章。
    • @Xaqron:如果您在代码中提供绑定,则不能使用 MRU 缓存。仅当您提供端点配置的名称时,MRU 缓存才有效。 MRU 依赖于端点配置、远程地址(可以将另一个地址传递给代理构造函数)和回调接口(仅适用于双工服务)。
    • 你说得对,在阅读了一些文章后,我决定将绑定移动到配置文件并使用 MRU 缓存。我不需要会话,但仍然需要Message 安全性。
    • 第二个链接为 404
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2010-11-19
    • 1970-01-01
    相关资源
    最近更新 更多