2009-08-04 120 views
15

所以我正在設計一個WCF服務。我對WCF沒有經驗,我試圖決定它是應該託管在IIS中還是自定義的Windows服務。或者其他一些選項?我應該在IIS中託管我的WCF服務嗎?

需要考慮的事情:

  • 它需要從啓動數據庫加載數據。
  • 它需要在整個請求中維護這些數據,而不是每次都加載它。
  • 它需要同時處理多個請求。
  • 它需要儘可能地配置端點。
  • 它會調用很多本地dll。

我懷疑在IIS中託管它會簡化某些事情,但我不確定在這種情況下這是個好主意。

我有什麼選擇,他們有什麼優點和缺點?

回答

16

你需要基本看三個選項:

1)在IIS6(在Windows Server 2003/2003 R2)託管:在這種情況下,你只能承載HTTP協議 - 沒有別的。這本身就是一個限制,你不能使用例如netTcp用於Intranet方案。 2)在IIS7/WAS(Vista,Server 2008)中託管:這爲您提供了更多支持協議的選項,首先託管環境看起來像是贏家。

3)自託管:在這種情況下,完全取決於您做任何您需要做的事來託管和運行您的服務。

如果你現在拋出選項#1(如果你只有IIS6可用,我總是使用自託管),這是對IIS7與自承載。

IIS7爲您提供「按需激活」,例如你的服務代碼在任何時候都不在內存中,但是一旦請求進入就會被加載和實例化。這可能是一個優點。

另一方面,在IIS7/WAS中託管您可以指定您自己的端點 - 您的端點和服務地址是您的「MyService.svc」文件所在的虛擬目錄。你不能以任何方式改變形狀或形式。

自託管可能看起來像很多工作 - 但它確實爲您提供了最大的靈活性:您可以隨意選擇協議,也可以按自己喜歡的方式設置自己的尋址方案,完全控制什麼時候完成。如果您需要執行一些額外的工作以託管服務,則可以引入自己的自定義ServiceHost,等等。

除非你只是隨身攜帶WCF,否則我總是推薦並投票支持自託管 - 如果您需要隨時運行WCF服務,請在Windows NT服務中運行(這是最佳解決方案適用於生產環境),如果您正在開發/調試,則可以將WCF服務完全託管在控制檯應用程序中,您可以在閒暇時啓動和停止。

因此,爲了使長話短說:在最後,如果你真的想在發生了什麼控制,我總是建議自託管。

威力變化,一旦新的「都柏林」服務器的附加組件由微軟出來 - .NET 4推出後的某個時間,大概在2010年初 - 但是這仍然爲時過早。

希望這會有所幫助。

Marc

+3

你真的瞭解你的WCF。 – Contango 2010-12-13 22:50:53

+0

@Gravitas:謝謝!我從WCF大師那裏瞭解到:-)(Juval Lowy) – 2010-12-14 06:11:12

+0

大家好,近5年後,你能用最新版本的WCF和IIS更新你的答案嗎?另外,您是否認爲Windows服務回收功能與IIS相同?謝謝! – Nock 2014-06-05 01:23:04

3

我會說,沒有IIS7和WAS,你不能託管任何東西,但基於HTTP的端點使用IIS。因此,您很可能希望自行承擔靈活性。

至於數據方面的考慮,任何服務都可以使用狀態進行編碼,使得數據緩存等

多個請求將要求您使用WCF併發。你想爲你服務的主機上設置的屬性:

[System.ServiceModel.ServiceBehavior(UseSynchronizationContext = false, 
    InstanceContextMode = System.ServiceModel.InstanceContextMode.PerCall, 
    ConcurrencyMode = System.ServiceModel.ConcurrencyMode.Multiple)] 
public class MyService : IMyService 
{ 
} 

WCF是一個很大的野獸,我建議你看看朱瓦爾·洛的書和其他任何你能得到你的手,你不會了解它在一個天。

1

也許有點偏離主題,但它確實解決了四個問題。

如果您最終需要自行託管,並且需要儘可能「關於端點的可配置性」,那麼您可能需要查看Managed Services Engine。 MSE是Microsoft Services創建的開源產品,可讓您虛擬化您的服務。基本上,它是一個WCF主機,它使用來自其自己的存儲庫的元數據來公開服務。一些功能是:支持服務的並行版本控制,啓用/禁用服務操作的能力,將操作映射到端點的能力,以及將策略應用於操作的能力。

我不知道它是否符合你的需求,但它是值得考慮看看 - 特別是如果你必須非常配置。

+0

MSE有點舊,不是嗎? – 2009-08-04 17:46:14

+0

是和不是。最新版本是2009年5月,因此正在積極開發。但是,它適合於SOA路線圖的地方,我不確定(可能沒有任何地方,因爲它是由Microsoft Services開發的)。 – 2009-08-04 22:19:12

+0

發佈之間已經有2年左右的時間了,所以我現在說它有點老了。 :) – 2011-01-27 03:48:55