希望WCF
通過Throttling
在服務端具有伸展實例化和併發管理。WCF客戶端實例化和併發問題
我的服務客戶端是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線程不應該被阻止了很長一段時間(即在隊列中等待發送它們的相關data
通過WCF
)
'WCF'支持某種緩存('MRU'緩存),在提問時我並不知道。不過,我不確定如何將其與我的方案一起使用,因爲有幾篇關於它的文章。 – Xaqron 2011-02-26 12:19:07
@Xaqron:如果您在代碼中提供綁定,則無法使用MRU緩存。僅當您提供端點配置的名稱時,MRU緩存纔有效。 MRU依賴於端點配置,遠程地址(您可以將另一個地址傳遞給代理構造函數)和回調接口(僅用於雙工服務)。 – 2011-02-26 15:19:58
你是對的,在閱讀了一些文章後,我決定將綁定移動到配置文件並使用MRU緩存。我不需要會話,但仍需要「消息」安全性。 – Xaqron 2011-02-26 15:39:35