SOA本身就是一種面向企業級服務的系統架構,簡單來說,SOA就是一種進行系統開發的新的體系架構,在基于SOA架構的系統中,具體應用程式的功能是由 一些松耦合并且具有統一接口定義方式的元件(也就是service)組合建構起來的。是以,基于SOA的架構也一定是從企業的具體需求開始建構的。但是,SOA和其它企業架構的不同之處就在于SOA提供的業務靈活性。業務靈活性是指企業能對業務變更快速和有效地進行響應、并且利用業務變更來得到競争優勢的能力。對企業級架構設計師來說,建立一個業務靈活的架構意味着建立一個可以滿足目前還未知的業務需求的IT架構。使用WCF實作SOA,正好可以利用WCF的靈活性,把業務層封裝,釋出為Web服務。這樣可以降低系統的耦合度,加大對未知業務的擴充性。
<a target="_blank" href="http://blog.51cto.com/attachment/201204/115726874.png"></a>
Web服務本來就是沒有區分代碼的,在這個例子裡在下多開發了一個Service Interface目的是為了使系統更易于管理。在開發期間,Service是不斷更改的,如果在UI層上直接調用服務層,那更改将會是頻密的,是以在這裡在下開發一個Service Interface層目的是為了把WSDL內建在同一個DLL程式集裡面,進行統一修改。最後UI層隻要直接調用Service Interface,就可以對系統直接進行操作。要以不同開發工具來實作Service Interface,這個的代價并不大,開銷是可以承擔的。下面附上最簡單的例子,希望有經驗的高手給予點評,有不妥的地方請多加指教。
<a target="_blank" href="http://blog.51cto.com/attachment/201204/115813322.png"></a>
//實作Ucsmy.Portal.BLL層
namespace Ucsmy.Portal.BLL
{
public class ExampleManager
{
public IList<Example> GetList(int workers)
{
IExampleDAL examleDAL = DataAccess.CreateExampleDAL();
return examleDAL.GetList(workers);
}
}
}
//在Ucsmy.Portal.Service層裡使用WCF直接調用BLL層裡面的方法
namespace Ucsmy.Portal.Service
[ServiceContract(Namespace="Ucsmy.Portal.Service")]
publicinterface IExampleService
{
[OperationContract]
IList<Example> GetData(int workers);
// TODO: 在此添加您的服務操作
}
public class ExampleService : IExampleService
public ExampleManager exampleManager;
public ExampleService()
exampleManager =new ExampleManager();
public IList<Example> GetData(int workers)
{
IList<Example> exampleList = exampleManager.GetList(workers);
if (exampleList !=null)
return exampleList;
else
return new List<Example>();
}
在原代碼中,在下以Ucsmy.Portal.ServiceFactory實作Service Interface層,其實這個ServiceFactory沒有太多工作,隻是對WCF添加服務引用,然後直接生成DLL即可。當然這隻是初步的做法,在日後完善代碼的時候,這一層還需要對WCF的生命流程進行管理。
<a target="_blank" href="http://blog.51cto.com/attachment/201204/115932161.png"></a>
最後在UI層隻要直接添加對Service.Portal.ServiceFactory的引用就可以直接運作,無需再理會BLL,DAL.......等複雜的邏輯轉換。在實作多功能分布式開發的時候,以WCF實作的SOA的開發方式更能展示其優勢。在現代的大型企業系統開發過程中,系統往往會使用B/S,C/S混合的開發模式。在以往的開發過程,開發人員往往把B/S,C/S分開來實作。在使用WCF技術後,開發人員可以把功能子產品統一釋出為WCF,然後綁定不同的endpoint進行釋出,将B/S和C/S方式的業務邏輯層真正地融合在一起,進而降低開發難度。
使用WCF實作SOA,可以對事務、安全、編碼等進行統一管理,協調了各伺服器之間的系統操作。它涵蓋了之前微軟推出的所有用于分布式開發的技術,包括Remoting、Web Services、WSE、MSMQ等,并以一種統一的程式設計模式來實作。WCF既支援具有互操作性的Web服務,也能夠實作.NET用戶端 與.NET服務端的通信,提供了分布式事務的支援,同時在安全性上,它完全遵循了WS-*的标準,此外,它還支援隊列服務,可以非常友善地利用消息隊列完 成異步操作與脫機調用。在衆多優點的支援下,使用WCF實作SOA面向服務開發不失為一種理想地選擇。
相關文章
<a target="_blank" href="http://www.cnblogs.com/leslies2/archive/2011/01/26/1934162.html">SOA的概念</a>
<a target="_blank" href="http://www.cnblogs.com/leslies2/archive/2011/03/29/1997889.html">SOA基本架構</a>
<a href="http://www.cnblogs.com/leslies2/archive/2011/12/12/2272722.html">結合領域驅動設計的SOA分布式軟體架構</a>
本文轉自 leslies2 51CTO部落格,原文連結:http://blog.51cto.com/79100812/844803