所以我正在設計一個WCF服務。我對WCF沒有經驗,我試圖決定它是應該託管在IIS中還是自定義的Windows服務。或者其他一些選項?我應該在IIS中託管我的WCF服務嗎?
需要考慮的事情:
- 它需要從啓動數據庫加載數據。
- 它需要在整個請求中維護這些數據,而不是每次都加載它。
- 它需要同時處理多個請求。
- 它需要儘可能地配置端點。
- 它會調用很多本地dll。
我懷疑在IIS中託管它會簡化某些事情,但我不確定在這種情況下這是個好主意。
我有什麼選擇,他們有什麼優點和缺點?
所以我正在設計一個WCF服務。我對WCF沒有經驗,我試圖決定它是應該託管在IIS中還是自定義的Windows服務。或者其他一些選項?我應該在IIS中託管我的WCF服務嗎?
需要考慮的事情:
我懷疑在IIS中託管它會簡化某些事情,但我不確定在這種情況下這是個好主意。
我有什麼選擇,他們有什麼優點和缺點?
你需要基本看三個選項:
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
我更喜歡自己託管的服務(Windows服務)。有了這樣的說法,無論如何都有正當的理由。
還有一些valuable articles in MSDN regarding different WCF hosting strategies。
我會說,沒有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是一個很大的野獸,我建議你看看朱瓦爾·洛的書和其他任何你能得到你的手,你不會了解它在一個天。
也許有點偏離主題,但它確實解決了四個問題。
如果您最終需要自行託管,並且需要儘可能「關於端點的可配置性」,那麼您可能需要查看Managed Services Engine。 MSE是Microsoft Services創建的開源產品,可讓您虛擬化您的服務。基本上,它是一個WCF主機,它使用來自其自己的存儲庫的元數據來公開服務。一些功能是:支持服務的並行版本控制,啓用/禁用服務操作的能力,將操作映射到端點的能力,以及將策略應用於操作的能力。
我不知道它是否符合你的需求,但它是值得考慮看看 - 特別是如果你必須非常配置。
MSE有點舊,不是嗎? – 2009-08-04 17:46:14
是和不是。最新版本是2009年5月,因此正在積極開發。但是,它適合於SOA路線圖的地方,我不確定(可能沒有任何地方,因爲它是由Microsoft Services開發的)。 – 2009-08-04 22:19:12
發佈之間已經有2年左右的時間了,所以我現在說它有點老了。 :) – 2011-01-27 03:48:55
你真的瞭解你的WCF。 – Contango 2010-12-13 22:50:53
@Gravitas:謝謝!我從WCF大師那裏瞭解到:-)(Juval Lowy) – 2010-12-14 06:11:12
大家好,近5年後,你能用最新版本的WCF和IIS更新你的答案嗎?另外,您是否認爲Windows服務回收功能與IIS相同?謝謝! – Nock 2014-06-05 01:23:04