我经常比较Web Service,.NET Remoting,以及WCF这些技术的异同。我觉得WCF更好地体现了面向接口编程的思路。下面我用一个例子来讲解,大家一看应该就理解了
1. 创建解决方案
2. 创建服务接口
添加一个接口类型
添加引用
编写该接口。很简单。就定义了一个OperationContract
3. 创建服务类型
添加对接口类型的引用和System.ServiceModel的引用
编写服务类型
4. 创建宿主程序
添加对System.ServiceModel的引用,添加对服务以及接口的引用
编写程序
【备注】这是完全用代码的方式进行托管的,当然还可以用配置的方式来完成
5. 创建客户程序
添加对接口类型的引用和System.ServiceModel的引用
编写客户端代理类型
6. 调试
7. 进一步扩展
我另外比较欣赏WCF 的是,它所用到的复杂类型也可以更好地在服务端和客户端之间共享。一般可以直接用一个Model项目来保存
【备注】关于这一点,我印象最深刻的是在Web Service的架构中,复杂类型在传递的时候并不那么理想。在生成客户端代理的时候,其实生成那个类型和服务端的那个不是一个东西。
添加引用
8. 修改接口,添加一个操作
9。修改服务,实现该操作
10. 修改宿主,只需要添加对Model的引用即可
11. 修改客户端
修改代理类
/// <summary>
/// 这个类型往常都是通过工具生成的,但也可以自己编写
/// </summary>
class HelloServiceClient : ClientBase<Contracts.IHelloContract>,Contracts.IHelloContract{
public HelloServiceClient(Binding binding, EndpointAddress address) : base(binding, address) { }
#region IHelloContract 成员
public string HelloWorld()
{
return Channel.HelloWorld();
}
#endregion
#region IHelloContract 成员
public Model.Employee GetEmployee()
{
return Channel.GetEmployee();
}
#endregion
}
修改调用代码
static void Main(string[] args)
{
Binding tcpBinding = new NetTcpBinding();
EndpointAddress tcpAddress = new EndpointAddress("net.tcp://localhost:81/HelloService");
HelloServiceClient proxy = new HelloServiceClient(tcpBinding, tcpAddress);
Console.WriteLine(proxy.HelloWorld());
Model.Employee employee = proxy.GetEmployee();
Console.WriteLine(employee);
Console.Read();
}
调试