目录:

一、什么是WCF

二、WCF能做什么

三、WCF的模型

四、WCF的基本概念

五、WCF的快速创建

1.WCF是什么

A、WindowsCommunication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。

B、它是.NET框架的一部分,由.NET Framework 3.0开始引入,与WPF(界面图形框架)及WF(工作流框架)并称为新一代Windows操作系统以及WinFX(Windows Vista 的托管代码编程模型)的三个重大应用程序开发类库。

C、在.NETFramework 2.0以及前版本中,微软发展了WebService、.NET Remoting、Winsock等通信支持,由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性,对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在用户有许多不便。同时,服务导向架构SOA也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是WCF,所以WCF整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTPFTP的相关技术。

2.WCF能做什么?

根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。

它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。

WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息队列。

以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;

以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。

WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。

3.WCF模型:

WCF体系架构如下:

WCF的客户端与服务端模型如下:

4.WCF的基本概念:

(1)地址

WCF的每一个服务都有唯一的地址。地址包括服务位置和传输协议(传输样式)。服务位置包括目标机器名、站点、网络、端口、管道或队列,以及一个可选的特定路径或者URI。

地址常用格式为:[基地址]/[可选的URI],如“net.tcp://localhost:8081/MyService”。

基地址常用格式为:[传输协议]://[机器名或域名][:可选端口],如“net.tcp://localhost:8081”。

WCF支持多种传输样式:

  • HTTP 采用http、https协议进行传输,默认端口号80。
  • TCP 采用net.tcp协议进行传输,默认地址为808。
  • Peer network(对等网) 采用net.p2p进行传输,采用Windows的对等网传输机制。
  • IPC(内部进程通信) 采用net.pipe进行传输,使用Windows的命名管道机制,只能接收来自同一台机器的调用,且每台机器只能打开一个命名管道。
  • MSMQ 采用net.msmq进行传输,使用Windows的MSMQ机制,必须指定队列名,如果是处理私有队列,则必须指定队列类型。

(2)绑定

绑定将通信模式与交互方式直接的组合进行规范,将这些通信特征合理地组合在一起。一个绑定封装了诸如传输协议、消息编码、可靠性、安全性、事务传播以及互操作性等相关选项的组合,使得它们保持一致。

WCF定义了六种常用的绑定:

  • 基本绑定 由BasicHttpBinding类提供,将WCF服务公开为Web服务。
  • TCP绑定 由NetTcpBinding类提供,使用TCP协议通信,支持多种特性,包括可靠性、事务性、安全性及WCF之间通信的优化,缺点是客户端必须使用WCF。
  • IPC绑定 由NetNamedPipeBinding类提供,使用命名管道为同一机器的通信进行传输,支持的特性与TCP绑定类似,是性能和安全性最佳的绑定。
  • Web服务绑定 由WSHttpBinding类提供,WS绑定使用HTTP或HTTPS进行传输,提供了诸如可靠性、事务性与安全性在内的多种特性,这些特性遵循WS-*标准,该绑定被设计用来与支持WS-*标准的系统进行互操作。
  • WS双向绑定 由WSDualHttpBinding类提供,支持双向通信。
  • MSMQ绑定 由NetMsmqBinding类提供,使用MSMQ进行传输。

常用绑定的传输协议与编码格式如下:

注意:TCP、IPC和MSMQ绑定使用的二进制编码器是WCF专有的,不要试图为其编写针对其他平台的自定义解析器。

(3)契约

WCF的所有服务都公开为契约,契约与平台无关,是描述服务功能的标准方式。WCF包含4类契约:

  • 服务契约 描述了客户端能够执行的服务操作。
  • 数据契约 定义了与服务交互的数据类型。
  • 错误契约 定义了服务抛出的错误,以及服务处理错误和传递错误到客户端的方式。
  • 消息契约 消息契约允许服务直接与消息交互,用于定制专有的消息格式,也意味着要自己的应用程序上下文,因为会增加代码的复杂度,所以不属于常见用法。

(4)终结点

终结点是WCF进行通信的唯一手段,ChannelFactory<T>本质上是通过制定的终结点创建用于进行服务调用的服务代理。

终结点在WCF体系中通过System.ServiceModel.Description.ServiceEndpoint类型表示,其包含三个核心属性——地址、绑定、契约。

终结点是用来发送和接收消息的构造,终结点是真正意义上的接口,它包含了一个对象接口所需的全部信息。

每个服务至少必须公开一个业务终结点,每个终结点有且只能拥有一个契约。

服务上的所有终结点都包含了唯一的地址,而一个单独的服务则可以公开多个终结点。这些结点可以使用相同或不同的绑定,公开相同或不同的契约。

(5)元数据

服务的元数据描述服务的特征,外部实体需要了解这些特征以便与该服务进行通信。

服务的元数据包括XML、架构文档(用于定义服务的数据协定)和WSDL文档(用于描述服务的方法)。

启用元数据后,WCF通过检查服务及其终结点自动生成服务的元数据。

(6)上下文

WCF上下文将服务宿主与公开本地CLR类型为服务的上下文组合在一起,上下文是服务实例最核心的执行范围,上下文可以为空,即不包含任何服务实例。

(7)宿主

WCF服务类不能凭空存在,每个WCF服务类必须托管在某个宿主进程中。

单个宿主进程可以托管多个服务,而相同的服务类型也可以托管在多个宿主进程中,如果服务与客户端驻留在相同的进程中,则称为进程内托管。常用宿主如下:

  • Web站点
  • Windows窗体应用程序
  • Windows服务
  • Windows激活服务(WAS)

WCF宿主体系结构如下:

每个.NET宿主进程都包含了多个应用程序域,每个应用程序域包含零到多个宿主实例,每个服务宿主实例专门对于于一个特殊的服务类型。

因此,创建一个宿主实例,实际上就是为对应于基地址的宿主机器的类型注册一个包含了所有终结点的服务宿主实例。每个服务宿主实例拥有零到多个上下文。一个上下文可以与零个或一个服务实例关联。

(8) 代理

WCF不允许客户端直接与服务交互,客户端使用代理将调用转发给服务。即使对象是本地的,WCF仍然使用远程编程模型的实例化方式,并且使用代理。

5.WCF的快速创建:

第一步:通过VS创建一个WCF服务应用程序:解决方案-名称-位置自定义

第二步:点击确认后,会自动生成三个文件:服务契约接口,服务接口实现类,配置文件

第三步:对服务进行寄宿,点击Service1.svc在浏览器中进行查看,既可以寄宿该服务

第四步:服务寄宿后,我们就可以查看其元数据的信息以及调用服务产生客户端代理类

点击链接就可以看到服务的元数据信息如下:

第五步:我们通过svcutil.exe工具生成客户端代理类和客户端的配置文件

svcutil.exe是一个命令行工具,位于路径C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin下,我们可以通过命令行运行该工具生成客户端代理类

1.在运行中输入cmd打开命令行,输入 cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin

2.输入svcutil.exe /out:f:\TestProxy.cs /config:f:\App.config http://localhost:10998/Service1.svc?wsdl(注意:端口号改成本机服务寄宿的端口号)

此时你会看到客户端代理类中出现错误,原因是我们并未对服务需要的程序集进行引用。我们引用System.Runtime.Serialization和System.ServiceModel

第七步:在Main()方法中进行服务的方法调用:

第八步:设置客户端(Client)为启动项

运行,看到如下效果:

WCF(一):初识WCF的更多相关文章

  1. WCF 之 初识WCF

    在编程中服务的作用越来越大了,.net从2.0的 webservice,到3.5之后的WCF,服务的功能越来越强了.现在先从简单的看起,先看看WCF服务的发布. 现在来看看一步一步发布 WCF 服务. ...

  2. WCF编程系列(一)初识WCF

    WCF编程系列(一)初识WCF   Windows Communication Foundation(WCF)是微软为构建面向服务的应用程序所提供的统一编程模型.WCF的基本概念:  地址:定义服务的 ...

  3. 我们一起学习WCF 第一篇初识WCF(附源码供对照学习)

    前言:去年由于工作需要我学习了wcf的相关知识,初期对wcf的作用以及为何用怎么样都是一知半解,也许现在也不是非常的清晰.但是通过项目对wcf的运用在脑海里面也算有了初步的模型.今天我就把我从开始wc ...

  4. WCF系列教程之初识WCF

    本随笔参考自WCF编程系列(一)初识WCF,纯属读书笔记,加深记忆. 1.简介:Windows Communication Foundation(WCF)是微软为构建面向服务的应用程序所提供的统一编程 ...

  5. 初识WCF之使用配置文件部署WCF应用程序

    二月份的开头,小编依旧继续着项目开发之路,开始接触全新的知识,EF,WCF,MVC等,今天小编来简单的总结一下有关于WCF的基础知识,学习之前,小编自己给自己提了两个问题,WCF是什么?WCF能用来做 ...

  6. [WCF编程]1.WCF入门示例

    一.WCF是什么? Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remotin ...

  7. WCF服务与WCF数据服务的区别

    问: Hi, I am newbie to wcf programming and a little bit confused between WCF Service and WCF Data  Se ...

  8. 大比速:remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful)

    近来在考虑一个服务选型,dotnet提供了众多的远程服务形式.在只考虑dotnet到dotnet的情形下,我们可以选择remoting.WCF(http).WCF(tcp).WCF(RESTful). ...

  9. 大比速:remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful) .net core 控制台程序使用依赖注入(Autofac)

    大比速:remoting.WCF(http).WCF(tcp).WCF(RESTful).asp.net core(RESTful) 近来在考虑一个服务选型,dotnet提供了众多的远程服务形式.在只 ...

随机推荐

  1. 设备指纹识别之User Agent 解析

    设备指纹识别之User Agent 解析User Agent 解析 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-4- ...

  2. 网友"就像一支烟"山寨币分析估值方法

    [注:素材取自QQ群,2017年12月28日的聊天记录."就像一支烟"分享了自己的山寨币分析估值方法.因为删去了其他人的聊天记录,部分文字可能断章取义,仅供参考,具体情况请自行分析 ...

  3. iOS UICollectionView(转三)

    上篇博客的实例是自带的UICollectionViewDelegateFlowLayout布局基础上来做的Demo, 详情请看<iOS开发之窥探UICollectionViewControlle ...

  4. bzoj 1179: [Apio2009]Atm

    Description Input 第 一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路 的起点和终点的 ...

  5. Spark源码剖析(六):Worker原理与源码剖析

    上篇文章我们剖析了Master的原理和源码,知道了当Master使用资源分配算法将资源分配完成后,就会给对应的Worker发送启动Driver或者Executor的消息,那么Worker收到这些消息后 ...

  6. js scrollTop 事件

    代码: window.onscroll = function() { var t = document.documentElement.scrollTop || document.body.scrol ...

  7. Docker入门书籍

    https://yuedu.baidu.com/ebook/d817967416fc700abb68fca1 精细讲解,入门使用极佳.

  8. Docker安装入门 -- 应用镜像

    Docker安装入门 -- 应用镜像 WordPress  1.docker build -t csphere/wordpress:4.2 .  2.docker run -d -p 80:80 -- ...

  9. whereis 命令详解

    whereis 作用:whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息.  参数:-b 定位可 ...

  10. String源码图

    String StringBuffer StringBuilder 均为对字符数组的操作. 实现了不同的接口,导致不同的覆写. 实现了同样的接口,适应不同的场景.