[WCF學習筆記] Hosting

來源:互聯網
上載者:User

SOA Service 服務的特點:

  • 服務是平台和位置無關的。
  • 服務是相互隔離的。一個服務的改變不會要求其他服務的改變。
  • 服務是通訊協定、格式、傳輸中性的,靈活的。
  • 服務是可擴充的。
  • 服務行為不是限死的,而是策略可更改和配置的。

WCF的推出背景:

  • .NET  Remoting: .NET Remoting 提供了一種很有用的方法,用於管理跨應用程式定義域的同步和非同步 RPC 會話,是替代DCOM的實現分布式應用的方案。是微軟較為成熟的.net平台下實現分布式應用的解決方案(一般來說,remoting是和平台相關的,需要客戶和伺服器都是.NET)。當然,.net remoting的宿主Hosting可以是console程式、Winform程式,也可以是IIS,也就是Web service。.net remoting除了支援http和TCP外,還可以通過自訂傳輸協議來進行傳輸通訊。但.net remoting實際上更適合Intranet而不是Internet,因為.net remoting 是MarshByReference的,可以傳變數的引用,直接對伺服器對象操作。速度快。而web service 是MarshByValue的,必須傳對象的值。速度慢,但可以穿透防火牆。
  • XML Web Serivce:平台無關,能穿透防火牆,Web Serivce是標準。 分幾個層次:Http傳輸、Xml資料格式、SOAP協議封裝、WSDL描述、UDDI發布。
  • MSMQ: 用於建立可靠的、分布式、鬆散串連的、基於訊息通訊的應用程式的開發工具。

 

Hosting :

和.net Remoting一樣,繼承自System.MarshalByRefObject 的對象必須Host到某一個啟動並執行進程中,他才開始監聽來自Client端的請求,當Client才能通過Proxy遠端調用,Remoting Infrastructure監聽到來自Client端的請求,他會啟用相應的remote Object(我們只考慮Server Activate Object——SAO)。實際上對於WCF Service也需要一個Host環境才有其發揮作用的舞台。就像Remoting一樣,你可以使用任何一種Managed Application——Console Application、WinForm Application、IIS / ASP.NET Application——作為它的Host環境。

 

在WCF架構圖中可以看到,Activation and Hosting層提供了使得服務可以在哪兒啟動和宿主的服務。 Service可以宿主在其他應用的上下文之中,也可以self-hosted.

  • Windows Activation Service:在有運行Windows ActivationService的電腦中,WCF應用可以自動啟動.
  • EXE: WCF允許服務以可執行檔運行(.EXE files),例如Winforms,console applications
  • Windows Services: WCF允許服務以Windows服務運行.
  • COM+: WCF允許服務以COM+應用運行.

 

Hosting, which means that you will use a built-in hosting environment such as IIS

在hosted環境中,開發人員不必建立host應用,因為WCF服務宿主在IIS中。IIS管理和控制服務的生命週期,包括控制代碼的建立和釋放(記憶體釋放,系統資源的釋放等)。儘管開發人員不必建立host應用,但是開發人員需要建立目錄結構和服務宿主的虛擬目錄。hosted服務的好處是可以利用IIS來監控服務的穩定性,而且可以自動啟動。

Self-Hosting, which means that you will build the host environment yourself

開發人員需要手動建立服務宿主的環境,來負責服務的建立和生命週期,並對服務的所有方面進行控制。例如,定義Endpoint(或通過configuration),建立ServiceHost等。host應用通過ServiceHost類控制服務控制代碼的建立和釋放,使用Open方法來啟動訊息收取,使用Close方法來停止和釋放服務。這種方法提供更多的靈活性。

 

Host在Managed 程式碼中(例如WinForm applications,console applications, Windows service),部署起來代價更小,靈活性更強

ServiceHost sh;
List<ServiceHost> shs = new List<ServiceHost>();
 
private void Form1_Load(object sender, EventArgs e)
{
  sh = new ServiceHost(typeof(WCFService.ServiceClass));
  sh.Open(); // Open host, --- use sh.Close() to close host
}

 

Links:

[WCF學習筆記] Endpoint

[WCF學習筆記] Binding

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.