簡體   English   中英

我應該在IIS中托管我的WCF服務嗎?

[英]Should I host my WCF service in IIS?

所以我正在設計一個WCF服務。 我對WCF沒有經驗,我正在嘗試決定它是應該在IIS中托管還是自定義Windows服務..還是其他一些選擇?

需要考慮的事項:

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

我懷疑在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,否則我總是會建議並投票支持自托管 - 如果您需要在Windows NT服務中始終運行WCF服務(這是生產環境的最佳解決方案) ,如果您正在開發/調試,您可以在控制台應用程序中完全托管您的WCF服務,您可以在閑暇時啟動和停止。

所以簡而言之:最后,如果你真的希望控制正在發生的事情,我總是建議自我托管。

一旦微軟推出了新的“Dublin”Server-Addon, 可能會改變這種情況 - 可能是在.NET 4推出后的某個時候,可能是在2010年初 - 但現在還為時尚早。

希望這可以幫助。

我自己更喜歡自托管服務(Windows服務)。 有了這個說,有正當理由去任何一種方式。

MSDN中有一些關於不同WCF托管策略的有價值文章

以下是您可能選擇將IIS用作服務主機的原因。

我會說沒有IIS7和WAS你不能使用IIS托管基於HTTP的端點。 因此,您很可能希望自我主持靈活性。

至於您的數據注意事項,任何服務都可以使用狀態進行編碼,以便緩存數據等。

多個請求將要求您使用WCF並發。 您想在服務主機上設置屬性:

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

WCF是一個大野獸,我建議你看看Juval Lowy的書以及你能得到的任何其他東西,你不會在一天內學到它。

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

如果您最終使用自托管並且需要盡可能“關於端點”進行配置,那么您可能需要查看托管服務引擎 MSE是Microsoft Services創建的一個開源產品,可讓您虛擬化您的服務。 基本上,它是一個WCF主機,它使用自己的存儲庫中的元數據來公開服務。 一些功能包括:支持服務的並排版本控制,啟用/禁用服務操作的能力,將操作映射到端點的能力,將策略應用於操作的能力。

我不確定它是否符合您的需求,但值得一看 - 特別是如果您需要非常可配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM