熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows服務器 >> 正文

用Websharp Service Locator簡化分布式系統開發

2013-11-11 22:55:48  來源: Windows服務器 

  什麼是Websharp Service Locator
  對於多層的應用系統來說我們通常把它們劃分成客戶端應用服務層和數據庫在應用服務層我們需要考慮至少兩個方面的問題
  
  ü     如何實現業務邏輯
  
  ü     如何向客戶端提供服務
  
  我們可能使用多種技術來實現服務的提供WebserviceNet Remoting甚至EJB等如此多的實現技術帶來的很大的靈活性但同時也帶來了問題其中一個就是有多少種服務端技術就得有多少種相應的客戶端訪問技術甚至在某些分布式應用系統中應用邏輯使用不同的技術開發存在於不同的機器上有的存在於客戶機本機有的使用Net Remoting開發存在於局域網內有的使用因特網上的Web Service有的時候我們希望相同的業務邏輯能夠支持不同的客戶端
  
  在這種情況下我們需要一個一致的服務訪問編程模型以統合不同的服務訪問模式簡化系統的開發和部署Websharp Service Locator(以下簡稱WSL)提供了這樣一種能力開發人員只需要定義服務訪問接口就可以使用一致的方式透明的訪問這些服務而不用理會這些服務之間的不同點框架會自動生成訪問遠程服務需要的代理
  
  Websharp是sourceforge上的一個新的開源項目目標是提供一個Net環境下的輕量級的應用系統框架它包含了三個主要內容一個O/R Mapping框架一個AOP框架以及一個Service LocatorService Locator目前還只完成本地程序集定位器WebService定位器和Net Remoting定位器的初步開發但是我們已經可以使用它提供的框架功能來為我們的開發提供助力Websharp Service Locator下面的目標是實現對JEE的訪問可以從 下載所有源代碼
  
  Websharp Service Locator的主要接口
      WSL是一個輕量級的框架非常易於使用和擴展如果想使用WSL那麼只有一個類需要打交道ServiceLocator它的定義如下
  
  public abstract class ServiceLocator
  
  {    
  
     public static object FindService(string serviceNameType clientInterface)
  
  }
      如果你想用自己的定位器擴展這個框架那麼只有一個接口需要擴展IServiceLocator這個接口非常簡單只有一個方法
  
  public interface IServiceLocator
  
  {
  
     object FindService(string serviceNameType clientInterface);
  
  }
  Websharp Service Locator的配置文件
      需要在三個地方配置WSL
  
      首先在configSections節中注冊WSL配置文件處理類的的相關信息配置方法如下
  
  <configSections>
  
     <section name=WebsharpEnterprise
  
         type=WebsharpEnterpriseEnterpriseConfigHandlerWebsharp />
  
  configSections>
  
  然後在WebsharpEnterprise節中注冊不同的服務定位器如果你自己擴展了這個框架添加了新的服務定位器也在這裡注冊其中locator屬性的格式是類全名Assembly名 服務定位器都是Singleton的下面是目前WSL支持的服務定位器的注冊的信息
  
  <WebsharpEnterprise>
  
     <ServiceTypes>
  
       <ServiceType name=LocalAssembly
  
              locator=WebsharpEnterpriseLocalAssemblyLocatorWebsharp />
  
       <ServiceType name=WebService
  
              locator=WebsharpEnterpriseWebServiceLocatorWebsharp />
  
       <ServiceType name=DotNetRemoting
  
              locator=WebsharpEnterpriseDotNetRemotingLocatorWebsharp />
  
     ServiceTypes>
  
  WebsharpEnterprise>
  
  
  最後在WebsharpEnterprise下的Services節中注冊每個服務每個Service需要的屬性取決於不同的Locator的實現但是nameservicetype 和deploymodel是必須的對於deploymodel可以有兩種屬性值Singleton和MultiInstance
  
  下面是一個例子
  
  <WebsharpEnterprise>
  
     <ServiceTypes>
  
       <ServiceType name=LocalAssembly
  
              locator=WebsharpEnterpriseLocalAssemblyLocatorWebsharp />
  
       <ServiceType name=WebService
  
              locator=WebsharpEnterpriseWebServiceLocatorWebsharp />
  
       <ServiceType name=DotNetRemoting
  
              locator=WebsharpEnterpriseDotNetRemotingLocatorWebsharp />
  
     ServiceTypes>
  
     <Services>
  
       <Service name=HelloWorld servicetype=LocalAssembly deploymodel=Singleton
  
              type=EnterpriseClientHelloWorldEnterpriseClient />
  
       <Service name=HelloWorldWebService servicetype=WebService
  
            deploymodel=Singleton
  
            url= 
  
            namespace= />
  
       Services> 
     WebsharpEnterprise>
  注對於配置文件在Web項目中可以是nfig文件對於Windows項目可以自己為項目添加一個nfig配置文件關項目配置文件的更多內容請參考MSDN的相關文檔
  
  如何使用Websharp Service Locator?
      使用WSL一般的方法是這樣的
  
  定義一個同你需要訪問的服務一致的接口(當然如果你的服務是實現某個接口的可以直接使用該接口)接口的方法名和參數必須同服務類的方法名和參數一致如果你的方法名和服務的方法名不一致那麼可以使用ServiceMethodNameAttribute來指明服務的方法名
  
  在配置文件按中注冊你需要訪問的服務
  
  調用ServiceLocator 的FindService方法
  
  調用接口的方法
  
  下面是一些例子這些例子使用visual 開發同樣可以從sourceforge下載
  
     LocalAssemblyLocator 的Hello World例子
      按照以下步驟進行
  
  創建一個名為EnterpriseClient的windows console 項目加入Websharpdll的引用
  
  添加一個類名為HelloWorld 然後添加一個名為GetHello的方法代碼如下
  
     public class HelloWorld
  
     {
  
       public string GetHello(string hello)
  
       {
  
         return hello;
  
       }
  
     }
  
   添加一個名為 IHelloWorld 的接口代碼如下
  
     public interface IHelloWorld
  
     {  
  
       string GetHello(string hello);
  
       [ServiceMethodName(GetHello)]
  
       string GetHello(string hello);
  
     }
  
   填寫配置文件
  
  xml version= encoding=utf ?>
  
  <configuration>
  
     <configSections>   
  
       <section name=WebsharpEnterprise
  
            type=WebsharpEnterpriseEnterpriseConfigHandlerWebsharp />
  
     configSections>
     <WebsharpEnterprise>
  
       <ServiceTypes>
  
         <ServiceType name=LocalAssembly
  
                locator=WebsharpEnterpriseLocalAssemblyLocatorWebsharp />
  
         <ServiceType name=WebService
  
                locator=WebsharpEnterpriseWebServiceLocatorWebsharp />
  
       ServiceTypes>
  
  
  
       <Services>
  
         <Service name=HelloWorld servicetype=LocalAssembly
  
              deploymodel=Singleton
  
              type=EnterpriseClientHelloWorldEnterpriseClient />
  
       Services> 
  
     WebsharpEnterprise>
  
  configuration>
  
  
  在Main方法中添加如下代碼
  
  public static void Main(string[] args)
  
  {
  
     IHelloWorld hello= ServiceLocatorFindService(HelloWorld
From:http://tw.wingwit.com/Article/os/fwq/201311/10254.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.