2011-02-14 83 views
2

託管我所看到的例子,示例代碼等自一個控制檯應用程序中託管WCF服務,窗口服務等WCF自託管,通過控制檯應用程序

我的問題是,如何將這項工作在生產?它會有效嗎?它會縮放嗎?

我不確定,它將如何工作,所以其他問題是,這將是單線程?多線程?我是否需要管理多線程?應用程序域?

我更喜歡託管命令行,Windows服務以應用相關的原因。

回答

1

承載WCF端點的Windows服務適用於不會經常被點擊的小型服務;你不必惹IIS(這可能是一個真正的痛苦國際海事組織)。但是,只有一個偵聽器正在偵聽,所以不建議這樣的服務可能同時從多個位置觸發(使用IIS;它設置了可處理多個同時請求的應用程序池)。這種模式適用於兩臺機器之間的一對一互操作;您可能會將服務主機設置在存儲在某個倉庫的「設置並忘記」框中,並將其稱爲執行簡單但自定義的任務,如重新啓動,日誌轉儲等。

避免擁有任何用戶應用程序(控制檯或以其他方式)承載服務端點,除了初始概念驗證測試。除了單監聽器的缺點之外,用戶應用程序必須在已登錄用戶的上下文中運行(而不是作爲Windows啓動的一部分「登錄」的服務用戶),並且必須具有自定義的「保持活動」監測;通過一項服務,Windows可以被告知如果崩潰就重新啓動它,而不會讓用戶應用程序崩潰,而不是阻止該程序取消整個操作系統(並詢問用戶是否想要報告崩潰)。

2

我的問題是,
會不會是有效的?它會縮放嗎?

是的,是的。但對於真正的大規模應用程序,您仍然應該考慮使用IIS(+ WAS)。

所以其他問題是,這將是單線程?多線程?

這是由配置決定的。

+0

配置如何確定? – DarthVader 2011-02-14 18:44:40

2

它會高效嗎?

它取決於服務實現,它在特定的時間範圍內能夠管理的最大請求數。效率是一個相對的衡量標準:假設您的服務能夠處理20條消息/秒,如果您的要求是能夠處理10條消息/秒,那麼您的服務是高效的。但是,如果要求是30,那麼它不是。

它會縮放嗎?

再次,它與託管無關。你的服務是無狀態的嗎?如果不是那麼,他們可能不會擴展很多,因爲負載平衡是不可能的。

它可以管理嗎?

大概不會: - 你需要有記錄的服務器上的用戶運行應用程序 - 它不與服務器 自動啓動 - 它不能失敗 自動重啓 - 它不創建服務的情況下,積極主動地 - 它不提供(不包括自定義代碼)的方式來檢查健康

單實例?多線程?

如果你的服務不維護每個客戶端調用之間的狀態,然後將其配置爲「每次調用一個實例,並沒有多線程」 - >無併發,高吞吐量

如果您的服務確實保持狀態,然後將其配置爲「每個會話和多線程一個實例」以允許客戶端執行併發呼叫。注意併發問題並保護您的資源。

如果您的服務沒有爲每個客戶端維護狀態,但爲所有呼叫保留一些全局數據,請考慮「每個服務和多線程的單個實例」。請記住可能的併發問題。因此,您最好使用「每次調用一個實例」並將全局存儲保留在服務之外。

相關問題