您的位置:首页 > 编程语言

面向接口的编程(WCF)

2014-02-11 10:12 141 查看
我经常比较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();

}

调试



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: