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