2012-06-16 23 views
1

我正面臨有關在會話實例化模式下託管WCF的情況。我正在封裝實際情況並提出一個示例來複制它......如下所示。WCF會話實例化模式主機問題

要託管的服務是「我的服務」。我正在使用Windows服務來託管它..使用http端點。
它需要支持500個併發會話(Singleton &無法完成Percall,因爲合同是基於工作流的...... Login ... Function1,Function2,Logout ..)
我有4個服務器,每個服務器都具有硬件功能支持200個併發會話。
因此,我在一臺服務器上將服務配置爲具有託管路徑(例如「http:// myserver/MyService」)的路由器(ServiceHost S = new ServiceHost(RouterService))。我已經設置了一個簡單的負載均衡機制,並應用路由器表將輸入請求重定向到其他三個服務器,其中託管實際服務副本......(「http:// myserver/MyService1」,「http:// myserver/MyService2 「,」http:// myserver/MyService3「)

它仍然不能正常工作...一旦命中超過200 ...通信錯誤開始...我想因爲當進行500個併發呼叫時,那麼路由器(功能200)也需要與實際服務服務器一起保持連接到客戶端......(在會話呼叫模式下)。我的想法是否正確?

我的問題是...

1)是我的做法正確,或從概念有缺陷的......我應該問硬件團隊建立NLB ...
2)我們應該特別重新設計合同以確保這些請求可以以某種方式進行PerCall ...
3)有人建議這樣的系統應該託管在雲(Windows Azure)上......需要考慮涉及的成本......但它是否正確..
4)託管WCF處理基於會話的呼叫時涉及的最佳實踐是什麼。

我明白我的問題很複雜,不會有一個「正確」的答案......但任何幫助和洞察力將非常感激。

感謝

回答

0

「我應該問硬件團隊建立NLB ......」根據你&設拉子的「粘滯IP集羣」是最接近主辦特定scnerio的人。

問題是WCF會話是基於傳輸的。我們無法像傳統的aspnet那樣在狀態服務器/數據庫中存儲這些「會話」。

WCF4.0已經提出了新的綁定,比如NetTcpContextBinding,BasicHttpContextBinding,WSHttpContextBinding,它們可以幫助在跨機器環境中重新創建上下文環境。但是我沒有提供實例的生產實現知識。

This文章應該可以幫助您瞭解更多...

0

這裏有三個獨立但相關問題:

  • 您的設計需要你保持呼叫之間的狀態
  • 您是相互依賴的時間往返於同一服務器(因爲你存儲狀態)
  • 每個服務器有200個連接的限制

您依賴於回到同一服務器的解決方案在Windows Azure上無法正常工作。

您可以實施一個Sticky IP羣集,它可以解決您的大部分問題,但不保證一臺服務器上不會有超過200個連接。大多數情況下,這是可以的。

您可以將緩存存儲在Appfabric Cache中,那麼返回的服務器無關緊要。

您可以重新設計您的系統,以便將所有狀態存儲在數據庫中。