希望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
?
我应该根据端点创建serviceClient
(即数组或列表)(有10-100个端点)?
请注意,我的asp.net线程不应该被阻止很长时间(即在队列中等待通过data
发送相关的WCF
)
答案 0 :(得分:0)
客户端没有限制,因为您拥有受控制的客户端代码,所以不需要限制,因此您可以控制执行的请求数。这就是服务的差异,在没有限制的情况下,无法控制在其他地方执行的服务请求数量(停止服务控制)。
因此,如果要控制在客户端上同时执行的请求数,则必须创建对象池 - 只有有限数量的MyWcfClient类可用,每个类将始终创建新的ServiceClient。请求将在队列中等待免费的MyWcfClient实例。
如果你唯一的问题是如何创建ServiceClient的实例,那么答案取决于绑定的类型。
顺便说一下。还要检查asynchronous client calls以及如何correctly close服务客户端。