WCF系列 基础概念

WCF全称Windows Communication Foundation,是微软构建面向服务的分布式编程框架。而它实际上是统一了COM和.Net Remoting等分布式技术提供一个完整,通用,可靠的分布式编程模型。编程

WCF做为一个服务,它具备ABC这三个特性。服务器

A->Address  地址框架

地址包含服务位置和传输协议(传输样式)这两个元素。tcp

http://localhost:8001  基于http协议分布式

net.tcp://localhost:8002/Service  基于tcp协议ide

net.Pipe://localhost/Pipe       基于进程间通讯编码

net.msmq://localhost/Queue    基于消息队列通讯spa

固然还有包括https和服务总线的协议模型。code

B->Binding   绑定orm

绑定定义了服务间通讯的基本方式。经常使用绑定以下:

  1. 基本绑定(BaseHttpBinding)
  2. TCP绑定(NetTcpBinding) 使用TCP协议实现了跨机器的通讯。
  3. IPC绑定(NetNamedPipeBinding) 使用命名管道在同一机器的进程间通讯。
  4. Web服务绑定(WSHttpBinding) 提供基于internet的通讯。
  5. MSMQ绑定(NetMsmqBinding) 使用微软的消息队列通讯

6.固然WCF还定义了其余的一些不经常使用的绑定,我就不一一列举了。具体能够再编码时注意绑定选项。

C->Contract  契约

契约是描述服务功能的标准方式。

服务契约(ServiceContract) 描述客户端可用服务操做

数据契约(DataContract)   定义与服务交互的数据类型

错误契约(FaultContract)   定义服务抛出的错误操做

消息契约(MessageContract)  容许服务于消息交互

 

EndPoint  终结点

终结点的功能就是组装ABC暴露给调用服务的客户端,让客户端可以得到该服务的ABC这3个元素信息。

终结点的能够经过配置文件也能够经过编码,经过配置文件配置WCF服务信息比较灵活,修改参数也无需从新编译发布。而经过编码方式我的感受能控制的更加精准,而且可以充分理解WCF的配置体系。

Host 宿主

WCF服务必须托管的宿主进程中,自托管,IIS发布,WAS宿主引擎。

Mex 元数据

WCF服务元数据是WCF服务的核心部分ABC的原始描述信息,暴露服务元数据的重要缘由就是解决了异构客户端服务交互的关键问题。 元数据基于XML,自描述。客户端能够根据服务的元数据反序列换生成本地代码。

一个简单的Demo

以下为一个自托管的基于tcp协议的WCF服务端和客户端的基本实现,服务的发布采用编码模式

 private void StartAPPWCFService()
        {
           
            string serviceAddress = string.Format("net.tcp://{0}:{1}/", "localhost", CommonData.Configuration.Port);

            Dictionary<Type, Type> sevtypes = new Dictionary<Type, Type>();
           sevtypes.Add(typeof(IPersonService), typeof(PersonService));
           sevtypes.Add(typeof(ISafetyService), typeof(SafetyService));
            sevtypes.Add(typeof(IPressureService), typeof(PressureService));
           
            string endpointAddress = string.Empty;
            string tName = string.Empty;
            foreach (var item in sevtypes)
            {
                tName = item.Value.Name;
                endpointAddress = serviceAddress + tName;
                ServiceHost serviceHost = new ServiceHost(item.Value, new Uri(endpointAddress));
                //加载元数据结点
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                serviceHost.Description.Behaviors.Add(smb);
                serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
                //加载NetTcpBinding结点
                NetTcpBinding netTcpBinding = SetTCPBinding();
                serviceHost.AddServiceEndpoint(item.Key, netTcpBinding, endpointAddress);
                serviceHost.Open();
                listServiceHost.Add(serviceHost);
            }
        }
服务器端

客户端中添加服务引用(net.tcp://127.0.0.1:18001/SafetyService/mex)后便可直接调用服务获取数据,客户端的调用配置信息由系统自动生成

SafetyService.SafetyServiceClient client = new SafetyService.SafetyServiceClient();
 Console.WriteLine(client.getData());
客户端代码

2015年强迫本身写技术博,这是WCF系列第一期,后续会陆续更新。

相关文章
相关标签/搜索