2011-01-20 101 views
4

有一個winform應用程序,並希望在其中託管一個WCF服務。我需要將其託管在單獨的應用程序域中嗎?任何建議?託管WCF服務的任何建議?

+0

我很想知道您爲什麼在您的服務中託管您的服務一個Windows窗體應用程序。如果不是主持一場比賽會更好。 Windows服務b。 IIS(如果這是一個選項),而不是? – InSane 2011-01-20 03:30:07

回答

4

您不需要將其託管在單獨的域中,但您必須決定是否希望服務請求由UI線程或其他線程處理。這取決於您創建ServiceHost實例的方式或應用於您的服務類的ServiceBehavior

當服務在UI線程中託管時,它可以直接與UI交互,但請求處理是消息循環的一部分,所有服務請求都由單個線程(按順序)處理。處理請求時,不能處理其他窗口事件(包括UI事件)=應用程序凍結。

當服務駐留在不同的線程中時,它的行爲與其他宿主環境中的行爲相同,但不能直接與UI交互 - 您必須使用委託調用。

方法來執行服務於自己的線程中運行:

  • 創建和打開ServiceHost實例調用Application.Run(的Windows消息循環的開始)
  • 以前創建並在單獨的線程
  • 開放ServiceHost實例在您的服務實施上使用[ServiceBehavior(UseSynchronizationContext = false)]
1

不,您不必將其託管在單獨的AppDomain中。只需託管它。 WinForms在這方面沒有什麼特別的特殊之處。

0

你的應用做什麼?服務是應用程序常規功能的一部分還是完全獨立的邏輯實體?

如果您想要加載和卸載與您的服務相關的資源(例如程序集)而不關閉您的應用程序而不關閉您的應用程序將會使這更容易,但否則我不會看到很多複雜的原因的東西。

只是我的2C。 :-)

0

您可以以Win形式託管,但必須始終保持運行。

還建議您在IIS中託管,以便任何類型的客戶端可用您的服務。