一.服务端开拓

1.服务端开垦

Windows Communication Foundation (WCF) 是 Microsoft 为塑造面向服务的应用程序而提供的联结编制程序模型。借助那一模型,开拓人员能够营造既能跨平台与现存投资集成又能与现存投资交互的辽阳、可信的事务处理消除方案。上边将安份守己的学习WCF。

一.一 WCF服务成立格局

一.壹 WCF服务创制方式

1   术语

       
能够先跳过本节,回过头来阅读温习各术语的意义。

术语

定义

address(地址)

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

application endpoint(应用程序终结点)

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

behavior(行为)

行为是控制服务、终结点、特定操作或客户端的各种运行时特性的要素。行为按照范围进行分组:常见行为在全局范围内影响所有终结点,服务行为仅影响与服务相关的方面,终结点行为仅影响与终结点相关的属性,操作级行为影响特定操作。

binding(绑定)

定义用于与 WCF 服务进行通信的通信协议。它由一组称为绑定元素的要素构造而成,这些元素一个个地叠起来形成通信基础结构。请参见“终结点”。

channel(通道)

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

claims-based security(基于声明的安全性)

允许基于声明对受保护资源进行授权访问。

client application(客户端应用程序)

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

configuration(配置)

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

contract(协定)

协定是对其所属的特定协定类型的支持规范。例如,服务协定是一组操作的规范。在 WCF 中,协定具有一个层次结构,此结构在 System.ServiceModel.Description 命名空间的说明对象中进行了镜像。服务协定是 WCF 中最大的协定范围。服务协定中的每个服务操作都具有一个操作协定,用于指定该操作可以交换的消息(包括错误消息)以及交换的方向。操作中的每条消息都具有一个消息协定(即 SOAP 消息信封的结构规范),而每个消息协定又都具有一个数据协定,用于指定消息中包含的数据结构。

data contract(数据协定)

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

declarative application(声明性应用程序)

具有充分的描述以便无需运行命令性指令即可在运行时创建的应用程序。

endpoint(终结点)

包含一个地址、一个绑定和一个用于与 WCF 服务进行通信的协定。

endpoint address(终结点地址)

您可以为服务中的每个终结点均创建一个具有唯一性的终结点地址,还可以在一定的条件下跨多个终结点共享一个地址。

fault contract(错误协定)

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

hosting(宿主)

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

hosting process(宿主进程)

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

initiating operation(启动操作)

作为新会话的第一个操作而调用的操作。只有在已调用至少一个启动操作之后才可以调用非启动操作。

instancing model(实例化模型)

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

message(消息)

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

message contract(消息协定)

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

message security mode(消息安全模式)

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

metadata(元数据

服务的元数据描述服务的各种特征,外部实体需要了解这些特征以便与该服务进行通信。ServiceModel 元数据实用工具 (Svcutil.exe) 可以使用元数据生成 WCF 客户端以及客户端应用程序用来与服务进行交互的伴随配置。 服务所公开的元数据包括 XML 架构文档(用于定义服务的数据协定)和 WSDL 文档(用于描述服务的方法)。 启用元数据后,WCF 可通过检查服务及其终结点来自动生成服务的元数据。若要发布服务的元数据,必须显式启用元数据行为。

operation contract(操作协定)

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

projection(投影)

网络上的数据的表示形式。例如,SOAP 投影会作为 SOAP 信封发送消息;Web 投影会以 JSON 格式发送消息。

security(安全性)

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

self-hosted service(自承载服务)

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

service(服务)

公开一个或多个终结点的程序或进程,其中每个终结点都会公开一个或多个操作。

service contract(服务协定)

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

service operation(服务操作)

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

system-provided bindings(系统提供的绑定)

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

terminating operation(终止操作)

作为现有会话的最后一个消息而调用的操作。默认情况下,在关闭与服务相关联的会话之后,WCF 会回收服务对象及其上下文。

transport security mode(传输安全模式)

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

transport with message credential security mode(使用消息凭据的传输安全模式)

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

type converter(类型转换器)

CLR 类型可以与一个或多个 System.ComponentModel.TypeConverter 派生类型关联,这些派生类型使 CLR 类型的实例与其他类型的实例之间能够互相转换。类型转换器使用 System.ComponentModel.TypeConverterAttribute 特性与 CLR 类型相关联。可以在 CLR 类型或属性上直接指定 TypeConverterAttribute。在属性上指定的类型转换器始终优先于在属性的 CLR 类型上指定的类型转换器。

WCF client(WCF 客户端)

WCF 客户端是一个客户端应用程序构造,可将服务操作作为方法公开(使用所选的 .NET Framework 编程语言,如 Visual Basic 或 Visual C#)。任何应用程序都可以承载 WCF 客户端,包括承载服务的应用程序。因此,可以创建一个包含其他服务的 WCF 客户端的服务。 使用 ServiceModel 元数据实用工具 (Svcutil.exe) 并将其指向正在运行的元数据发布服务,可以自动生成 WCF 客户端。

workflow services(工作流服务)

工作流服务是作为工作流实现的 WCF 服务。工作流包含发送和/或接收 WCF 消息的消息传递活动。

WS-*

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

XAML

可扩展应用程序标记语言

XAML schema(XAML 架构)

在 XAML 中用于定义自定义类型的标记架构。

     
 创立贰个WCF服务,总是会创设一个劳务接口和1个劳务接口完结。日常根据劳动宿主的不一致,有二种成立形式。

     
 成立1个WCF服务,总是会成立3个劳动接口和二个劳动接口实现。平日依据服务宿主的不如,有三种创制方式。

2   元数据

元数据,metadata,用于描述要素、数据集或数量集体系的始末、覆盖范围、品质、管理措施、数据的主人、数据的提供格局等关于的信息,是一种二进制消息,元数据最本色、最抽象的定义为:data about data (关于数据的数量)。

元数据编码语言(Metadata Encoding Languages)指对元数据成分和结构进行定义和描述的切切实实语法和语义规则,常称为定义描述语言(DDL)。1些标准化的DDL,例如S威斯他霉素L和XML。

 

       (一)创立WCF应用程序

       (一)创立WCF应用程序

3   WCF概述

依靠 WCF,能够将数据作为异步音讯从贰个劳务终结点发送至另3个劳务终结点。新闻能够简简单单到作为 XML 发送的单个字符或单个单词,复杂信息能够是二进制数据流。

WCF 是二个灵活的平台。由于那一极强的油滑,WCF 还在 Microsoft 的片段其余产品中得以利用。

与 WCF 配对的第贰项技艺是 Windows Workflow Foundation (WF)。

Microsoft BizTalk Server 帕杰罗二 还选取 WCF 作为通讯技艺。

Microsoft Silverlight 是七个用来创立可互操作的、足够 Web 应用程序的平台,允许开辟人士创立媒体密集的网址(如流摄像)。从版本 二 起初,Silverlight 参加了 WCF 作为通讯能力,以将 Silverlight 应用程序连接到 WCF 终结点。

WCF 是一个运营时和1组 API,用于创建在劳动与客户端之间发送消息的系统。WCF 建立在依照音信的通信这一定义基础之上,消息在终结点之间发送。终结点是发送或接收音讯(或施行那三种操作)的场子,它们定义音信沟通所必要的兼具新闻。“终结点”以基于专业的章程讲述音讯应发送到的职位、音讯应什么发送以及音信应持有的样式。服务能够将这一个新闻作为元数据加以公开,而客户端能够拍卖这么些元数据以生成妥当的 WCF 客户端和通讯仓库。

通讯酒馆的一个必需成分是传输协议。能够利用常用传输协议(如 HTTP 和 TCP)通过 Intranet 和 Internet 发送音信。也能够运用其余协助与新闻队列应用程序和对等互连网网格上的节点开始展览通讯的传输协议。使用 WCF 的停放增添点能够增进愈多传输体制。通讯仓库中的另三个少不了因素是点名如何将随机给定音讯格式化的编码。WCF 提供了下列编码:

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

二、音讯传输优化机制 (MTOM) 编码,该编码是一种可互操作的秘技,用于高效地将非结构化贰进制数据发送到服务或从服务接受这一个多少。

三、用于落到实处急迅传输的二进制编码。

WCF 援救四种音信方式,包罗请求-回复、单向和双工通讯。分歧传输协议匡助分歧的音讯格局,因此会影响它们所协助的并行类型。

       
通过创办WCF服务应用程序,可生成1个带.svc后缀名的文件。该文件与webform中的aspx文件类似,有后置代码,这个前置代码是劳务接口的落实。这种艺术开创的WCF服务都承载在IIS或WAS上。

       
通过创办WCF服务应用程序,可生成三个带.svc后缀名的文件。该公文与webform中的aspx文件类似,有前置代码,那个后置代码是服务接口的落到实处。那种方法创制的WCF服务都承载在IIS或WAS上。

四   WCF 类别布局

=====================================================================================================================================================

图片 1

       (2)创建WCF服务库

       (2)创建WCF服务库

4.1  协定

协定定义音讯系统的各类方面。

数据协定描述组成某一劳动可成立或应用的每则音讯的各样参数。音信参数由 XML 架构定义语言 (XSD) 文书档案定义,这使得其余精晓 XML 的系统均可处理该文书档案。

消息协定使用 SOAP 协议定义特定音信部分,当互操作性须要对音讯的有些部分开始展览更加小巧的支配时,音信协定可达成那种操纵。

劳务协定钦赐服务的其实方法签字,并以匡助的编制程序语言之一(例如 Visual Basic 或 Visual C#)作为接口进行分发。

计策和绑定规定与某一劳务拓展通讯所需的规格。例如,绑定必须(至少)钦定所接纳的传输(例如 HTTP 或 TCP)和编码。计策包涵安全须要和其余条件,必须满意这一个须求和标准化手艺与服务拓展通讯。

       
 WCF服务库是叁个类库,如前所述包蕴叁个劳务接口和劳务达成,此种格局开创的WCF服务可依照要求寄宿在windows客户端、windows服务、调整台程序等宿主上。

       
 WCF服务库是2个类库,如前所述包罗多个劳务接口和劳动完毕,此种格局创立的WCF服务可依据须要寄宿在windows客户端、windows服务、调控台程序等宿主上。

四.二  服务运作时

劳动运维时层包括仅在劳动实际运作时期发生的作为,即该服务的运作时作为。

遏制调控处理的音信数,若是对服务的急需增加到预设置界限制,该新闻数则会发生变化。

错误行为钦点服务出现当中错误时应利用的操作,例如调整传递给客户端的音信(消息过多会向恶意用户提供攻击的空子)。

元数据表现调节是或不是以及哪些向外部提供元数据。

实例行为钦定可运维的服务实例的数据(例如,singleton 内定只可以用单1实例来处理全部音信)。通过职业行为,可以在战败时回滚已进行事务处理的操作。调度行为用于调整 WCF 基础结构处理新闻的法子。

由此增加性功用能够自定义运维时经过。例如,音讯检查职能用于检查新闻的11部分,使用参数筛选作用能够遵照效益于新闻头的筛选器来实施预设操作。

一.二 WCF服务的商议

一.二 WCF服务的合计

肆.三  音讯传递

新闻传递层由通道组成。通道是以某种格局对新闻实行处理(例如通过对信息实行身份验证)的零件。一组通道也称为“通道旅舍”。

大路对音讯和音讯头实行操作。那与劳务运作时层不一样,服务运维时层重要涉及对音讯正文内容的处理。

有三种档次的坦途:传输通道和协商通道。

传输通道读取和写入来自网络(或外部的一点其余通讯点)的音信。某个传输通道选取编码器来将音信(表示为 XML Infoset)调换为互联网所接纳的字节流的表示方式,或将字节流表示格局调换为消息。传输通道的言传身教包蕴 HTTP、命名管道、TCP 和 MSMQ。编码的示范包罗 XML 和优化的2进制文件。

合计通道平日通过读取或写入音信的别的头的措施来达成音信处理协议。此类协议的以身作则包罗 WS-Security 和 WS-Reliability。音讯传递层表明数据的也许格式和交换形式。WS-Security 是对在新闻层启用安全性的 WS-Security 规范的完成。通过 WS-Reliable Messaging 通道能够确认保障音讯的传递。编码器提供了汪洋的编码,可应用那一个编码来满足音讯的必要。HTTP 通道琼斯指数定应运用超文本传输协议来传递消息。同理,TCP 通道琼斯指数定 TCP 协议。事务流通道调控已透过事务处理的音讯格局。通过命名管道通道能够进行进程间通讯。使用 MSMQ 通道能够与 MSMQ 应用程序实行互操作。

     
 协定定义了服务端能够提供的效果和客户端能够应用的效果,它独自于劳动落成代码,可分为如下伍种协定类型。

     
 协定定义了服务端能够提供的功力和客户端能够使用的坚守,它独立于服务完毕代码,可分为如下八种协定类型。

4.4  承载和激活

劳动的末梢情势为顺序。与其余程序类似,服务必须在可施行文件中运作。那名为“自承载”服务。

少数服务(如 IIS 或 Windows 激活服务 (WAS))“被承载”,即在外部代理管理的可推行文件中运转。通过 WAS,能够在运行 WAS 的计算机上配置 WCF 应用程序时自动激活该应用程序。还可由此可实施文件(.exe 文件)的款式来手动运营服务。服务也可作为 Windows 服务活动运维。COM+ 组件也可看作 WCF 服务承载。

(壹)数据协定

(1)数据协定

5   WCF入门

先起来询问创制 WCF 服务和客户端应用程序所需的步骤,怎么着使用协定定义服务,怎样兑现劳务,以及哪些在代码中配置服务、承载服务和周转服务;怎么样创立客户端代理,怎么样布置客户端应用程序,以及怎样成立和行使能够访问服务成效的客户端。服务会发布能够访问的元数据,这一个数据定义了客户端应用程序与劳动操作进行通讯所需的构造。

       
首要用以定义在服务端和客户端之间传输的错综复杂数据类型。对复杂数据类型定义数据协定,首要适用于客户端与服务端共享协定程序集的图景,而假若客户端是增加引用的艺术来成立服务代办,则未须要尤其定义数据协定。数据协定的类用[DataContract]天性标志,其里面要连串化的个性必须用[DataMember]本性标志。

       
首要用于定义在服务端和客户端之间传输的扑朔迷离数据类型。对复杂数据类型定义数据协定,主要适用于客户端与服务端共享协定程序集的处境,而1旦客户端是加多引用的章程来成立服务代办,则未须求专门定义数据协定。数据协定的类用[DataContract]特点标识,其内部要系列化的习性必须用[DataMember]特点标志。

5.1  创建 WCF 服务

服务是一种结构,它公开1个或四个终结点,在那之中每一种终结点都公开1项或多项服务操作。服务的终结点钦命下列消息:服务所在的岗位;三个绑定,在那之中富含客户端必须与劳动实行通讯的新闻;二个立下,用于定义服务向其客户端提供的意义。

注:webservice选拔XML类别化,此种系列化只系列化公共字段和性能,因而如对复杂数据类型不专门定义数据协定,则会采用那种系列化情势。

注:webservice选用XML类别化,此种类别化只连串化公共字段和性质,由此如对复杂数据类型不越发定义数据协定,则会利用这种系列化格局。

5.一.1  定义 WCF 服务协定

创办基本 WCF 服务时,第2项职分是概念协定。协定钦命服务支持的操作。能够将操作视为二个 Web 服务章程。接口中的每种方法都对应于特定的服务操作。每种接口都不可能不将 ServiceContractAttribute 应用于小编,而各类操作都必须将 OperationContractAttribute 应用于自家。假设接口中的叁个办法具备 瑟维斯ContractAttribute 而并未有 OperationContractAttribute,则不领悟该格局。

一言九鼎步骤:

1、  添加System.ServiceModel.dll 的引用。

2、  导入System.ServiceModel 命名空间,using System.ServiceModel。

叁、  定义新接口(终结点的情商),如:

[ServiceContract(Namespace =
http://Microsoft.ServiceModel.Samples")\]

public interface ICalculator

{

}

肆、  为接口中立下公开的各种操作声贝拉米(Bellamy)(Nutrilon)个主意,并对希望作为公共 WCF 协定的一局地公开的种种方法应用 OperationContractAttribute 性子。如:

[OperationContract]

double Add(double n1, double n2);

[OperationContract]

double Subtract(double n1, double n2);

[OperationContract]

double Multiply(double n1, double n2);

[OperationContract]

double Divide(double n1, double n2);

 

(二)服务协定和操作立下

(二)服务协定和操作立下

伍.1.二  完毕 WCF 服务协定

始建使用接口定义的缔约,下一步骤是贯彻接口。

一、  定义一个达成接口的类(终结点的地点),也称为“在接口中宣示方法签字”。

public class CalculatorService : ICalculator

二、  在类中贯彻在接口中定义的每个方法,也叫做“应用于各种方法签字”。

public double Add(double n1, double n2)

{

    double
result = n1 + n2;

   
Console.WriteLine(“Received Add({0},{1})”, n1, n2);

    // Code
added to write output to the console window.

   
Console.WriteLine(“Return: {0}”, result);

    return
result;

}

       
 服务协定和操作立下是最关键的七个体协会定,创设3个WCF服务一定有那三个体协会定。

       
 服务协定和操作立下是最根本的多少个体协会定,成立三个WCF服务一定有那七个协定。

5.一.三  承载和运作宗旨的 WCF 服务

此进程包蕴以下步骤:

一、  为服务创制基址。为劳动的基址成立 Uri 实例。此 UHighlanderI 钦定 HTTP 方案、本地计算机、端口号 8000,以及劳动协定中为服务命名空间钦定的劳动路线,如:

Uri baseAddress =
new
Uri
(“http://localhost:8000/ServiceModelSamples/Service“);

贰、  承载服务。

(一)、导入 System.ServiceModel.Description 命名空间。

using System.ServiceModel.Description;

(二)、创立三个新的 ServiceHost 实例以承载服务。必须钦点实现劳务协定和基址的花色。

ServiceHost selfHost = new
ServiceHost
(typeof(CalculatorService), baseAddress);

(三)、增加一个破获 CommunicationException 的 try-catch 语句,并在接下去的四个步骤师长该代码增加到 try 块中。catch 子句应该展现错误音讯,然后调用 selfHost.Abort()。

try

{

    //

}

catch (CommunicationException ce)

{

   
Console.WriteLine(“An exception occurred: {0}”,
ce.Message);

    selfHost.Abort();

}

(四)、增多公开服务的终结点。必须钦赐终结点公开的协议、绑定和终结点的地点。对于此示例,将 ICalculator 内定为协定,将 WSHttpBinding 钦定为绑定,并将 CalculatorService 钦定为地点。在那边请留意,终结点地址是争论地址。

selfHost.AddServiceEndpoint(typeof(ICalculator),

new
WSHttpBinding()
,  “CalculatorService”);//
CalculatorService终结点的地点

终结点的总体地址是基址和终结点地址的三结合。

在此例中,完整地址是
http://localhost:8000/ServiceModelSamples/Service/CalculatorService。

(5)、启用元数据调换。为此,增多服务元数据表现。首先创设3个 瑟维斯MetadataBehavior 实例,将 HttpGetEnabled 属性设置为 true,然后为服务加多新行为。如:

ServiceMetadataBehavior smb = new
ServiceMetadataBehavior()
;//实例化服务元数据表现

smb.HttpGetEnabled =
true;//设置HttpGetEnabled 属性

selfHost.Description.Behaviors.Add(smb);//
为服务增添新作为

       (五)、展开 ServiceHost 并等待传入音信。

       
 服务协定用于定义描述了劳务的WSDL,它壹般为3个接口(也得以为三个类),用[ServiceContract]特征标明。操作立下在劳务协定里面,定义了劳动的操作,并用[OperationContract]特征标明。

       
 服务协定用于定义描述了劳动的WSDL,它一般为二个接口(也得感觉3个类),用[ServiceContract]特点标明。操作立下在劳务协定里面,定义了劳动的操作,并用[OperationContract]特征标明。

5.贰  成立 WCF 客户端及代理

一、为品种增加对 System.ServiceModel.dll 的引用。

二、导入System.ServiceModel 命名空间。

三、生成服务的代码文件和布局文件。例如:

(一)、在 Visual Studio 中,按 F5 运行在前边的主题中开创的劳动。

(2)、在“开端”菜单上,单击“全体程序”,然后单击“Visual Studio 2010”。单击“Visual Studio 工具”,然后单击“Visual Studio 20十 命令提醒”。

(三)、导航到要放置客户端代码的目录。

(四)、运用命令行工具ServiceModel元数据实用工具 (Svcutil.exe)生成服务的代码文件和布署文件。/out 开关会将客户端代理文件的名目更换为 GeneratedProxy.cs。/config 按钮会将客户端配置文件的名号从暗中同意的 Output.config 改换为 App.config。

图片 2 

(伍)、将客户端代理代码文件包含在品种中。

         ServiceContract和OperationContract有多少个比较关键的性质,如下

         ServiceContract和OperationContract有多少个相比较根本的属性,如下

5.3  创制 WCF 客户端实例

(1)创设客户端代理实例。

CalculatorClient client = new CalculatorClient();

(二)从扭转的代理调用服务操作。

double value1 = 100.00D;

double value2 = 15.99D;

double result = client.Add(value1, value2);

(三)关闭客户端代理实例。

client.Close();

测试:按F伍开首service项目,在化解方案中右击client项目,接纳“调节和测试”\“运维新实例”。

协 定

协 定

五.四  代码示例

WCFSample.zip

属 性

属 性

6   基本 WCF 编程

前方学习了WCF的入门,今后读书1些创办WCF应用程序的基础知识。

布署和兑现劳务,正是何等定义和落实 WCF 协定。服务协定钦命终结点与外场通讯的始末,正是概念二个或八个的接口。更具体地说,它是关于一组特定信息的宣示,那几个新闻被协会成中央音讯调换情势 (MEP),如请求/答复、单向和双工。假设说服务协定是壹组在逻辑上有关的音信交流,那么服务操作便是单个讯息沟通。

描 述

描 述

陆.壹  设计服务协定

劳务即1组操作。若要创征服务协定,必须对操作建立模型并钦定其分组。在 WCF应用程序中,通过创制3个措施并采纳 OperationContractAttribute 属性对其张开标识来定义操作。然后,若要创造服务协定,需求将操作结合到共同,具体方法是在选取 瑟维斯ContractAttribute 属性标志的接口中宣示那几个操作,或在应用同壹属性进行标志的类中定义它们。

简短的说,定义协定,正是概念接口,再定义类去贯彻接口中的操作。

可是,也能够选用类来定义服务协定,并同时得以实现该协定。能够经过直接向类和类上的措施分别采纳 瑟维斯ContractAttribute 和 OperationContractAttribute 来创建服务,那种办法的独到之处是一点也不慢且方便。缺点是托管类不扶助七个持续,因而,二回只可以兑现1个劳动协定。

种种操作都有贰个再次回到值和1个参数,固然它们为 void。参数或重回值中采纳的各类品种都必须是可种类化的,换言之,该项指标目的必须能够转移为字节流,并可以从字节流转变为目的。

面向服务的应用程序(例如(WCF) 应用程序)设计为与 Microsoft 平台和非 Microsoft 平台上的最大大概数量的客户端应用程序举行互操作。为了获取最大大概的互操作性,提出你使用 DataContractAttribute 和 DataMemberAttribute 属性对您的花色实行标识,以创立数量协定。数据协定是劳动协定的一片段,用于描述您的劳务操作交流的多少。

WCF 编制程序模型中内定二种音讯沟通格局:请求/答复、单向和双工音讯情势。这几个调换情势是本着操作(OperationContract)来定义的。

ServiceContract

ServiceContract

陆.一.1  请求/答复协定

OperationContractAttribute 类和 IsOneWay 属性为False(暗中同意值为False)时,表示为呼吁/答复格局。

在WCF入门中做的勤学苦练,是依据“新建ServiceHost实承载服务—>定义终节点—>增多服务元数据作为”步骤进行的,做那1部分的勤学苦练时,遭遇贰个主题素材。在创立好三个简易的service后,用svculit工具生成客户端用的配置文件和次序代理文件时,不成功。原来,在此番练习中,笔者漏掉了

ServiceMetadataBehavior smb = new
ServiceMetadataBehavior();

smb.HttpGetEnabled = true;

sh.Description.Behaviors.Add(smb);

那某个代码,补上就能胜利使用svculit工具了。生成了客户端配置文件及代理程序文件后,上述代码其实能够注释掉了,服务照常能访问。

//Uri uri = new
Uri(“http://localhost:8010/ServiceModelSample/service“);

ServiceHost sh = new ServiceHost(typeof(CalculatorService));

//sh.AddServiceEndpoint(typeof(ICalculator), new
WSHttpBinding(), “CalculatorService”);

//***上面那段代码创立元数据作为实例,用于svcutil工具生成客户端代理及配置文件用

//ServiceMetadataBehavior smb = new
ServiceMetadataBehavior();

//smb.HttpGetEnabled = true;

//sh.Description.Behaviors.Add(smb);

//***

sh.Open();

上述贴出了此次演练中谈到劳动的代码,其团长终节点部分注释掉了,包含元添扩张少作为,也能动用svculit工具及服务走访,因为在劳务器端使用了app.config,下一节将对服务器端的配备文件结构进行辨析。

SessionMode

SessionMode

6.1.2  WCF服务app.config

<system.serviceModel>

    <!–For
debugging purposes set the includeExceptionDetailInFaults attribute to
true–>

   
<behaviors>

     
<serviceBehaviors>

       
<behavior name=”CalculatorServiceBehavior”>//必须定义三个behavior

         
<serviceMetadata
httpGetEnabled=”True”/>//元数据属性

         
<serviceDebug
includeExceptionDetailInFaults=”False”/>

       
</behavior>

     
</serviceBehaviors>

   
</behaviors>

   
<services>

     
<service name=”WCF_Contract_Sample_Service.CalculatorService”
behaviorConfiguration=”CalculatorServiceBehavior“>

//内定服务名称,与贯彻WCF服务协定所定义的类名1致,日常要带上命名空间名。

//与serviceBehaviors中定义的behavior同名

       
<host >

         
<baseAddresses >

           
<add baseAddress
=”http://localhost:8010/ServiceModelSample/service"/&gt;//必须指定服务uri

         
</baseAddresses>

       
</host>

       
<endpoint

address=”” binding=”wsHttpBinding” contract=”WCF_Contract_Sample_Service.ICalculator”>

//必须定义三个endpoint,且contract为定义的劳动协定,平日要带上命名空间名。

       
</endpoint>

     
</service>

    </services>

  </system.serviceModel>

有上述的布局,就足以用简易的两行代码聊到劳动:

ServiceHost sh = new ServiceHost(typeof(CalculatorService));

sh.Open();

概念该服务协定是不是允许有对话,其值用SessionMode枚举定义,包括Allowed、NotAllowed、Required。

概念该服务协定是不是同意有对话,其值用SessionMode枚举定义,包括Allowed、NotAllowed、Required。

陆.1.三  通过app.config来承载运行服务的言传身教

WCF_Contract_Sample.zip

OperationContract

OperationContract

陆.1.4  单向协定

在六.一.第11中学定义的是双向协定,
IsOneWay缺省值就是false。

[OperationContract(IsOneWay=false )]

double Add(double x, double y);

万壹将上述代码IsOneWay=true,则会报“使用 IsOneWay=true 标志的操作不得声明输出参数、引用参数或再次来到值。”的错误。

能够如此来精通单向协定,就是往服务器送数据,未有重返值。日常要为重返 void 的操作钦定单向音信调换,将 IsOneWay 属性设置为 true。

IsOneWay

IsOneWay

陆.壹.5  通过svc和web.config来承载运转服务

本身通过示范来学习本节内容。此示例来自微软公布的WF_WCF_Samples\WCF\Basic\Contract\Service\Session\CS\
Session.sln来学习,WF_WCF_Samples示例能够在微软的网址上下载。可经过链接WCF_Session_Sample.zip下载这次练习。

在此以前笔者读书了经过代码在调控台上承前启后服务来形成演习,也学习了经过服务端使用app.config配置文件在调整台上承前启后服务来成功演习。但调节台程序繁多都采用于演练,有用调控台程序来支付产品级服务的,本示例起开首用类库来承载服务。在此之前学习的WF_WCF_Samples中的示例,服务的address都是指向IIS中配置的虚拟目录ServiceModelSamples,此虚拟目录可以手工业创造,所在站点须求选用Asp.net 四.0使用程序池。这一次示例起,因为运用了类库来承载服务,须要将虚拟目录瑟维斯Model萨姆ples“转变为应用程序”,不然服务不能访问,提示“由于编写翻译进程中出现非常,不能够激活服务”。

在弹指间service类库的属性,在“生成事件”标签,“后期生成事件命令行”处,有几行代码:

mkdir
%SystemDrive%\inetpub\wwwroot\servicemodelsamples

mkdir
%SystemDrive%\inetpub\wwwroot\servicemodelsamples\bin,表示假诺未有此目录将开创。

copy “$(TargetDir)service.dll”
%SystemDrive%\inetpub\wwwroot\servicemodelsamples\bin

表示会将转换的dll拷贝到站点。

copy “$(ProjectDir)service.svc”
%SystemDrive%\inetpub\wwwroot\servicemodelsamples

意味着会将svc文件拷贝到站点目录下。

copy “$(ProjectDir)web.config”
%SystemDrive%\inetpub\wwwroot\servicemodelsamples

意味着会将web.config拷贝到站点目录下。

如此那般,不论大家将示例计划在职分目录,都得以正确访问到服务地点。建议将地面包车型大巴80端口对应的站点,使用asp.net 肆.0的应用程序池,配置ServiceModelSamples应用程序目录。

是不是单向操作,单向操作时,客户端不会等待服务端的回复,1般可用来无再次回到值的操作。

是或不是单向操作,单向操作时,客户端不会等待服务端的答问,一般可用来无重临值的操作。

6.1.5.1   Svc文件

能够通过右击类库,增加\新建项,选拔文本文件,将名称命为service.svc的格局为服务创设 .svc 文件。.svc 文件的最广泛语法如以下语句所示:

<% @ServiceHost
Service
=”MyNamespace.MyServiceImplementationTypeName”
%>

//命名空间名+完结协定的类名

IsInitiating

IsInitiating

6.1.5.2   Web.config文件

<system.serviceModel>

   
<protocolMapping>

      <add
scheme=”http” binding=”wsHttpBinding” />

   
</protocolMapping>

   
<bindings>

      <!–
configure a binding that support a session –>

     
<wsHttpBinding>

       
<binding>

         
<reliableSession enabled=”true” />

       
</binding>

     
</wsHttpBinding>

   
</bindings>

    <!–For
debugging purposes set the includeExceptionDetailInFaults attribute to
true–>

   
<behaviors>

     
<serviceBehaviors>

       
<behavior>

         
<serviceMetadata httpGetEnabled=”True”/>

         
<serviceDebug includeExceptionDetailInFaults=”False”
/>

       
</behavior>

     
</serviceBehaviors>

   
</behaviors>

 
</system.serviceModel>

本示例中的配置项,比那前的以身作则中的app.config中的项要简单些,仅定义了protocolMapping、bindings、serviceBehaviors,并不曾host、endpoint部分。

眼下操作是还是不是运行叁个新会话。

当下操作是不是运营多少个新会话。

6.1.5.3   ServiceContract的SessionMode属性

取得或设置是还是不是同意、不容许或要求会话。使用 SessionMode 属性来供给在终结点之间帮衬会话的绑定。
会话就是将要多少个或四个终结点之间沟通的音信集相互关系的主意。
若是您的劳动接济信道会话,则可以应用 InstanceContextMode 属性钦点您的服务协定达成实例与信道会话实例之间的关系。

譬如,假使将 SessionMode 属性设置为 SessionMode.Required 并将 InstanceContextMode 属性设置为 PerSession,则客户端将采用同样的总是重复调用同三个劳务指标。换个方法来通晓,就是会以新的实例创立服务指标。

成员名称

说明

Allowed

指定当传入绑定支持会话时,协定也支持会话。

Required

指定协定需要会话绑定。 如果绑定并未配置为支持会话,则将引发异常。

NotAllowed

指定协定永不支持启动会话的绑定。

要是你的劳动支持会话,则能够采纳 ServiceBehaviorAttribute.InstanceContextMode 属性钦命您的服务协定完毕实例与通道会话之间的涉及。

IsTerminating

IsTerminating

6.1.5.4   ServiceBehavior的InstanceContextMode 属性

获得或安装提示新劳动对象曾几何时创设的值。暗许值
PerSession 会构造服务应用程序,以在客户端和服务应用程序之间成立新的通信会话时,成立新的劳务指标。
同样会话中的后续调用由同三个指标处理。

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]

    public class CalculatorService : ICalculatorSession

成员名称

说明

PerSession

为每个会话创建一个新的 InstanceContext 对象。

PerCall

新的 InstanceContext 对象在每次调用前创建,在调用后回收。 如果信道未创建会话,则该值的行为就如同 PerCall 一样。

Single

只有一个 InstanceContext 对象用于所有传入呼叫,并且在调用后不回收。 如果服务对象不存在,则创建一个。

ServiceBehavior,服务行为,是运用于贯彻劳务协定的类定义上。

日前操作是还是不是关闭对话。

当下操作是还是不是关闭对话。

陆.一.5.5   Session示例解析

劳动中的代码:

[ServiceContract(Namespace=”http://Microsoft.Samples.Session“,
SessionMode=SessionMode.Required)]

    public interface ICalculatorSession//定义服务协定(接口)

    {

       
[OperationContract(IsOneWay=true)]//单向

       
void Clear();

           
……

       
[OperationContract]//有重回值

       
double Result();

    }

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]

    public class CalculatorService : ICalculatorSession//实现接口

    {

       
double result = 0.0D;

 

       
public void Clear()//实现操作

       
{

           
result = 0.0D;

       
}

 

       
public void AddTo(double n)
//达成操作

       
{

           
result += n;

       
}

       
……

        public double Result()//完结操作,再次回到结果

       
{

           
return result;

       
}

    }

客户端代码:

static void Main()

       
{

           
CalculatorSessionClient client = new
CalculatorSessionClient();//创制代理类访问实例

           
client.Clear();//清0

            client.AddTo(100.0D);//加100

           
client.SubtractFrom(50.0D);//减50

           
client.MultiplyBy(17.65D);//乘

           
client.DivideBy(2.0D);//除

           
double result = client.Result();//再次回到总结结果

           
Console.WriteLine(“(((0 + 100) – 50) * 17.65) / 2 = {0}”,
result);

}

大家能够通过在IE中走访http://localhost/ServiceModelSamples/service.svc,来查看服务。

按F5运行client,结果为: (((0+100)-50)*17.65)/2=441.25。

在不停歇刚运转的client的情景下,大家再推行WCF\Basic\Contract\Service\Session\CS\client\bin\client.exe,展现的结果同上。

将client.Clear();那行注释掉,获得一致的结果,因为使用了PerSession,建立新的通讯会话时,成立新的劳动对象。InstanceContextMode=InstanceContextMode.PerSession。

倘诺将client.Clear();那行注释掉,将PerSession改为Single,

按F5运行client,结果为:(((0+100)-50)*17.65)/2=441.25。

甘休运维,再按F伍运营,结果为:
 (((0+拾0)-50)*17.65)/2=4335.28125

表达了Single格局下,唯有叁个上下文实例在响应客户端请求,且调用后不会回收。

 

 

六.1.陆  双工协定

双工协定使得客户端和服务器能够单独地相互通讯,那样两边都足以运维对另1方的呼叫。双工协定由客户端和服务器之间的七个单向协定组成,并且不需求艺术调用是相关的。当服务必须向客户端询问更多消息或在客户端上显式引发轩然大波时,可选用那种协定。

创建双工协定,其实正是在劳务器端即开立调用接口,更创办回调接口,在客户端完结回调接口。通常经过为:

1、服务器端创立协定,使用SessionMode和CallbackContract 属性,获取或设置当协定为双工协定期的回调协定类型。例如:CallbackContract=typeof(ICalculatorDuplexCallback)。

SessionMode 枚举:内定可用来提示扶助签订需求或支撑的笃定会话的值。

双工协定,需求扶助会话状态的绑定,即要在ServiceContract中加属性“SessionMode = SessionMode.Required”。

2、服务器端成立回调接口,如:public interface ICalculatorDuplexCallback{}

三、服务器端定义类,实现接口中的各操作。

贯彻接口类中须要用到OperationContext.GetCallbackChannel<T> 方法:获取调用当前操作的客户端实例的大路。

例如:ICalculatorDuplexCallback callback = null;

callback =
OperationContext.Current.GetCallbackChannel<ICalculatorDuplexCallback>();

双工协定供给运用到的binding的品种为“wsDualHttpBinding”:

<protocolMapping>

                    
<add scheme=”http” binding=”wsDualHttpBinding” />

             
</protocolMapping>

四、  客户端应用 ServiceModel 元数据实用工具 (Svcutil.exe) 为客户端生成协定(接口)。

运用 Svcutil.exe 下载元数据文书档案时,参数url是点名到提供元数据的劳动终结点或到共同承载的元数据文档的 U帕JeroL。本节应用的以身作则此参数应钦点为:

http://localhost/servicemodelsamples/service.svc。

5、  在客户端类中完结回调接口。如:public class CallbackHandler :
ICalculatorDuplexCallback{}

六、  创立 InstanceContext 类的三个实例。

7、  使用须求 InstanceContext 对象的构造函数创立 WCF 客户端的3个实例。

八、  依据须求调用 WCF 客户端的方法。

(三)新闻协定

(3)新闻协定

陆.一.陆.1   双工协定示例

WCF_Duplex_Sample.zip是一个很好的使用 WCF 客户端访问服务的示范。

       
能够钦赐传输的多少哪些是身处soap的标题中,哪些是在正文中。新闻协定的数据类用[MessageContract]标明,类中位居soap题目和正文中的成员用[MessageHeader]和[MessageBodyMember]标明。

       
能够钦赐传输的数量哪些是身处soap的题目中,哪些是在正文中。音讯协定的数目类用[MessageContract]标明,类中位居soap标题和正文中的成员用[MessageHeader]和[MessageBodyMember]标明。

陆.一.7  在劳务协定中钦赐数量传输

能够将 WCF 视为一种信息传递基础结构。服务操作可以接过消息、处理信息以及发送新闻。新闻是应用操作立下描述的。例如,分析以下协定:

[ServiceContract]

public interface IAirfareQuoteService

{

   
[OperationContract]

    float
GetAirfare(string fromCity, string toCity);//再次来到两都市间的机票价

}

此地,GetAirfare 操作接受了三个包蕴关于 fromCity 和 toCity 的音讯的新闻,然后回到三个含有三个数字(机票价)的音信。

讲述音信的最简便方法是运用参数列表和重临值。在上边包车型客车演示中,fromCity 和 toCity 字符串参数用于描述请求新闻,浮点型重回值用于描述答复音信。若是再次来到值本身不足以描述答复音讯,则能够利用
out 参数。例如,上面包车型客车操作在其请求新闻中涵盖 fromCity 和 toCity,在其回复音讯中包涵三个数字和一种货币。

[OperationContract]

float GetAirfare(string fromCity, string toCity, out
string currency);

讲述传递的消息,还有不少种方法,详细请参见:

http://msdn.microsoft.com/zh-cn/library/ms732038.aspx

(四)错误协定

(四)错误协定

6.1.8  使用 XmlSerializer 类

WCF能够运用二种分化的种类化本事将应用程序中的数据转变为在客户端和服务时期展开传输的 XML,此进度称为体系化。DataContractSerializer 为暗中认可体系化程序。

WCF 还扶助 XmlSerializer 类。XmlSerializer 类不是 WCF 的专用类。ASP.NET Web 服务同样运用该类作为类别化引擎。Xml塞里alizer 类支持的项目少于 DataContractSerializer 类协理的品种,但它同意对转移的 XML 实行更加多的决定,并且支持越来越多的 XML 框架结构定义语言 (XSD) 标准。

       
暗中认可意况下,为了安全性,在服务端出现的一无所长不回来客户端,但也足以把带有有用音信的失实再次来到给调用者。若要将错误重回客户端,可在webConfig少校serviceDebug小节的includeExceptionDetailInFaults属性设为true。强类型化的soap错误协定能够用数据协定定义,并在对应操作立下中用[FaultContract]特色标明,并在该性子的性质中标明错误的类别。

       
暗许情状下,为了安全性,在服务端出现的不当不回去客户端,但也得以把带有有用信息的荒唐重临给调用者。若要将错误重临客户端,可在webConfig司令员serviceDebug小节的includeExceptionDetailInFaults属性设为true。强类型化的soap错误协定能够用多少协定定义,并在相应操作立下中用[FaultContract]特征标明,并在该性子的特性中标明错误的档次。

陆.①.玖  对数码举行流处理

若要对数据开始展览流处理,服务的 OperationContract 必须知足三个必要:

a.保留要开始展览流处理的多少的参数必须是方法中的唯1参数。例如,若是要对输入音信进行流处理,则该操作必须正好具备1个输入参数。一样,要是要对输出新闻进行流处理,则该操作必须正好具备三个出口参数或2个重返值。

b.参数和重回值的类型中至少有3个务必是 Stream, Message 或 IXmlSerializable。

例如:

[ServiceContract(Namespace =
http://Microsoft.ServiceModel.Samples")\]

public
interface
IStreamingSample

{

    [OperationContract]

    Stream GetStream(string data);

    [OperationContract]

    bool UploadStream(Stream stream);

    [OperationContract]

    Stream EchoStream(Stream stream);

    [OperationContract]

    Stream GetReversedStream();

}

图片 3

图片 3

陆.一.10  创立类或组织的为主数据协定

通过将 DataContractAttribute 属性应用于类来声称该品种具有数据协定。通过将 DataMemberAttribute 属性 (Attribute) 应用于每种成员来定义要体系化的积极分子(属性 (Property)、字段或事件)。
那几个分子称为数据成员。例如:

using System;

using
System.Runtime.Serialization
;

 

[DataContract]

public class Person

{

    // This
member is serialized.

    [DataMember]

    internal string FullName;

 

    // This is
serialized even though it is private.

    [DataMember]

    private int Age;

 

    // This is
not serialized because the DataMemberAttribute

    // has not
been applied.

    private string MailingAddress;

 

    // This is
not serialized, but the property is.

    private string
telephoneNumberValue;

 

    [DataMember]

    public string TelephoneNumber

    {

       
get { return telephoneNumberValue; }

       
set {
telephoneNumberValue = value; }

    }

}

1.三 WCF服务宿主

一.叁 WCF服务宿主

6.1.1一  在立下和劳务中钦定和处理错误

在根据 SOAP 的应用程序(如 WCF 应用程序)中,服务格局运用 SOAP 错误音信来传递处理错误音信。别的,由于 SOAP 错误在客户端以 XML 格式表示,那是1种别的 SOAP 平台上的客户端都可以采取的具备极好的互操作性的花色系统,可扩展 WCF 应用程序的适用范围。

发送到客户端的其余托管卓殊音信都不可能不在劳务上从这些转变为 SOAP 错误,并在 WCF 客户端中从 SOAP 错误调换为不当卓殊。

暂不详细学习那部分,供给时参见:http://msdn.microsoft.com/zh-cn/library/ms733721.aspx

        WCF的劳务宿主相比丰富,能够是WAS(Windows Activation
Service,Windows激活服务)、IIS、Windows应用程序、Windows服务、调节台应用程序等。

        WCF的劳务宿主相比较丰盛,能够是WAS(Windows Activation
Service,Windows激活服务)、IIS、Windows应用程序、Windows服务、调整台应用程序等。

7   Word版下载

学习05:WCF基础.zip

WCF就先读书这一个基础知识吧,接下去,小编急需安排转入MVC的求学了。

在开立WCF服务时,若创造的是WCF应用程序,则其劳动后缀名带.svc,其宿主为IIS或WAS。若创设的是WCF服务库,则其经超过实际例化瑟维斯Host,并调用其指标的open()方法,能够借宿在任意宿主上,且其相关绑定、端点等计划能够用写代码实现(给ServiceHost对象属性赋值),而不用在webConfig中开始展览安顿()。 
     

在开创WCF服务时,若创设的是WCF应用程序,则其劳动后缀名带.svc,其宿主为IIS或WAS。若创造的是WCF服务库,则其经超过实际例化ServiceHost,并调用其指标的open()方法,能够借宿在任意宿主上,且其皮之不存毛将焉附唇亡齿寒绑定、端点等安顿能够用写代码实现(给ServiceHost对象属性赋值),而不用在webConfig中举办安插()。 
     

一.4 WCF服务的服务端配置文件

一.4 WCF服务的服务端配置文件

     
 WCF服务端和客户端的布局都得以在其应用程序配置文件的“system.serviceModel”小节。该小节下的安排项重大由bindings、behaviors和services,在那之中bindings和behaviors是为services小节服务的。

     
 WCF服务端和客户端的铺排都足以在其应用程序配置文件的“system.serviceModel”小节。该小节下的布局项首要由bindings、behaviors和services,在那之中bindings和behaviors是为services小节服务的。

(1)bindings

(1)bindings

   bindings小节用来定义绑定,所定义的绑定可增加到service的endpoint小节的bindingConfiguration属性中。当然,该节也能够一贯去掉,因为.net预订义了一些绑定,所以endpoint小节中一向动用那么些预约义的绑定就能够了。

   bindings小节用来定义绑定,所定义的绑定可增添到service的endpoint小节的bindingConfiguration属性中。当然,该节也足以直接去掉,因为.net预订义了有个别绑定,所以endpoint小节中央直机关接行使这么些预订义的绑定就足以了。

图片 5

图片 5

(2)behaviors

(2)behaviors

     
 behaviors小节可定义客户端是还是不是允许通过丰硕引用获取元数据,服务端报错开上下班时间,客户端是还是不是也同意看到报错等。

     
 behaviors小节可定义客户端是否同意通过丰盛引用获取元数据,服务端报错开上下班时间,客户端是还是不是也同意看到报错等。

图片 7

图片 7

 

 

(3)services

(3)services

   
  services小节定义了所提供的劳动,其下得以有八个service,各样service下首要有八个子节点:host和endpoint。host可定义服务的集散地址,且假若服务要援救三种传输协议以来,也足以有多个营地址。服务端点须要配置服务的相对地址、绑定和服务协定(借使定义了万分的绑定和行事,则还需将那个特种的绑定和表现加进去)。而只要服务是自宿主的话,还需另加3个mex端点,用来客户端获取元数据。

   
  services小节定义了所提供的服务,其下得以有多少个service,各种service下首要有八个子节点:host和endpoint。host可定义服务的营地址,且如若服务要辅助多样传输协议以来,也足以有八个营地址。服务端点需求配置服务的相对地址、绑定和服务协定(尽管定义了新鲜的绑定和行事,则还需将这一个尤其的绑定和表现加进去)。而假设服务是自宿主的话,还需另加四个mex端点,用来客户端获取元数据。

图片 9

图片 9

   
 *Wcf的配备,除了手动在应用程序的安插文件里安插外,VS还专程提供了3个可视化学工业具(WCF服务配置编辑器,在工具菜单下)来举办布局。

   
 *Wcf的安排,除了手动在应用程序的安排文件里陈设外,VS还特地提供了一个可视化学工业具(WCF服务配置编辑器,在工具菜单下)来张开配置。

二.客户端开采

二.客户端开荒

二.1 客户端引用

二.一 客户端引用

     
客户端通过生成WCF服务的代理,来调用服务所提供的有的艺术。客户端生成代理的办法有三种:

     
客户端通过生成WCF服务的代理,来调用服务所提供的部分艺术。客户端生成代理的艺术有三种:

   
 (壹)通过获得wsdl生成代理类:客户端通过vs增添引用,去做客服务端的WSDL文书档案,并扭转3个代理类。 
    

   
 (1)通过取得wsdl生成代理类:客户端通过vs加多引用,去做客服务端的WSDL文书档案,并转移3个代理类。 
    

   
 (二)通过共享协定程序集生成代理:客户端引用服务协定的程序集,通过使用La PrairieFactory<TLancome>类写代码来扭转服务代办,从而调用服务的方法。雅诗兰黛Factory<TLancome>类的构造函数要求传绑定消息和端点地址来拓展实例化并创设信道,服务用完后,其指标还要调用close()方法关闭信道。

   
 (二)通过共享协定程序集生成代理:客户端引用服务协定的程序集,通过行使雅诗兰黛Factory<TLa Prairie>类写代码来变化服务代办,从而调用服务的办法。NO奥迪Q7MAN NORELLFactory<T伊Lisa白·雅顿>类的构造函数要求传绑定新闻和端点地址来开展实例化并成立信道,服务用完后,其目的还要调用close()方法关闭信道。

图片 11

图片 11

2.2 客户端配置

二.2 客户端配置

     
客户端需配置3个与服务端保持一致的端点(在client小节下),端点中需配备的属性包含劳动位置、服务绑定、服务协定等。

     
客户端需配置二个与服务端保持1致的端点(在client小节下),端点中需安顿的习性包罗服务地点、服务绑定、服务协定等。

 

 

 

 

 

 

        

        

相关文章