Fork me on GitHub

WCF学习笔记

什么是 WCF 

WCF的功能

WCF和微软其他技术的集成 

WCF4.5简化的功能 

WCF基础概念  

WCF术语 

WCF体系结构  

什么是 WCF 

Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架。 借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点。 服务终结点可以是由 IIS 承载的持续可用的服务的一部分,也可以是应用程序中承载的服务。 终结点可以是从服务终结点请求数据的服务客户端。 简单消息可以是作为 XML 发送的单个字符或单个单词,复杂消息可以是二进制数据流。 一些示例方案包括:

处理企业事务的安全服务。

将当前数据提供给其他服务(例如流量报告或其他监视服务)的服务。

使两个人能够实时通信或交换数据的聊天服务。

轮询一个或多个服务以查找数据并将其以逻辑表现形式展示出来的面板应用程序

将使用 Windows Workflow Foundation 实现的工作流作为 WCF 服务公开。

轮询服务以查找最新数据源的 Silverlight 应用程序。

 虽然在 WCF 存在之前就可以创建此类应用程序,但 WCF 使终结点的开发比以前更容易【.NET4.5简化了很多内容】。 总之,WCF 设计提供一种用于创建 Web 服务和 Web 服务客户端的可管理的方式。

 

WCF的功能 

服务导向

使用 WS 标准的一个结果是,WCF 允许您创建面向服务的应用程序。 面向服务的体系结构 (SOA) 依赖 Web 服务发送和接收数据。 这些服务具有松耦合的常规优点,而不是从一个应用程序到另一个应用程序进行硬编码。 松耦合关系意味着只要符合基本协定,则在任何平台上创建的任何客户端均可连接到所有服务。

互操作性

WCF 实现了 Web 服务互操作性的现代行业标准。

多种消息模式

采用多种模式之一交换消息。 最常用的模式是请求/答复模式,其中一个终结点从另一个终结点请求数据, 另一个终结点进行答复。 还有其他模式,比如单向消息,其中只有一个终结点发送消息,而不期望得到答复。 更复杂的模式是双工交换模式,在该模式下,两个终结点建立连接并来回发送数据,类似于即时消息传递程序。 

服务元数据

WCF 支持使用行业标准(如 WSDLXML 架构和 WS-Policy)中指定的格式发布服务元数据。 该元数据可用于自动生成并配置客户端,以便访问 WCF 服务。 可通过 HTTP 和 HTTPS 来发布元数据,也可使用 Web 服务元数据交换标准来发布元数据。 

数据协定

由于 WCF 是使用 .NET Framework 生成的,因此它也包括代码友好的方法,用于提供希望强制执行的协定。 数据协定就是其中一种通用类型的协定。实质上,当您使用 Visual C# 或 Visual Basic 对服务进行编码时,处理数据的最简单方法是使用属于数据实体的属性创建表示该数据实体的类。 WCF 包括一个有关这种轻松的方式处理数据的综合系统。 在创建了表示数据的类之后,服务会自动生成使客户端能够符合所设计数据类型的元数据。 

安全性

可对消息进加密以保护隐私,而且可以要求用户对其自身进行身份验证,然后才允许接收消息。 可使用众所周知的标准(如 SSL 或WS-SecureConversation)实现安全性。 

多种传输和编码方式

可通过多种内置传输协议和编码中的任意一种发送消息。 最常用的协议和编码是使用超文本传输协议 (HTTP) 发送文本编码的 SOAP 消息,以便在万维网上使用。 此外,WCF 还允许通过 TCP、命名管道或 MSMQ 发送消息。 这些消息可以编码为文本,也可以使用优化的二进制格式。 使用 MTOM 标准可有效地发送二进制数据。 如果所提供的传输或编码方式都不符合您的需要,您可以创建自己的自定义传输或编码。 .

可靠的排队消息

WCF 支持使用通过 WS-ReliableMessaging 实现的可靠会话使用 MSMQ 进行可靠的消息交换

持久性消息

持久性消息决不会由于通信中断而丢失。 持久性消息模式的消息会始终保存到数据库中。 如果发生中断,数据库将允许您在恢复连接后恢复消息交换。 此外,也可以使用 Windows Workflow Foundation (WF来创建持久性消息。

事务

WCF 还支持使用三个事务模型之一的事务:WS-AtomicTtransactionsSystem.Transactions 命名空间中的 API 以及 Microsoft 分布式事务协调器

AJAX 和 REST 支持

REST 只是 Web 2.0 技术下不断演变的一个示例。 WCF 可以配置为简单的SOAP 信封包裹的 XML 数据。 WCF 此外可以进行扩展以支持特定的XML格式,如 ATOM流行的 RSS 标准),甚至非 XML 格式,例如,JavaScript 对象表示法 (JSON

可扩展性

WCF 体系结构具有大量扩展点。 如果需要额外功能,它还提供许多入口点,允许您自定义服务的行为。

 

 

WCF和微软其他技术的集成 

WCF 是一个灵活的平台。 由于这一极强的灵活性,WCF 还在 Microsoft 的一些其他产品中得以利用。 如果您也在使用这些产品中的任何产品,通过了解 WCF 的基础知识,您会立即受益。

与 WCF 配对的第一项技术是 Windows Workflow Foundation (WF)。 工作流通过将工作流中的各步骤封装为活动,从而简化了应用程序开发。在 Windows Workflow Foundation 的第一个版本中,开发人员必须为工作流创建一个宿主。 Windows Workflow Foundation 之后的版本与 WCF 进行了集成, 从而允许在 WCF 服务中轻松承载任何工作流;通过在 Visual Studio 2012 中自动选择 WF/WCF 作为项目类型可实现此目的

Microsoft BizTalk Server R2 还利用 WCF 作为通信技术。 BizTalk 设计用于接收一种标准化格式的数据,然后将其转换为另一种格式。 必须将消息传递到其中央消息框,在这里可以使用严格的映射,也可以通过使用其中一种 BizTalk 功能(如其工作流引擎)来转换消息。 目前,BizTalk 可使用 WCF 业务线 (LOB) 适配器将消息传递到消息框。

Microsoft Silverlight 是一个用于创建可互操作的、丰富 Web 应用程序的平台,允许开发人员创建媒体密集的网站(如流视频)。 Silverlight 加入了 WCF 作为通信技术,以将 Silverlight 应用程序连接到 WCF 终结点

Microsoft .NET Services 是一项云计算计划,使用 WCF 生成启用 Internet 的应用程序。 使用 .NET Services 可创建跨信任边界操作的 WCF 服务

Windows Server AppFabric 的承载功能 应用程序服务器是针对部署和管理使用 WCF 进行通信的应用程序专门生成的。 承载功能 包括丰富的工具和配置选项,专门设计用于启用 WCF 的应用程序。

 

WCF4.5简化的功能 

楼主

发表于 2013-05-30 00:57:25 | 查看: 9|回复: 0|只看楼主

简化生产的配置文件当您在 Visual Studio 中添加服务引用,或使用 SvcUtil.exe工具时,生成客户端配置文件。 在以前版本的 WCF 中,这些配置文件包含每个绑定属性的值,即使它的值是默认值。 在 WCF4.5 中,生成的配置文件包含只绑定属性,这些属性都设置为非默认值

下面是由 WCF 3.0 生成的配置文件的示例。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <system.serviceModel>
       <bindings>
           <basicHttpBinding>
               <binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
                   openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                   allowCookies="false" bypassProxyOnLocal="false" 
                   hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" 
                   maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                   messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                   useDefaultWebProxy="true">
                   <readerQuotas maxDepth="32" maxStringContentLength="8192" 
                       maxArrayLength="16384" maxBytesPerRead="4096"
                       maxNameTableCharCount="16384" />
                   <security mode="None">
                       <transport clientCredentialType="None" proxyCredentialType="None"
                           realm="" />
                       <message clientCredentialType="UserName" algorithmSuite="Default" />
                   </security>
               </binding>
           </basicHttpBinding>
       </bindings>
       <client>
           <endpoint address="http://localhost:36906/Service1.svc" binding="basicHttpBinding"
               bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
               name="BasicHttpBinding_IService1" />
       </client>
   </system.serviceModel>
</configuration>

下面是由 WCF 4.5 生成的相同配置文件的示例

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <system.serviceModel>
       <bindings>
           <basicHttpBinding>
               <binding name="BasicHttpBinding_IService1" />
           </basicHttpBinding>
       </bindings>
       <client>
           <endpoint address="http://localhost:36906/Service1.svc" binding="basicHttpBinding"
               bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
               name="BasicHttpBinding_IService1" />
       </client>
   </system.serviceModel>
</configuration>

契约【协定】优先开发

WCF 现在支持协定优先开发。 Svcutl.exe 工具有一个 /serviceContract 开关,使您可以从 WSDL 文档生成服务和数据协定

从可移植的项目中添加服务引用

可移植子集项目使 .NET 程序集程序员能够维护单个源代码树和生成系统,同时仍支持多个 .NET 平台(桌面、SilverlightWindows Phone 和 XBOX)。 可移植子集项目只引用 .NET 可移植库,该库是 .NET Framework 程序集,可在任何核心 .NET 平台上使用。 开发人员的体验是添加任何其他 WCF 客户端应用程序内的服务引用相同。

ASP.NET兼容模式默认更改

WCF 提供 ASP.NET 兼容模式,授予在编写 WCF 服务时,对 ASP.NET HTTP 管道中所有功能的完全访问权限。 要使用此模式,您必须在 web.config 

<serviceHostingEnvironment> 部分,将 aspNetCompatibilityEnabled 特性设置为 true。 此外,在此应用程序域中的任何服务都需要将其AspNetCompatibilityRequirementsAttribute 上的RequirementsMode 属性设置为 Allowed 或 Required。 默认情况下,AspNetCompatibilityRequirementsAttribute 现已设置为 Allowed,默认 WCF 服务应用程序模版将 aspNetCompatibilityEnabled 特性设置为 true

流式改进

已向 WCF 添加了对异步流处理的新支持。 要启用异步流处理,将 DispatcherSynchronizationBehavior 终结点行为添加到服务主机,并将其AsynchronousSendEnabled 属性设置为 true。 服务将经流处理的消息发送到多个正在缓慢阅读客户端时,这可以有益于可扩展性。 WCF 不再阻塞每个客户端的一个线程,并将释放线程以为另一个客户端服务。

删除 IIS 承载服务时缓冲消息的限制。 在以前版本的 WCF 中,收到一条关于使用流处理消息传输的 IIS 承载服务的消息。ASP.NET 将在其发送到 WCF 之前缓冲整个消息。 这将导致大量内存消耗。 已在 .NET 4.5 中删除此缓冲,现在,IIS 承载的 WCF服务可以在收到整个消息之前开始处理传入的流,从而使实现真正的流处理。 这允许 WCF 立即对消息作出响应,并允许改进的性能。 此外,您不必再指定 maxRequestLength 的值,ASP.NET 对传入的请求进行大小限制。 如果设置了此属性,则忽略此属性, 您仍需要配置 maxAllowedContentLength

新传输默认值

属性

On

新默认

详细信息

channelInitializationTimeout

NetTcpBinding

30 

此属性确定 TCP 连接可使用 .Net Framing 协议对自身进行身份验证的时间。 客户端需要发送一些初始数据,然后服务器才有足够的信息来执行身份验证。 此超时是故意设置为小于 ReceiveTimeout 10 分钟),使未经身份验证的恶意客户端无法长时间保持绑到服务器的连接。默认值为 30 秒。 

listenBacklog

NetTcpBinding

16 * 处理器数量

这是套接字级别的属性,描述要排队的挂起接受请求数。 如果侦听积压工作队列已满,新的套接字请求将被拒绝。 

MaxPendingAccepts

ConnectionOrientedTransportBindingElement

SMSvcHost.exe

* 要传输的处理器的数量

*针对 SMSvcHost.exe 的处理器数量

此属性限制服务器可用于等待侦听器的通道的数量MaxPendingAccepts 太低时,会有一个较小的时间间隔,所有的等待通道在此间隔内开始服务连接,但没有新的通道已开始侦听。 在此间隔期间可以到达连接,但将因服务器上没有等待它的内容而失败。 此属性可以通过设置 MaxPendingConnections 属性为较大的数目进行配置。 

maxPendingConnections

ConnectionOrientedTransportBindingElement

12 * 处理器数量

此属性控制传输已接受,但 ServiceModel 调度程序尚未选取的连接数。 要设置此值,使用绑定上的MaxConnections 或绑定元素上的maxOutboundConnectionsPerEndpoint。 

receiveTimeout

SMSvcHost.exe

30 

此属性为读取 TCP 帧数据和执行来自基础连接的连接调度指定超时值。 其存在用于对时间段施加一个限制,SMSvcHost.exe 服务在该时段内保持参与从传入连接读取前导数据。 

下表描述的已更改的设置和在哪里可以找到的其他信息。

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas 包含 XML 字典读取器的可配置的配额值,限制编码器在创建消息时使用的的内存量。 虽然这些配额是可配置的,但默认的值已经更改为减轻开发人员将需要显式设置它们的可能性。 MaxReceivedMessageSize 配额未更改,因此仍然可以限制内存消耗,防止您处理XmlDictionaryReaderQuotas 的复杂性。 下表显示了配额和它们的新默认值,并简要说明了每个配额的使用目的。

配额名称

默认值

说明

MaxArrayLength

Int32.MaxValue

获取并设置允许的最大数组长度。 此配额限制 XML 读取器返回的基元数组(包括字节数组)的最大大小。此配额不限制 XML 读取器本身的内存消耗,但限制使用该读取器的所有组件的内存消耗。 例如,当DataContractSerializer 使用一个以 MaxArrayLength 保护的读取器时,将不会反序列化大于此配额的字节数组。

MaxBytesPerRead

Int32.MaxValue

获取并设置允许每次读取返回的最大字节数。 此配额限制当读取元素开始标记及其属性时在一次读取操作中读取的字节数 (在非流模式情况下,元素名称本身不会根据配额进行计数)。 具有过多的 XML 特性可能会耗费过长的处理时间,因为必须检查特性名称的唯一性。 MaxBytesPerRead 可缓解这一威胁。

MaxDepth

节点深度为 128

此配额限制 XML 元素的最大嵌套深度。 MaxDepth 与 MaxBytesPerRead 交互:读取器始终在内存中保留当前元素以及它的所有上级的数据,因此读取器的最大内存消耗与这两个设置的积成比例。 当反序列化深度嵌套的对象图时,会迫使反序列化程序访问整个堆栈并引发一个不可恢复的 StackOverflowException。对于 DataContractSerializer 和 XmlSerializer 而言,XML 嵌套与对象嵌套之间存在直接关联。 MaxDepth用于缓解这一威胁。

MaxNameTableCharCount

Int32.MaxValue

此配额限制名称表中允许的最大字符数。 名称表包含在处理 XML 文档时遇到的一些字符串(例如,命名空间和前缀)。 因为这些字符串缓冲在内存中,所以此配额用于防止在预计使用流模式时过度缓冲。

MaxStringContentLength

Int32.MaxValue

此配额限制 XML 读取器返回的最大字符串大小。 此配额不限制 XML 读取器本身的内存消耗,但限制使用该读取器的组件中的内存消耗。 例如,当 DataContractSerializer 使用一个以 MaxStringContentLength 保护的读取器时,将不会反序列化大于此配额的字符串。

 

WCF配置验证

作为 Visual Studio 中版本进程的一部分,现在验证了 WCF 配置文件。 如果验证失败,将在 Visual Studio 中显示验证错误或警告的列表。

XML编辑器工具提示

为了帮助新的和现有的 WCF 服务开发人员配置他们的服务,Visual Studio XML 配置编辑器现在为属于服务配置文件的每个配置元素及其属性提供工具提示

BasicHttpBinding改进

启用单个 WCF 终结点对不同身份验证模式进行响应。

使 WCF 服务的安全性设置由 IIS 控制

 

WCF基础概念  

WCF基础知识

WCF 是一个运行时和一组 API,用于创建在服务与客户端之间发送消息的系统。 它使用相同的基础结构和 API 来创建应用程序,这些应用程序可与同一计算机系统上或驻留在另一家公司内并通过 Internet 访问的系统上的其他应用程序进行通信。

消息和终结点

WCF 建立在基于消息的通信这一概念基础之上,可以建模为消息(如 HTTP 请求或消息队列(也称为 MSMQ消息)的任何内容都可以在编程模型中按照统一方式进行表示。 这样,就可以在不同传输机制间提供一个统一的 API

该模型对客户端(即启动通信的应用程序)和服务(即等待客户端与其进行通信并响应该通信的应用程序)加以区分。 单个应用程序既可以充当客户端,也可以充当服务。 

消息在终结点之间发送。 终结点是发送或接收消息(或执行这两种操作)的场所,它们定义消息交换所需要的所有信息。 服务公开一个或多个应用程序终结点(以及零个或更多个基础结构终结点),而客户端生成一个与服务的其中一个终结点兼容的终结点。

终结点以基于标准的方式描述消息应发送到的位置消息应如何发送以及消息应具有的形式。 服务可以将这些信息作为元数据加以公开,而客户端可以处理这些元数据以生成适当的 WCF 客户端和通信堆栈

通信协议

通信堆栈的一个必要元素是传输协议。 可以使用常用传输协议(如 HTTP 和 TCP)通过 Intranet 和 Internet 发送消息。 也可以使用其他支持与消息队列应用程序和对等网络网格上的节点进行通信的传输协议。 使用 WCF 的内置扩展点可以添加更多传输机制

通信堆栈中的另一个必要元素是指定如何将任意给定消息格式化的编码。 提供了下列编码: WCF提供以下类型:

文本编码,一种可互操作的编码。

消息传输优化机制 (MTOM) 编码,该编码是一种可互操作的方法,用于高效地将非结构化二进制数据发送到服务或从服务接收这些数据

用于实现高效传输的二进制编码

使用 WCF 的内置扩展点可以添加更多编码机制(如压缩编码)。

消息模式

WCF 支持多种消息模式,包括请求-回复、单向和双工通信。 不同传输协议支持不同的消息模式,因而会影响它们所支持的交互类型。 WCF API 和运行库还能帮助您安全而可靠地发送消息。

 

WCF术语  

WCF 中使用的其他概念和术语包括:

消息

消息是一个独立的数据单元,它可能由几个部分组成,包括消息正文和消息头。

服务

服务是一个构造,它公开一个或多个终结点,其中每个终结点都公开一个或多个服务操作

终结点

终结点是用来发送或接收消息(或同时执行这两种操作)的构造。 终结点包括一个定义消息可以发送到的目的地的位置(地址)、一个描述消息应如何发送的通信机制规范(绑定),以及对可以在该位置发送或接收(或同时执行这两种操作)的一组消息的定义(服务协定,用于描述可以发送哪些消息)。WCF 服务作为一个终结点集合对外公开

应用程序终结点

一个终结点,由应用程序公开并对应于该应用程序实现的服务协定。

基础结构终结点

一个终结点,由基础结构公开,以便实现与服务协定无关的服务需要或提供的功能。 例如,服务可能拥有一个提供元数据信息的基础结构终结点。

地址

指定接收消息的位置。 它以统一资源标识符 (URI) 的形式指定。 URI 架构部分指定用于到达地址的传输机制,如 HTTP 和 TCP。 URI 的层次结构部分包含一个唯一的位置,其格式取决于传输机制。

使用终结点地址可以为服务中的每个终结点创建唯一的终结点地址,或者在某些条件下在终结点之间共享一个地址。 下面的示例演示了一个将 HTTPS 协议和一个非默认端口结合使用的地址:

HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService

绑定

绑定定义终结点与外界进行通信的方式。 它由一组称为绑定元素的要素构造而成,这些元素堆叠在一起以形成通信基础结构。 绑定最起码应定义传输协议(如 HTTP 或 TCP)和所使用的编码(如文本或二进制)。 绑定可以包含指定详细信息(例如,用于保护消息的安全机制或终结点所使用的消息模式)的绑定元素。

绑定元素

绑定元素表示绑定的特定部分,如传输协议、编码、基础结构级协议(如 WS-ReliableMessaging)的实现以及通信堆栈的其他任何要素。

行为

行为是控制服务、终结点、特定操作或客户端的各个运行时方面的要素。 行为按照范围进行分组:常见行为在全局范围内影响所有终结点,服务行为仅影响与服务相关的方面,终结点行为仅影响与终结点相关的属性,操作级行为影响特定操作。 例如,有一种服务行为是遏制,它指定当过多的消息可能超出服务的处理能力时,服务应该如何反应。 另一方面,终结点行为仅控制与终结点相关的方面,如查找安全凭据的方式和位置

系统提供的绑定

WCF 包含许多系统提供的绑定。 这些绑定是针对特定方案进行优化的绑定元素的集合。 例如,WSHttpBinding 是为了与实现各种 WS* 规范的服务进行互操作而专门设计的。 通过仅提供那些可以正确应用于特定方案的选项,这些预定义的绑定可以节省时间。 如果预定义的绑定不能满足您的要求,则可以创建您自己的自定义绑定。

配置与编码

可以通过代码编写、配置或将两者结合在一起对应用程序进行控制。 配置的优点在于,它使非开发人员(如网络管理员)可以在代码编写完成后直接对客户端和服务参数进行设置,而不必重新进行编译。 使用配置不仅可以设置值(如终结点地址),还可以通过添加终结点、绑定和行为来实施进一步的控制。 通过代码编写,开发人员可以保持对服务或客户端的所有组件的严格控制,而且可以对通过配置完成的所有设置进行检查,并根据需要通过代码进行重写。

服务操作

服务操作是在服务的代码中定义的过程,用于实现某种操作的功能。 此操作作为一个 WCF 客户端上的方法向客户端公开。 该方法可以返回一个值,并可采用数量可选的参数,或是不采用任何参数且不返回任何响应。 例如,一个实现简单的Hello的操作可以用作客户端存在通知,并可以开始一系列操作。

服务协定

服务协定将多个相关的操作联系在一起,组成单个功能单元。 协定可以定义服务级设置,如服务的命名空间、对应的回调协定以及其他此类设置。 在大多数情况下,协定的定义方法是用所选的编程语言创建一个接口,然后将 ServiceContractAttribute 属性应用于该接口。 通过实现该接口,可生成实际的服务代码。

操作协定

操作协定定义参数并返回操作的类型。 在创建定义服务协定的接口时,可以通过将 OperationContractAttribute 属性应用于协定中包含的每个方法定义来表示一个操作协定。 可以将操作建模为采用单个消息作为参数并返回单个消息,或者建模为采用一组类型作为参数并返回一个类型。 在后一种情况下,系统将确定需要为该操作交换的消息的格式。

消息协定

消息协定描述消息的格式。 例如,它会声明消息元素应包含在消息头中还是包含在消息正文中,应该对消息的何种元素应用何种级别的安全性,等等。

错误协定

可以将错误协定与服务操作进行关联,以指示可能返回到调用方的错误。 一个操作可以具有零个或更多个与其相关联的错误。 这些错误是在编程模型中作为异常建模的 SOAP 错误。

数据协定

服务使用的数据类型必须在元数据中进行描述, 以使其他各方可以与该服务进行交互操作。 数据类型可以在消息的任何部分使用(例如,作为参数或返回类型)。 如果服务仅使用简单类型,则无需显式使用数据协定。

宿主

服务必须承载于某个进程中。 宿主是控制服务的生存期的应用程序。 服务可以是自承载的,也可以由现有的宿主进程进行管理

自承载服务

自承载服务是在开发人员创建的进程应用程序中运行的服务。 开发人员控制服务的生存期、设置服务的属性、打开服务(这会将服务设置为侦听模式)以及关闭服务。

宿主进程

宿主进程是专为承载服务而设计的应用程序。 这些宿主进程包括 Internet 信息服务 (IIS)Windows 激活服务 (WAS) 和 Windows 服务。 在这些宿主方案中,由宿主控制服务的生存期。 例如,使用 IIS 可以设置包含服务程序集和配置文件的虚拟目录。 在收到消息时,IIS 将启动服务并控制服务的生存期。

实例化

每个服务都具有一个实例化模型。 有三种实例化模型:单个,在这种模型中,由单个 CLR 对象为所有客户端提供服务每个调用,在这种模型中,将创建一个新的 CLR 对象来处理每个客户端调用每个会话,在这种模型中,将创建一组 CLR 对象,并且为每个独立的会话使用一个对象。 实例化模型的选择取决于应用程序要求和服务的预期使用模式。

客户端应用程序

客户端应用程序是与一个或多个终结点交换消息的程序。 客户端应用程序通过创建一个 WCF 客户端实例并调用该 WCF 客户端的方法来开始工作。 需要注意的是,单个应用程序既可以充当客户端,也可以充当服务

通道

通道是绑定元素的具体实现。 绑定表示配置,而通道是与该配置相关联的实现。 因此,每个绑定元素都有一个相关联的通道 通道堆叠在一起以形成绑定的具体实现:通道堆栈。

WCF 客户端

WCF 客户端是一个将服务操作作为方法公开的客户端应用程序构造(用您所选的 .NET Framework 编程语言编写,如 Visual Basic 或 Visual C#)。 任何应用程序都可以承载 WCF 客户端,包括承载服务的应用程序。 因此,可以创建一个包含其他服务的 WCF 客户端的服务。

通过使用 ServiceModel 元数据实用工具 (Svcutil.exe) 并使其指向正在运行的发布元数据的服务,可以自动生成 WCF 客户端。

元数据

服务的元数据描述服务的各种特征,外部实体需要了解这些特征以便与该服务进行通信。 ServiceModel 元数据实用工具 (Svcutil.exe) 可以使用元数据生成 WCF 客户端以及客户端应用程序可用来与服务进行交互的伴随配置。

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

启用元数据后,WCF 通过检查服务及其终结点自动生成服务的元数据。 若要发布服务的元数据,必须显式启用元数据行为

安全性

WCF 中的安全性包括保密性(为防止窃听而进行的消息加密)、完整性(用于检测消息篡改行为的方法)、身份验证(用于验证服务器和客户端的方法)以及授权(资源访问控制)。 通过利用现有安全机制(如 TLS over HTTP,也称为 HTTPS)或通过实现各种 WS-* 安全规范中的一个或多个规范,可以提供这些功能。

传输安全模式

传输安全模式指定由传输层机制(如 HTTPS)提供保密性、完整性和身份验证。 在使用像 HTTPS 这样的传输协议时,此模式的优点在于性能出色,而且由于它在 Internet 上非常流行,因此很容易理解。 其缺点在于,这种安全分别应用于通信路径中的每个跃点,这使得通信容易遭受中间人攻击。

消息安全模式

消息安全模式指定通过实现一个或多个安全规范来保证安全,如名为Web Services Security: SOAP Message SecurityWeb 服务安全:SOAP 消息安全)的规范。 每个消息都包含必要的安全机制,用于在消息传输过程中保证安全,并使接收方能够检测到篡改和对消息进行解密。 从这种意义上说,安全信息包装在每个消息中,从而提供了跨多个跃点的端到端安全。 由于安全信息成为消息的一部分,因此还可以在消息中包含多种凭据(这些凭据称为声明)。 这种方法还具有这样一个优点,即消息可以通过任意传输协议(包括在其起点和目标之间的多个传输协议)安全地传送。 这种方法的缺点在于所使用的加密机制较为复杂,使性能受到影响。

使用消息凭据的传输安全模式

此模式指定使用传输层来提供消息的保密性、身份验证和完整性,并且每个消息都可以包含消息接收方所要求的多个凭据(声明)

WS-* 一组不断增加的、在 WCF 中予以实现的 Web 服务 (WS) 规范(如 WS-SecurityWS-ReliableMessaging 等)的简写

 

WCF体系结构 

下图说明了 Windows Communication Foundation (WCF) 体系结构的主要层。

WCF体系结构

协定

协定定义消息系统的各个方面。 数据协定描述组成某一服务可创建或使用的每则消息的每个参数。 消息参数由 XML 架构定义语言 (XSD) 文档定义,这使得任何理解 XML 的系统均可处理该文档。 消息协定使用 SOAP 协议定义特定消息部分,当互操作性要求对消息的某些部分进行更精细的控制时,消息协定可实现这种控制。 服务协定指定服务的实际方法签名,并以支持的编程语言之一(例如 Visual Basic 或 Visual C#)作为接口进行分发策略和绑定规定与某一服务进行通信所需的条件。 例如,绑定必须(至少)指定所使用的传输(例如 HTTP 或 TCP)和编码。 策略包括安全要求和其他条件,必须满足这些要求和条件才能与服务进行通信

服务运行时

服务运行时层包含仅在服务实际运行期间发生的行为即该服务的运行时行为 遏制控制处理的消息数,如果对服务的需求增长到预设限制,该消息数则会发生变化。 错误行为指定服务出现内部错误时应采取的操作,例如控制传递给客户端的信息 (信息过多会向恶意用户提供攻击的机会)。元数据行为控制是否以及如何向外部提供元数据。 实例行为指定可运行的服务实例的数目(例如,singleton 指定只能用单一实例来处理所有消息)。 通过事务行为,可以在失败时回滚已进行事务处理的操作。 调度行为用于控制 WCF 基础结构处理消息的方式。通过扩展性功能可以自定义运行时进程。 例如,消息检查功能用于检查消息的各个部分,使用参数筛选功能可以根据作用于消息头的筛选器来执行预设操作。

消息传递

消息传递层由通道组成。 通道是以某种方式对消息进行处理(例如通过对消息进行身份验证)的组件。 一组通道也称为通道堆栈。 通道对消息和消息头进行操作。 这与服务运行时层不同,服务运行时层主要涉及对消息正文内容的处理。

有两种类型的通道:传输通道协议通道

传输通道读取和写入来自网络(或外部的某些其他通信点)的消息。 某些传输通道使用编码器来将消息(表示为 XML Infoset)转换为网络所使用的字节流的表示形式,或将字节流表示形式转换为消息。 传输通道的示例包括 HTTP、命名管道、TCP 和 MSMQ。 编码的示例包括 XML 和优化的二进制文件。

协议通道经常通过读取或写入消息的其他头的方式来实现消息处理协议。 此类协议的示例包括 WS-Security 和 WS-Reliability

消息传递层说明数据的可能格式和交换模式。 WS-Security 是对在消息层启用安全性的 WS-Security 规范的实现。 通过 WS-Reliable Messaging 通道可以保证消息的传递。 编码器提供了大量的编码,可使用这些编码来满足消息的需要。 HTTP 通道指定应使用超文本传输协议来传递消息。 同理,TCP 通道指定 TCP 协议。 事务流通道控制已经过事务处理的消息模式。 通过命名管道通道可以进行进程间通信。 使用 MSMQ 通道可以与 MSMQ 应用程序进行互操作。

承载和激活

 

服务的最终形式为程序。 与其他程序类似,服务必须在可执行文件中运行。 这称为自承载服务

某些服务(如 IIS 或 Windows 激活服务 (WAS)被承载,即在外部代理管理的可执行文件中运行。 通过 WAS,可以在运行 WAS 的计算机上部署 WCF 应用程序时自动激活该应用程序。 还可通过可执行文件(.exe 文件)的形式来手动运行服务。 服务也可作为 Windows 服务自动运行。 COM+ 组件也可作为 WCF 服务承载。

 

 

 

 

 

 

 

posted @ 2013-06-16 11:39  Halower  阅读(2403)  评论(2编辑  收藏  举报