WCF系列 基础概念
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 绑定
绑定定义了服务间通信的基本方式。常用绑定如下:
- 基本绑定(BaseHttpBinding)
- TCP绑定(NetTcpBinding) 使用TCP协议实现了跨机器的通信。
- IPC绑定(NetNamedPipeBinding) 使用命名管道在同一机器的进程间通信。
- Web服务绑定(WSHttpBinding) 提供基于internet的通信。
- 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系列 基础概念的更多相关文章
- kafka系列 -- 基础概念
kafka是一个分布式的.分区化.可复制提交的发布订阅消息系统 传统的消息传递方法包括两种: 排队:在队列中,一组用户可以从服务器中读取消息,每条消息都发送给其中一个人. 发布-订阅:在这个模型中,消 ...
- WCF分布式开发步步为赢(1):WCF分布式框架基础概念
众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都推 ...
- 快速入门系列--WCF--01基础概念
转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...
- MongoDB入门系列(一):基础概念和安装
概述 MongoDB是目前非常流行的一种非关系型数据库,作为入门系列的第一篇本篇文章主要介绍Mongdb的基础概念知识包括命名规则.数据类型.功能以及安装等. 环境: OS:Windows Versi ...
- .NET技术面试题系列(1) 基础概念
这是.NET技术面试题系列第一篇,今天主要分享基础概念. 1.简述 private. protected. public.internal 修饰符的访问权限 private : 私有成员, 在类的内部 ...
- Spring Cloud Security OAuth2.0 认证授权系列(一) 基础概念
世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. 前序 最近想搞下基于Spring Cloud的认证授权平台,总体想法是可以对服务间授权,想做一个基于Agent 的无 ...
- 理解 angular2 基础概念和结构 ----angular2系列(二)
前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...
- 关系型数据库基础概念:MySQL系列之开篇
一.基础概念 数据(Data)是描述事物的符号记录,是指利用物理符号记录下来的.可以鉴别的信息. 1.数据库(Database,DB)是指长期储存在计算机中的有组织的.可共享的数据集合.数据要按照一定 ...
- MSDN Webcast 跟我一起从零开始学WCF系列课程
系列课程 >跟我一起从零开始学WCF系列课程 跟我一起从零开始学WCF系列课程(1):WCF概述 (Level 200) 讲 师:徐长龙 课程简介:从 本堂课开始我们将开启一个新的 ...
随机推荐
- Helpers.parallel_bulk in Python not working?
Helpers.parallel_bulk in Python not working? 学习了:https://discuss.elastic.co/t/helpers-parallel-bulk- ...
- php 获取/设置用户訪问页面语言类
User Language Class 获取/设置用户訪问的页面语言,假设用户没有设置訪问语言.则读取Accept-Language. 依据用户选择的语言显示相应的页面(英文.中文简体,繁体中文) U ...
- 手写Json转换
在做项目的时候总是要手动将集合转换成json每次都很麻烦,于是就尝试着写了一个公用的方法,用于转换List to json: using System; using System.Collection ...
- Echarts 获取后台数据 使用后台数据展示 饼装图
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head& ...
- Swing的GUI组件得到焦点
Swing的GUI组件如JButtin,JTextArea,JRadioButton,JComboBox等,可以使用requestFocus()方法来获得焦点.
- 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况
在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...
- 使用WinScp连接远程服务器和传输文件
早在3月份,我就使用到了WinScp,WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议. 它的主要功能就是在本地与远程计算机间安全的复制文件..WinSc ...
- jrebel 7免费激活(非破解) 和 IntelliJ Idea 2017 免费激活方法
转自http://www.cnblogs.com/suiyueqiannian/p/6734412.html http://www.cnblogs.com/suiyueqiannian/p/67540 ...
- Vue Element Form表单时间验证控件使用
如果直接使用Element做时间选择器,其规则(rules)不添加type:'date',会提示类型错误,处理这个需要规范值的类型为date. 时间格式化过滤器 import Vue from 'vu ...
- STL容器分析--vector
vector是一种动态数组,是基本数组的类模板. vector,支持随机访问.在数据结构上,属于顺序线性表. 而且,由于是动态数组,