使用WSL简化分布式系统开发
如何使用Websharp Service Locator
使用WSL,一般的方法是这样的:
(1)定义一个同你需要访问的服务一致的接口(当然,如果你的服务是实现某个接口的,可以直接使用该接口)。接口的方法名和参数必须同服务类的方法名和参数一致。如果你的方法名和服务的方法名不一致,那么,可以使用ServiceMethodNameAttribute来指明服务的方法名。
(2)在配置文件按中注册你需要访问的服务。
(3)调用ServiceLocator 的FindService方法。
(4)调用接口的方法。
下面是一些例子,这些例子可以从sourceforge下载。
LocalAssemblyLocator 的Hello World例子
按照以下步骤进行:
(1)创建一个名为“EnterpriseClient”的windows console 项目,加入Websharp.dll的引用。
(2)添加一个类,名为“HelloWorld” ,然后添加一个名为“GetHello”的方法,代码如下:
public class HelloWorld
{
public string GetHello(string hello)
{
return hello;
}
}
(3)添加一个名为 “IHelloWorld” 的接口,代码如下:
public interface IHelloWorld
{
string GetHello(string hello);
[ServiceMethodName("GetHello")]
string GetHello2(string hello);
}
(4)填写配置文件:
<xml version="1.0" encoding="utf-8" ?>
<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>
(5)在Main方法中添加如下代码:
public static void Main(string[] args)
{
IHelloWorld hello= ServiceLocator.FindService("HelloWorld",typeof(IHelloWorld)) as IHelloWorld;
Console.WriteLine(hello.GetHello("Hello World"));
Console.WriteLine(hello.GetHello2("Hello again"));
Console.ReadLine();
}
(6)运行程序。
Hello World 的WebServiceLocator例子
按照以下步骤进行:
(1)新建一个webservice 项目,名为“WebserviceTest”。
(2)新建一个webservice 类,名为“Hello” ,并添加一个“HelloWorld”方法,代码如下:
[WebService(Namespace="http://www.websharp.org/webservices/")]
public class Hello : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
(3)使用上面我们创建的“EnterpriseClient”项目,添加一个接口“IHello” ,代码如下:
public interface IHello
{
string HelloWorld();
}
(4)填写配置文件
<Service name="HelloWorldWebService" service-type="WebService" deploy-model="Singleton" url="http://localhost/webservicetest/hello.asmx" namespace="http://www.websharp.org/webservices/" />
(5)在Main方法中添加下面的代码:
public static void Main(string[] args)
{
IHello hello1= ServiceLocator.FindService ("HelloWorldWebService",typeof(IHello)) as IHello;
Console.WriteLine(hello1.HelloWorld());
Console.ReadLine();
}
(6)运行程序。
小结
使用WSL,我们可以使用一致的编程模型访问不同类型的服务,从而简化软件的开发和部署。例如,我们可以在开始的时候,使用本地Assembly的方式开发软件,然后,能够很容易的改成使用Webservice来发布服务,将软件变成多层应用。我们也可以使用WSL来让相同的服务能够支持不同的客户端,而所有的客户端都使用相同的编程模型。
Websharp是一个还处于开发阶段的框架,但是,因为他是开放源代码的,我们可以直接使用他来进行进一步的开发。目前WSL支持的服务还不是很多,实现也还比较简单,但是,他提供了一个很好的框架和构建分布式应用的方案,将来,他将提供越来越多的功能。