我经常比较Web Service,.NET Remoting,以及WCF这些技术的异同。我觉得WCF更好地体现了面向接口编程的思路。下面我用一个例子来讲解,大家一看应该就理解了

 

1. 创建解决方案

2. 创建服务接口

面向接口的编程(WCF)

添加一个接口类型

面向接口的编程(WCF)

添加引用

面向接口的编程(WCF)

编写该接口。很简单。就定义了一个OperationContract

面向接口的编程(WCF)

3. 创建服务类型

面向接口的编程(WCF)

添加对接口类型的引用和System.ServiceModel的引用

面向接口的编程(WCF) 面向接口的编程(WCF)

编写服务类型

面向接口的编程(WCF) 

4. 创建宿主程序

面向接口的编程(WCF)

添加对System.ServiceModel的引用,添加对服务以及接口的引用

面向接口的编程(WCF)面向接口的编程(WCF)

编写程序

面向接口的编程(WCF)

【备注】这是完全用代码的方式进行托管的,当然还可以用配置的方式来完成

 

5. 创建客户程序

面向接口的编程(WCF)

添加对接口类型的引用和System.ServiceModel的引用

面向接口的编程(WCF) 面向接口的编程(WCF)

编写客户端代理类型

面向接口的编程(WCF) 

6. 调试

面向接口的编程(WCF)

面向接口的编程(WCF)

面向接口的编程(WCF)

 

7. 进一步扩展

我另外比较欣赏WCF 的是,它所用到的复杂类型也可以更好地在服务端和客户端之间共享。一般可以直接用一个Model项目来保存

【备注】关于这一点,我印象最深刻的是在Web Service的架构中,复杂类型在传递的时候并不那么理想。在生成客户端代理的时候,其实生成那个类型和服务端的那个不是一个东西。

 

面向接口的编程(WCF)

添加引用

面向接口的编程(WCF)

面向接口的编程(WCF)

8. 修改接口,添加一个操作

面向接口的编程(WCF)

面向接口的编程(WCF)

 

9。修改服务,实现该操作

面向接口的编程(WCF)

面向接口的编程(WCF)

10. 修改宿主,只需要添加对Model的引用即可

面向接口的编程(WCF)

11. 修改客户端

面向接口的编程(WCF)

修改代理类

/// <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();
}

 

调试

面向接口的编程(WCF)

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-05
猜你喜欢
  • 2021-11-27
相关资源
相似解决方案