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

WCF作为一个服务,它具有ABC这三个特性。

A->Address  地址

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

http://localhost:8001  基于http协议

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

net.Pipe://localhost/Pipe       基于进程间通信

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

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

B->Binding   绑定

绑定定义了服务间通信的基本方式。常用绑定如下:

  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系列第一期,后续会陆续更新。

WCF系列 基础概念的更多相关文章

  1. kafka系列 -- 基础概念

    kafka是一个分布式的.分区化.可复制提交的发布订阅消息系统 传统的消息传递方法包括两种: 排队:在队列中,一组用户可以从服务器中读取消息,每条消息都发送给其中一个人. 发布-订阅:在这个模型中,消 ...

  2. WCF分布式开发步步为赢(1):WCF分布式框架基础概念

    众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都推 ...

  3. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  4. MongoDB入门系列(一):基础概念和安装

    概述 MongoDB是目前非常流行的一种非关系型数据库,作为入门系列的第一篇本篇文章主要介绍Mongdb的基础概念知识包括命名规则.数据类型.功能以及安装等. 环境: OS:Windows Versi ...

  5. .NET技术面试题系列(1) 基础概念

    这是.NET技术面试题系列第一篇,今天主要分享基础概念. 1.简述 private. protected. public.internal 修饰符的访问权限 private : 私有成员, 在类的内部 ...

  6. Spring Cloud Security OAuth2.0 认证授权系列(一) 基础概念

    世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. 前序 最近想搞下基于Spring Cloud的认证授权平台,总体想法是可以对服务间授权,想做一个基于Agent 的无 ...

  7. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  8. 关系型数据库基础概念:MySQL系列之开篇

    一.基础概念 数据(Data)是描述事物的符号记录,是指利用物理符号记录下来的.可以鉴别的信息. 1.数据库(Database,DB)是指长期储存在计算机中的有组织的.可共享的数据集合.数据要按照一定 ...

  9. MSDN Webcast 跟我一起从零开始学WCF系列课程

    系列课程 >跟我一起从零开始学WCF系列课程   跟我一起从零开始学WCF系列课程(1):WCF概述 (Level 200)   讲 师:徐长龙    课程简介:从 本堂课开始我们将开启一个新的 ...

随机推荐

  1. Android 如何在关于手机界面添加个图片

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  2. websphere中的会话超时设置 和 web应用中web.xml中session-timeout关系

    Tomcat默认的会话的超时时间设置 设置Tomcat session有效期的三种方式有: 1.在tomcat/conf/web.xml中修改session-timeout的值,该设置是TOMCAT全 ...

  3. UITextField,UITextView字数限制

    UITextField,UITextView字数限制 主要是使用他们的两个代理方法 //标题限制在 30个字以内 - (BOOL)textField:(UITextField *)textField ...

  4. C# 利用反射拷贝类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. .Net操作Excel,Work等几种解决方案

    (一)传统操作Excel遇到的问题: 1.如果是.NET[使用office组件Microsoft.Iffice.interop.Excel的话],需要在服务器端装Office,且及时更新它,以防漏洞, ...

  6. springmvc管理资源开放

    关于web.xml的url映射的小知识:<url-pattern>/</url-pattern>  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀 ...

  7. 0基础的小白怎么学习Java?

    自身零基础,那么我们应该先学好Java,首先我们来了解下Java的特性: Java语言是简单的 Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java.另一方面,Jav ...

  8. Azure 服务监控API调用

    概述 在使用Azure的过程中,很多用户希望通过code的方式获取服务在管理门户中显示的监视信息,如虚拟机的CPU.服务总线的总消息出入数等.目前Azure的大部分服务都已经支持通过监控器的API查询 ...

  9. 使用struct与使用class初始化对象效率对比

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  10. elasticsearch mapping问题解决

    1.报错信息如下: [--16T00::,][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch ...