WCF實現SOA相關操作步驟詳解
我們知道,在WCF中,可以實現許多相應的功能,來幫助我們輕松的解決一些比較復雜的問題。在這里我們就一起來了解一下有關WCF實現SOA的相關方法,以方便我們在實際應用中來獲得些幫助。#t#
WCF實現SOA的一個關鍵問題是,如何將與技術無關的服務轉換為CLR。一旦提供了這種轉換,WCF的服務設計者與開發(fā)者就可以根據自己擁有的CLR的知識,進行WCF面向服務開發(fā)。為兩者搭建橋梁的是宿主。一個宿主可以包含多個上下文,而在上下文中則可以包含服務實例。特殊的,宿主的上下文也可以為空。
客戶端若要調用服務,可以采用代理或通道的方式。這兩種方式在很多資料上已經有了詳盡的介紹。在這里,我不準備重復。如果需要詳細了解甚至掌握著兩種方式,當然可以購買Programming WCF Services一書一探究竟。這里我想介紹的是本書中頻繁使用的一種簡化WCF類庫的一個示例,主要是引入泛型來簡化以及各種步驟地自動化處理。例如ServiceHost<T>類,就是通過引入泛型簡化了WCF實現SOA提供的ServiceHost類:
- public class ServiceHost<T> : ServiceHost {
- public ServiceHost( ) : base(typeof(T)) {}
- public ServiceHost(params string[] baseAddresses) :
base(typeof(T),Convert(baseAddresses)) {}- public ServiceHost(params Uri[] baseAddresses) :
base(typeof(T),baseAddresses) {}- static Uri[]
- Convert(string[] baseAddresses) {
- Converter<string,Uri> convert = delegate(string address)
{ return new Uri(address); };- return Array.ConvertAll(baseAddresses,convert);
- } }
如果是使用ServiceHost類,則托管服務的代碼如下所示:
- public static void Main( ) {
- Uri baseAddress = new Uri("http://localhost:8000/");
- ServiceHost host = new ServiceHost(typeof(MyService),baseAddress);
- host.Open( );
- //Can do blocking calls: Application.Run(new MyForm( ));
- host.Close( );
- }
使用ServiceHost類,則可修改為:
- public static void Main( ) {
- Uri baseAddress = new Uri("http://localhost:8000/");
- ServiceHost<MyService> host = new ServiceHost<MyService>(baseAddress);
- host.Open( );
- //Can do blocking calls:
- Application.Run(new MyForm( ));
- host.Close( );
- }
在ServiceHost<T>類的實現中,使用了.NET 2.0中才引入的一個方法Array.ConvertAll(),它的方法簽名為:
- public static TOutput[]
- ConvertAll<TInput,TOutput> ( TInput[] array,
Converter<TInput,TOutput> converter )
它能夠根據Converter對象將一種類型的數組轉換為另一種類型的數組。
以上就是對WCF實現SOA的相關步驟的介紹。