2011-12-14 80 views
4

我一直致力於在組織內部使用WCF 4構建一組企業服務,並且可以使用一些指導。我迄今設計的設置/體系結構類似於輕量級定製ESB。我有一個主要的「代理」服務(使用wsHttp),連接到三個底層netTcp服務。代理和底層服務都共享一個包含模型的常見程序集以及合同接口。在代理服務中,我可以從我想要公開的底層服務中選擇哪些操作。我們的想法是,根據業務需要,我們可能有一套服務核心和幾個不同的經紀商。我們計劃利用AppFabric和WAS在IIS 7.5中託管所有內容(包括netTcp服務)。WCF路由/ ESB架構?

這是我的問題,是這樣的設計良好的做法,它會擴大規模?這些服務應該能夠處理每天數以千計的交易。

我用WCF 4中的路由代替了我剛纔提到的代理服務概念,但是沒有看到太多的價值,因爲它只是簡單地進行重定向。

我也想弄清楚如何優化代理服務(假設這種做法是可取的)對基礎服務的代理。現在我只是將代理人作爲經紀人主類中的私人成員。例如:

private UnderlyingServiceClient _underlyingServiceClient = new UnderlyingServiceClient(); 

我已經考慮緩存代理服務器,然而,我擔心,如果我碰到一個錯誤,在這一點上,整個代理是有故障,不能再使用(除非我趕上了故障,只是重新實例)。

我的這些服務的目標是確保使用它們的客戶可以儘快地「進出」。快速的請求回覆。

任何輸入/反饋將不勝感激。

回答

0

如果我理解正確,那麼您可能會在單獨的計算機上安裝一些「後端」服務。然後你有一個「fontend」服務,它基本上像後臺代理一樣,但在代碼中完全可定製。我們正在使用機架中的幾臺計算機進行確切的設置。我們的前端是IIS7,後端是幾臺機器上的一堆wcf服務。

一,它會縮放嗎?好吧,在後端添加更多的處理能力非常簡單,編寫一些負載均衡代碼也不錯。對我們來說,問題在於前端陷入困境,儘管它只是作爲代理。我們最終增加了幾個前端電腦,就像你打電話給他們的那個「經紀人」。這很好。人們建議我使用Microsoft ForeFront進行自動負載平衡,但我還沒有研究它。

二,你應該緩存代理嗎?我會說肯定是的,但它有點糟糕。這些通道偶爾會出現故障。我有一個線程始終在後臺運行。每3秒喚醒一次,檢查應用程序中的所有wcf服務和wcf客戶端。任何故障都會被破壞並重新創建。

檢查主機通道:...

while(true) 
{ 
    try{if(MyServiceHost.State!=System.ServiceModel.CommunicationState.Opened) {ReCreate();}} catch{} 
    System.Threading.Thread.Sleep(3000); 
} 

檢查客戶渠道:...

private static ChannelFactory<IMath> mathClientFactory = new ChannelFactory<IMath>(bindingHttpBin); 
    while(true) 
    { 
    try 
    { 
     if(MyServiceClient.State==System.ServiceModel.CommunicationState.Faulted) 
     { 
     EndpointAddress ea = new EndpointAddress(ub.Uri); 
     ch = WcfDynamicLan.mathClientFactory.CreateChannel(ea); 
     } 
    } 
    catch{} 
    System.Threading.Thread.Sleep(3000); 
    } 

在客戶端,我不僅緩存渠道,也是緩存的ChannelFactory。這只是爲了方便起見,儘管使創建新頻道的代碼更短。