WCF系列一完全不使用配置文件构建和使用WCF服务

合集下载

WCF系列一完全不使用配置文件构建和使用WCF服务

WCF系列一完全不使用配置文件构建和使用WCF服务

只使用代码而不用配置文件的情况不适合IIS为宿主的情况,IIS宿主必须使用配置文件配置WCF的ServiceHost。

1、服务端1.1.准备Contract和实现Contract的服务很简单的一个Contract(Interface)和实现这个Contract(实现这个接口的类)的服务。

这是VS2005中使用add new item,选WCF Service后自动生成的一个模板例子服务代码。

1.2.建立ServiceHost一般使用public ServiceHost(Type serviceType, params Uri[] baseAddresses)构造方法建立ServicesHost。

参数:Type serviceType -- 为实现了某些Contract的类的类型,为这个服务主机要host的服务。

params Uri[] baseAddresses -- 为任意数量的baseAddress。

一个ServiceHost内只能驻留一个Service类,但是这个Service类可以实现多个Contract,每个Contract都能通过一个或多个(不同的bind)Endpoint向客户端暴露。

1.3.给ServiceHost添加EndpointEndpoint是直接暴露给客户端就行通讯的接口,经典的一个Endpoint可以用ABC来描述,即address –这个Endpoint对外的访问地址,binding –这个Endpoint是通过什么样的通讯手段暴露给客户端的,Contract -- 这个Endpoint对外暴露的是哪个Contract。

通过两个方法给ServiceHost添加EndpointServiceHost.AddServiceEndpoint AddServiceEndpoint方法有8种重载,ServiceHost提供了四种:ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, string address);ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, Uri address);ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, string address, Uri listenUri);ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, Uri address, Uri listenUri);ServiceHost的父类ServiceHostBase也提供了四种:ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, string address);ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, Uri address);ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, string address, Uri listenUri);ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, Uri address, Uri listenUri);其中参数implementedContract为Contract的完全名称,即名称空间.类名。

VisualStudio2019使用WCF服务

VisualStudio2019使用WCF服务

VisualStudio2019使⽤WCF服务什么是WCFWindows Communication Foundation (WCF) 是⼀个框架,⽤于⽣成⾯向服务的应⽤程序。

它取代了较旧的进程间通信技术,例如 ASMX Web 服务、.NET 远程处理、企业服务 (DCOM) 和 MSMQ。

WCF 将所有这些技术的功能汇集在⼀个统⼀的编程模型下,简化了开发分散式应⽤程序的体验。

使⽤ WCF,可以将数据作为异步消息从⼀个服务终结点发送到另⼀个服务终结点。

服务终结点可以是由 IIS 承载的持续可⽤的服务的⼀部分,也可以是应⽤程序中承载的服务。

终结点可以是从服务终结点请求数据的服务客户端。

简单消息可以是作为 XML 发送的单个字符或单个单词,复杂消息可以是⼆进制数据流。

创建WCF服务如果发现找不到wcf项⽬,这时你需要去安装Visual Studio 的Windows Communication Foundation组件1. 创建过程如下2. 项⽬创建成功后,会⾃动⽣成的⼀些演⽰⽂件IService1.cs// 注意: 使⽤“重构”菜单上的“重命名”命令,可以同时更改代码和配置⽂件中的接⼝名“IService1”。

[ServiceContract]public interface IService1{[OperationContract]string GetData(int value);[OperationContract]CompositeType GetDataUsingDataContract(CompositeType composite);// TODO: 在此添加您的服务操作}// 使⽤下⾯⽰例中说明的数据约定将复合类型添加到服务操作。

// 可以将 XSD ⽂件添加到项⽬中。

在⽣成项⽬后,可以通过命名空间“WcfServiceDemo.ContractType”直接使⽤其中定义的数据类型。

WCF客户端动态设置WCF服务器主机

WCF客户端动态设置WCF服务器主机

WCF客户端动态设置WCF服务器主机什么是WCF?
当用户需要在WCF客户端动态设置WCF服务器主机时,可以使用如下步骤:
1.首先,确定WCF服务器的主机名称或IP地址。

2.然后,在客户端创建一个配置文件,包含一个设置,该设置指定WCF服务器的主机名称或IP地址。

3.接着,在客户端创建一个C#应用程序,该应用程序使用WCF服务器的主机名称或IP地址来调用WCF服务。

4.最后,将应用程序部署到给定配置文件中的WCF服务器主机。

以上就是WCF客户端动态设置WCF服务器主机的基本技术细节。

接下来,我将讨论一些重要概念,例如服务定位、服务发现、服务终结点,以及如何使用这些概念动态设置WCF服务器的主机信息。

1.服务定位
服务定位是WCF中的一种重要概念,用于当客户端无法直接访问WCF 服务器时,客户端可以通过服务定位获取该服务的地址。

服务定位时,可以使用以下两种不同的定位模式:
(1)静态定位:在静态定位模式下。

一个完整的WCF服务的发布与测试过程

一个完整的WCF服务的发布与测试过程

使用VS自带的WCFSVCHost(WCF服务主机)发布WCF服务,时刻开发人员测试使用。

下面我们来看一下如何在IIS中部发布一个WCF服务。

环境是VS 2008 (公司电脑没有安装VS2010)^_^我们从头开始,不写代码,完全的配置,会收获不小。

新建一个WCF 服务库建立一个WCF服务应用程序结果如下删除掉WCF程序中不需要的默认文件,如下图为WcfService1项目添加WcfServiceLibrary1的引用,如下图。

修改声明指示内容,让这个Service.svc文件的后台代码指向我们创建的WCF服务库项目--WcfServiceLibrary1项目中的服务类,改后的代码如下:<%@ ServiceHost Language="C#" Debug="true"Service="WcfServiceLibrary1.Service1" %>Ctrl+Shift+B 编译一下解决方案,配置工具用的反射,先编译才行此时我们的WCF服务站点并不能把WCF服务库中的服务和终结点发布出来,还需要我们对web.config进行一系列的配置工作。

右键我们要配置的Web.Config文件,编辑WCF配置在弹出的服务配置窗口中,把Service1服务指定到WCF服务库的WcfServiceLibrary1.dll 中的WcfServiceLibrary1.Service1服务类上。

再把其中的一个对外终结点的Contract设为WCF服务库的WcfServiceLibrary1.dll中的WcfServiceLibrary1.IService1服务契约上。

这一步是可选的,我们再为此WCF服务站点添加一个终结点,配置如下图下面我们将试着使用不同的终结点与WCF服务进行交互,查看运行情况。

当我们使用IIS5或IIS6发布WCF服务的时候一般只创建Http绑定的终结点,而不能创建使用TCP绑定、管道绑定的终结点。

WCF配置详解

WCF配置详解

WCF配置详解服务端的配置⽂件主要是对services、bindings、behaviors的配置。

在默认的App.config中,使⽤的是WCF Framework定义好的wsHttpBinding默认配置,所以看不到binding配置节。

配置节展开如下图:BTW: "元数据端点”通过WS-MetadataExchange帮我们实现了对服务的描述,提供了WSDL,启动Host之后我们可以通过<http://localhost:8732/Design_Time_Addresses/WcfServiceLib/Service1/?wsdl> 查看到公开的服务描述。

配置节展开如下图:关于WCF中的地址和绑定,需要补充⼀下。

WCF中⽀持的传输协议包括HTTP、TCP、Peer network(对等⽹)、IPC(基于命名管道的内部进程通信)以及MSMQ(微软消息队列),每个协议对应⼀个地址类型:HTTP地址:<http://localhost:8080/>TCP地址: net.tcp://localhost:8080/IPC地址: net.pipe://localhost/ (适⽤于跨进程,不能使⽤于不同机器间)MSMQ地址: net.msmq://localhost/对等⽹地址: net.p2p://localhost/WCF中提供的绑定有:BasicHttpBinding: 最简单的绑定类型,通常⽤于 Web Services。

使⽤ HTTP 协议,Text/XML 编码⽅式。

WSHttpBinding: ⽐ BasicHttpBinding 更加安全,通常⽤于 non-duplex 服务通讯。

WSDualHttpBinding: 和 WSHttpBinding 相⽐,它⽀持 duplex 类型的服务。

WSFederationHttpBinding: ⽀持 WS-Federation 安全通讯协议。

WCF编程:WCF服务和客户端的建立

WCF编程:WCF服务和客户端的建立

1.概念Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口。

它是.NET框架的一部分,由.NET Framework 3.0开始引入。

WCF的终结点有三个要素组成,分别是地址(Address)、绑定(Binding)和契约(Contract),简记可写成Endpoint=ABC。

地址:地址决定了服务的位置,解决了服务寻址的问题。

绑定:绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能对消息进行的相应处理。

绑定的类型包括BasicHttpBinding、WsHttpBinding、NetTcpBinding等。

契约:契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。

2.契约WCF的基本概念是以契约(Contract)来定义双方沟通的协议,契约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。

契约分成了四种:数据契约(Data Contract),订定双方沟通时的数据格式。

服务契约(Service Contract),订定服务的定义。

操作契约(Operation Contract),订定服务提供的方法。

消息契约(Message Contract),订定在通信期间改写消息内容的规范。

如下图,解释了契约:3.绑定由于WCF支持了HTTP,TCP,Named Pipe,MSMQ,Peer-To-Peer TCP等协议,而HTTP又分为基本HTTP支持(BasicHttpBinding)以及WS-HTTP支持(WsHttpBinding),而TCP亦支持NetTcpBinding,NetPeerTcpBinding等通信方式,因此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致。

基本绑定(BasicHttpBinding)对应BasicHttpBinding类,能够将WCF服务公开为传统的ASMX Web服务,是以前就的程序能够使用现在的WCF服务。

详解在IIS中配置并运行WCF服务

详解在IIS中配置并运行WCF服务

详解在IIS中配置并运行WCF服务 2009年12月18日 07:28 【IT168 技术文档】WCF是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。

使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。

在IIS中运行服务之前我们让Derivatives Calculator服务在一个.NET可执行文件中运行,在这个练习中,我们将让服务在IIS中运行。

利用IIS作为宿主程序来运行WCF服务通常有许多好处。

·将项目构建到\bin目录中为了方便部署,我们需要对服务项目进行配置,让它编译到一个bin目录中。

1. 在Solution Explorer中右键单击DerivativesCalculatorService项目并选择Properties菜单项。

2. 在Project designer中,单击Build选项卡。

3. 将Output path从bin\Debug\改为bin\,如图所示。

Project designer中经过调整的Output path属性4. 选择File | Save All菜单项。

5. 选择File | Close菜单项来关闭Project designer。

现在,在构建服务时产生的所有文件都会被输出到\bin目录中。

·添加一个.svc文件为了让WCF服务能够在IIS中运行,我们需要用一种特殊的内容文件(.svc文件)表示它。

这种模型和ASMX页面在IIS中的表示方法类似。

.svc文件包含一个WCF专用的处理指示符(@ServiceHost),这个指示符告诉WCF运行库在收到消息时激活服务。

1. 在Solution Explorer中右键单击DerivativesCalculatorService项目并选择Add | New Item菜单项。

2. 在Add New Item对话框中,选择Text File模板。

WCF教程

WCF教程

WCF教程首先,让我们了解WCF的核心概念。

WCF服务由三个主要组件构成:契约(Contract)、绑定(Binding)和终结点(Endpoint)。

契约定义了服务要提供的操作和数据类型。

绑定定义了服务与客户端之间的通信方式。

终结点定义了网络地址和协议,用于访问服务。

在WCF中,契约定义了服务的操作和数据类型。

它们可以是简单的方法调用,也可以是消息传递。

契约可以分为服务契约和数据契约。

服务契约包含操作契约和消息契约,操作契约定义了服务要提供的操作,消息契约定义了操作契约的输入和输出消息的报文格式。

数据契约定义了在服务和客户端之间传输的数据类型。

绑定定义了服务与客户端之间的通信方式。

WCF提供了多种不同的绑定选项,可以选择适合应用程序需求的绑定类型。

常见的绑定类型包括基本绑定、TCP绑定、HTTP绑定等。

终结点定义了服务的网络地址和协议,用于访问服务。

WCF支持多种不同的终结点类型,包括基本终结点、TCP终结点、HTTP终结点等。

每个终结点可以指定一个绑定和一个契约。

现在,让我们开始创建第一个WCF服务。

第一步是创建WCF服务项目。

打开Visual Studio,选择“新建项目”,然后选择“WCF服务应用程序”模板。

接下来,给项目起一个名称,并选择创建的位置。

点击确定开始创建项目。

创建了WCF服务项目后,我们需要定义一个契约。

在项目中添加一个新的接口文件,然后在接口中定义服务的操作和数据类型。

例如,我们可以定义一个简单的计算器服务,包含添加和乘法操作。

接下来,我们需要实现契约中定义的操作。

在项目中添加一个新的类文件,并实现接口中定义的操作。

在实现操作时,我们可以使用C#或其他语言来编写逻辑。

接下来是配置WCF服务。

在项目中添加一个新的配置文件,然后在文件中定义服务的终结点和绑定。

我们可以选择使用哪种协议和地址来访问服务。

在配置完成后,我们可以运行WCF服务。

运行服务后,会在本地启动一个宿主进程,等待客户端的请求。

WCF入门教程

WCF入门教程

WCF入门教程本节中包含的主题旨在帮助您快速了解 Windows Communication Foundation (WCF) 编程体验。

这些主题要根据本主题底部的列表中的顺序完成。

通过学习本教程,您可以初步了解创建 WCF 服务和客户端应用程序所需的步骤。

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

服务的终结点指定下列信息:服务所在的位置;一个绑定,其中包含客户端必须与服务进行通信的信息;一个协定,用于定义服务向其客户端提供的功能。

在完成本教程中的系列主题之后,您将会得到一个正在运行的服务,以及一个可以调用该服务的操作的客户端。

前三个主题描述如何使用协定定义服务,如何实现服务,以及如何在代码中配置服务、承载服务和运行服务。

所创建的服务是自承载服务,客户端和服务都在同一计算机上运行。

服务使用代码而非配置进行配置。

另外还可以将服务承载于 Internet 信息服务 (IIS) 下。

有关如何执行此操作的更多信息,请参见“如何:如何:在 IIS 中承载 WCF 服务”。

也可以在配置文件中配置服务。

有关使用配置文件的更多信息,请参见使用配置文件配置服务。

后三个主题描述如何创建客户端代理,如何配置客户端应用程序,以及如何创建和使用可以访问服务功能的客户端。

服务会发布可以访问的元数据,这些数据定义了客户端应用程序与服务操作进行通信所需的构造。

WCF 提供了一个ServiceModel Metadata Utility Tool (Svcutil.exe)来自动完成以下过程:访问发布的这些元数据,然后使用这些元数据来构造和配置服务的客户端应用程序。

本节中的所有主题均假定您使用 Visual Studio 2008 作为开发环境。

如果您使用的是其他开发环境,请忽略特定于 Visual Studio 的说明。

注意:如果运行的是 Windows Vista,则必须通过在“开始”菜单上右击 Microsoft Visual Studio 2008,然后选择“以管理员身份运行”的方式来启动 Visual Studio。

wcf原理

wcf原理

wcf原理
WCF是Windows Communication Foundation的简称,它是一种用于构建分布式系统的编程框架。

WCF基于.NET Framework,提供了一种统一的、可扩展的编程模型来使用各种分布式技术。

WCF的原理基于拦截机制,通过通道(Channel)来传递和拦截消息。

在客户端对服务端服务进行调用时,首先会通过一个服务代理对象将调用方提供的对象序列化到消息中,然后该消息通过通道进行传递。

这些通道包括传输通道、消息编码通道、管理会话通道和传播事务通道等,形成了一个通道堆栈。

由于对象已经被序列化,消息可以跨进程或机器进行传递,利用传输通道传递到服务端。

在服务端,消息通过最底层的传输通道接收,然后解析消息编码,并一层层地往上传输。

在服务端的通道栈之上,有一个分发器(Dispatcher),它会首先对消息进行检查,然后选择一个客户端要调用的操作。

在这个过程中,消息会被反序列化。

此外,WCF的体系架构包括契约、服务运行时、消息和寄宿四个方面。

契约描述了服务的功能和作用,告诉SOA系统中的其它节点这个服务是“做什么”的;服务运行时定义了服务在运行时的具体行为;消息用于在客户端和服务端之间传递数据;寄宿则是指将服务部署到特定的环境中,并负责服务的生命周期管理。

总之,WCF通过拦截机制、通道和契约等概念,提供了一种灵活、可扩展的分布式系统开发方式。

WCF入门

WCF入门

Windows Communication Foundation入门(Part One)前言:WCF是微软基于SOA(Service Oriented Architecture)推出的.Net平台下的框架产品,它代表了软件架构设计与开发的一种发展方向,在微软的战略计划中也占有非常重要的地位。

了解和掌握WCF,对于程序员特别是基于微软产品开发的程序员而言,是非常有必要的。

对于WCF,笔者也是初窥门径,抱着学习的态度作这样的一个介绍。

文中的内容主要参考了微软官方的文档、资料,以及众多介绍WCF的技术资料。

这些资料主要都是英文,不便于国内程序员学习WCF。

虽然本人才疏学浅,却愿意作这样的介绍者。

由于自己仅是一个初学者,英文的功底也不够深厚,所以文中难免会有疏漏之处。

同时,我也希望在文中尽量表达出自己的一些心得与见解,这就不免增加了出现错误的可能性。

此外,由于WCF至今仍未有正式的版本,文中相关的技术描述以及代码会根据版本的不同而发生变化,所以我也只能尽量对此给与一定的说明。

本文会是多篇文章拼凑在一起的系列,说是系列,但并没有严格的渐进关系,只是整体上希望能有一个相对全面的WCF入门介绍。

此外,笔者也希望能通过此文抛砖引玉,这样也能让我的WCF学习之旅更轻松一点。

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

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

WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。

以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于Internet;以宿主程序而论,可以以,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。

WCF基础介绍并创建简单应用程序

WCF基础介绍并创建简单应用程序

WCF基础介绍并创建简单应⽤程序什么是WCF?WCF, 英⽂全称(windows Communication Foundation) , 即为windows通讯平台。

windows想到这⾥⼤家都知道了 , WCF也正是由微软公司推出的这个⼀个玩意, 基于SOA的⼀个分布式应⽤程序框架和编程模型(WCF 编程模型的⽬标实现也就是:WCF服务、WCF客户端)描述: WCF的特点1. ⽀持多种消息模式(单向模式、请求/回复、双⼯)2. ⽀持多种传输协议和编码(Http,tcp ,msmq等。

)3. ⽀持事务,持久化。

4. 统⼀,安全,可扩展。

关于WCF的基础知识> WCF的服务结构协定: 确定消息格式, 服务类型及安全策略和⽹络协议。

服务运⾏时: 处理服务运⾏中发⽣的各种⾏为消息传递: 描述消息的数据格式和交换模型。

激活和承载: ⽤于发布WCF服务的寄主。

> 如何创建WCF 服务打开Visual Studio 新建⼀个项⽬, 选择WCF 服务库创建并命名为 HelloWCF。

可以看到, 在创建该项⽬时, 系统默认为我们添加了⼀个Iservice1(接⼝)和⼀个 service1(实现类)。

在Iservice1中, 可以看到该接⼝定义了 ServiceContract 特性, 接⼝⽅法中定义了 OperationContract 特性这两类特性则归属于WCF中的服务协定。

*特性:【⽤来声明服务端定义的所有协定。

在C#中,所有特性类都是从Attribute类继承⽽来的,⽽且其名称都有Attribute后缀。

⽤C#编写代码时,⼀律⽤中括号来声明特性类,在ServiceContract定义中, 会发现后⾯跟着Attribute后缀,声明时省略Attribute后缀,这是建议的⽤法。

特性类的⽤途是为紧跟在它后⾯的⽬标元素提供设计⾏为。

⽐如对某个字段声明了某个特性,则该特性的⽬标元素就是这个字段。

⽬标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接⼝、⽅法、可移植模块、参数、属性(Property)、返回值以及结构等。

WCF知识点详解

WCF知识点详解
c class Student { [DataMember] public string UserName { get; set; } [DataMember] public int Age { get; set; } [DataMember] public GenderMode Gender { get; set; } }
DataMemberAttribute特性只能应用类成员,只有应用了DataMemberAttribute特性的 字段或者属性成员才能成为数据契约的数据成员。
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, Inherited = false, AllowMultiple = false)] public sealed class DataMemberAttribute : Attribute { public DataMemberAttribute(); public bool EmitDefaultValue { get; set; } public bool IsRequired { get; set; } public string Name { get; set; } public int Order { get; set; } }


ProtectionLevel属性 ProtectionLevel属性表示当使用一个服务契约时,绑定必须达到的消息安全级别 。该属性的类型为.Security.ProtectionLevel,它的三个枚举值是: None,Sign和EncryptAndSign。当.Security.ProtectionLevel属性的值为Sign 时,服务发送和接受的所有消息必须经过签名。当属性设置为None时,表示服务发送 和接受的消息无须启用消息安全。ProtectionLevel属性影响的是是消息体中数据,不会 影响消息头的结构。 SessionMode属性 SessionMode属性表示程序里使用的通道必须、允许或者不允许使用会话通道。 SessionMode属性是System.ServiceModel.SessionMode类型,它的枚举值是Allowed-允 许会话、NotAllowed-不允许会话、Required-要求会话(需要有支持会话的Binding支持 ,WsHttpBinding、NetTcpBinding等)。若要设计一个会话契约,我们建议使用 Required 方式,而不是默认值Allowed。SessionMode.Required值要求必须使用传输层 会话,但应用层会话却不是必要的,如果服务终结点的绑定没有维持一个传输层会话 ,就不能为这样的服务契约配置SessionMode.Required。这一约束条件会在装载服务 时进行验证。但是,我们仍然可以将服务配置为单调服务,服务实例会在每次客户端 调用期间创建与销毁实例。只有当服务被配置为会话服务时,服务实例才会存活于整 个客户端会话中。

wcf使用流程

wcf使用流程

WCF使用流程WCF(Windows Communication Foundation)是一种用于构建分布式应用程序的框架。

它提供了一种统一的编程模型,可以在不同的应用程序之间进行通信,并支持多种传输协议和消息格式。

本文将详细描述WCF的使用流程,包括创建服务和客户端、配置服务和客户端、部署和测试。

1. 创建服务首先,我们需要创建一个WCF服务。

下面是创建WCF服务的步骤:步骤1:创建一个新的WCF服务项目在Visual Studio中,选择”新建项目”,然后选择”WCF”类别下的”WCF服务应用程序”模板。

输入项目名称并点击”确定”。

步骤2:定义服务契约打开生成的IService.cs文件,在其中定义服务契约(Service Contract)。

契约是一个接口,它定义了可由客户端调用的操作。

[ServiceContract]public interface IService{[OperationContract]string GetData(int value);}步骤3:实现服务契约打开生成的Service.cs文件,在其中实现契约中定义的操作。

这些操作将在客户端调用时执行。

public class Service : IService{public string GetData(int value){return $"You entered: {value}";}}步骤4:配置服务终结点打开生成的App.config文件,在其中配置服务终结点。

终结点定义了服务的地址、协议和消息格式。

<system.serviceModel><services><service name="WcfService.Service"><endpoint address="" binding="basicHttpBinding" contract="WcfService.ISe rvice" /><endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExch ange" /></service></services><behaviors><serviceBehaviors><behavior><serviceMetadata httpGetEnabled="true" /><serviceDebug includeExceptionDetailInFaults="false" /></behavior></serviceBehaviors></behaviors></system.serviceModel>2. 创建客户端接下来,我们需要创建一个WCF客户端,以便与服务进行通信。

WCF详解文档最新

WCF详解文档最新

一、分布式分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。

分布式网络存储技术是将数据分散的存储于多台独立的机器设备上。

分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中单存储服务器的瓶颈问题,还提高了系统的可靠性、可用性和扩展性。

二、面向服务的体系结构(Service-Oriented Architecture,SOA)SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。

接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。

这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。

面向服务的体系结构传统的面向对象的模型的替代模型,面向对象的模型是紧耦合的,现在的SOA 已经有所不同了,因为它依赖于一些更新的进展,这些进展是以可扩展标记语言(Extensible Markup Language,XML)为基础的。

通过使用基于XML 的语言(Web 服务描述语言[Web Services Definition Language,WSDL])来描述接口,服务已经转到更动态且更灵活的接口系统中。

面向服务的体系结构作用:对SOA 的需要来源于需要使业务IT 系统变得更加灵活,以适应业务中的改变。

通过允许强定义的关系和依然灵活的特定实现,IT 系统既可以利用现有系统的功能,又可以准备在以后做一些改变来满足它们之间交互的需要。

对于面向同步和异步应用的,基于请求/响应模式的分布式计算来说,SOA是一场革命。

一个应用程序的业务逻辑(business logic)或某些单独的功能被模块化并作为服务呈现客户端。

例如,服务的接口和实现相独立。

WCF入门教程

WCF入门教程

我们通过实现一个简单的示例来对WCF有个直观而浅显的认识,希望对初次涉及WCF的朋友有所帮助。

可以简单地认为WCF程序分为4部分:契约、服务、宿主、客户端。

我们通过一个例子来逐步完成各部分,示例程序中,客户端可以获取一个信息列表,列表中每一项包括ID、值、读值时刻、状态、状态变动时刻。

这里我用的是VS2010。

首先,创建一个空白解决方案WCFDemo。

我们将在其中添加n个项目,分别实现契约、服务、宿主、客户端。

如果用VS2010新建“WCF服务库”或者“WCF服务应用程序”,它会默认把契约和服务放在一个项目中,我们这个示例把契约和服务分别放在2个类库项目中。

第一步:契约1、添加一个类库WCFDemo.Contracts。

2、在类库中添加2个文件DataContracts.cs和ServiceContracts.cs,分别放置数据契约和服务契约。

3、添加引用System.Runtime.Serialization和System.ServiceModel。

4、编写代码如下:DataContracts.csusing System;using System.Runtime.Serialization; namespace WCFDemo.Contracts{[DataContract]public class DemoData{[DataMember]public int ID{get;set;}[DataMember]public double Value{get;set;}[DataMember]public DateTime ValueTime{get;set;}[DataMember]public DeviceState State{get;set;}[DataMember]public DateTime StateTime{get;set;} }public enum DeviceState{Unknown,Working,Broken}}(题外话:DemoData类中各个属性的写法有些偷懒,其实个人不建议这样。

怎样配置标准WCF服务端配置文件

怎样配置标准WCF服务端配置文件

怎样配置标准WCF服务端配置文件现在的架构都是讲究配置文件的,其实如何运用好配置文件会为我们解决很多问题的,没有配置文件,软件如何按照用户的要求对功能进行定制?没有配置文件,在对软件进行配置安装的时候如何根据具体的硬软件环境进行修改?最重要的是没有配置文件,该如何应对软件系统的可扩展要求?不知不觉地,配置文件的编写与管理竟然成了软件开发的重中之重。

WCF作为分布式开发的基础框架,在定义服务以及定义消费服务的客户端时,都使用了配置文件的方法。

虽然WCF也提供硬编程的方式,通过在代码中直接设置相关对象的属性来完成服务端与客户端的配置,然而这种方式并不利于后期的更改。

无疑,配置文件为WCF带来了软件开发的灵活性,它的使用也是WCF开发过程中最频繁的。

WCF服务端配置文件共分为两部分:服务端配置与客户端配置。

两者由于功能的不同,在配置文件的使用上也略有不同。

WCF服务端配置WCF服务端配置文件主要包括endpoint、binding、behavior的配置。

一个标准的服务端配置文件所包含的主要xml配置节如下所示:1.<system.ServiceModel>2.<services>3.<service>4.<endpoint/>5.</service>6.</services>7.<bindings>8.<!—定义一个或多个系统提供的binding元素,例如<basicHttpBinding>-->9.<!—也可以是自定义的binding元素,如<customBinding>.-->10.<binding>11.<!—例如<BasicHttpBinding>元素.-->12.</binding>13.</bindings>14.<behaviors>15.<!—一个或多个系统提供的behavior元素.-->16.<behavior>17.<!—例如<throttling>元素.-->18.</behavior>19.</behaviors>20.</system.ServiceModel>。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

只使用代码而不用配置文件的情况不适合IIS为宿主的情况,IIS宿主必须使用配置文件配置WCF的ServiceHost。

1、服务端1.1.准备Contract和实现Contract的服务很简单的一个Contract(Interface)和实现这个Contract(实现这个接口的类)的服务。

这是VS2005中使用add new item,选WCF Service后自动生成的一个模板例子服务代码。

1.2.建立ServiceHost一般使用public ServiceHost(Type serviceType, params Uri[] baseAddresses)构造方法建立ServicesHost。

参数:Type serviceType -- 为实现了某些Contract的类的类型,为这个服务主机要host的服务。

params Uri[] baseAddresses -- 为任意数量的baseAddress。

一个ServiceHost内只能驻留一个Service类,但是这个Service类可以实现多个Contract,每个Contract都能通过一个或多个(不同的bind)Endpoint向客户端暴露。

1.3.给ServiceHost添加EndpointEndpoint是直接暴露给客户端就行通讯的接口,经典的一个Endpoint可以用ABC来描述,即address –这个Endpoint对外的访问地址,binding –这个Endpoint是通过什么样的通讯手段暴露给客户端的,Contract -- 这个Endpoint对外暴露的是哪个Contract。

通过两个方法给ServiceHost添加EndpointServiceHost.AddServiceEndpoint AddServiceEndpoint方法有8种重载,ServiceHost提供了四种:ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, string address);ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, Uri address);ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, string address, Uri listenUri);ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, Uri address, Uri listenUri);ServiceHost的父类ServiceHostBase也提供了四种:ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, string address);ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, Uri address);ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, string address, Uri listenUri);ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, Uri address, Uri listenUri);其中参数implementedContract为Contract的完全名称,即名称空间.类名。

item)ServiceHost.Description是一个ServiceDescription 类型的对象。

ServiceDescription 是一个Service在内存中的一个完整的描述,包括服务的所有Endpoint,和每个Endpoint的各自的address、binding、contract和behaviors。

使用此方法先要根据Endpoint的ABC构造一个ServiceEndpoint 对象。

ServiceEndpoint(ContractDescription contract, Binding binding, EndpointAddress address)其中ContractDescription这样通过ContractDescription的静态方法GetContract构造:ContractDescription.GetContract(Type contractType);1.4.视需要给ServiceHost添加behaviorServiceHost.Behaviors是一个IServiceBehavior类型的对象集合。

IserviceBehavior 提供了一个在整个服务范围内修改或则插入定制扩展的机制。

如果需要把服务通过WSDL对外暴露对服务的Metadata描述,就需要加一个ServiceMetadataBehavior类型的Behavior:要发布Metadata,ServiceHost必须有一个http的baseAddress,所以在构造ServiceHost实例时,就需要在构造方法中加入这个http的baseAddress,这个http的baseAddress就是对外发布的Metadata地址。

1.5.打开ServiceHost,开始提供服务ServiceHost构建好了,添加了需要的Endpoint、behavior后,使用ServiceHost.Open()方法开发ServiceHost实例,开始对外提供服务。

2、客户端2.1.引用service客户端要访问服务端的服务,首先要知道服务端的服务提供了什么方法,就是要知道服务的Contract。

如何取得服务端的Contract有几种方法直接把服务端的Contract的副本拷贝到客户端这个方法是最原始的一种方法,这样保证了服务端跟客户端使用同一份Contract。

但是,这个方法不值得提倡,因为双方的Contract是同一个来源,但是毕竟是两个独立的物理存在,它们之间只能人为的来保证其一致性。

使用Svcutil.exe工具获得服务端Contract并生成本地服务代理类大家知道,web service是通过WSDL对外提供服务的描述,以便客户端能够通过wsdl 知道这个web service所包含的方法、方法的签名等等信息,客户端通过wsdl就能知道怎么去调用这个web service。

到了WCF时代,微软依然采用WSDL来提供对WCF服务的描述。

前面服务端给ServiceHost添加了一个ServiceMetadataBehavior类型的Behavior,目的就是让服务端对外提供WSDL形式的服务Metadata描述。

微软提供了Svcutil.exe工具用来通过WSDL生成客户端Contract和代理功能:httpbaseAddress 就是服务端设置的http的baseAddress。

当然前提是服务端在ServiceHost.Behaviors添加一个ServiceMetadataBehavior类型的Behavior,并设置HttpGetEnabled属性为true,允许对外暴露服务端Metadata描述运行Svcutil.exe后,生成两个文件,一个是WCF配置文件,一个是包含了服务端Contract和对应于服务端service的本地代理类的cs文件。

生成的cs文件有下面的规律:●引用服务端的服务所涉及的Contract(Interface类型)基本都原样引用到客户端(可能会自动给Contract添加一些Attribute)。

●服务端的Endpoint到了客户端,每个具有不同Contract的Endpoint都会在客户端生成一个代理类。

Contract相同,binding不同的Endpoint使用同一个客户端代理类。

在客户端项目中添加Service reference 在vs2005中安装了WCF的extention后,在项目的References上点击右键,会多出来一个“Add Service Reference”的选项,这就是用来引用WCF服务的,引用地址就是服务端设置的http的baseAddress。

在这里引用WCF服务,跟使用Svcutil.exe命令一样,会在项目中生成同样的两个文件。

2.2.生成客户端service代理实例引用服务后,客户端生成了配置文件和包含了Contract和本地代理类的cs文件,这里我们完全不使用配置文件,所以把生成的配置文件从项目中排除。

使用ChannelFactory Generic 使用ChannelFactory Generic类的CreateChannel静态方法CreateChannel,返回一个客户端代理。

static TChannel CreateChannel(Binding binding, EndpointAddress endpointAddress);这个方法包含了一个Endpoint的ABC三个主要元素:Address –new EndpointAddress("")是地址。

Bingding –new BasicHttpBinding() 是绑定。

Contract -- localhost. IService是引用服务后在在客户端生成的来自服务端的Contract(interface类型)。

直接使用引用服务后形成的本地代理类上面使用ChannelFactory的CreateChannel静态方法建立代理只使用到了引用WCF服务后在客户端生成的Contract,同时前面也说过,引用WCF服务后,还会在同时给每个Contract不同的Endpoint生成一个继承自客户端可以直接使用多个重载的代理类构造方法实例化这些代理类。

如果不使用配置文件,使用这个构造方法:SecondServiceClient(Binding binding, EndpointAddress remoteAddress)其中SecondServiceClient为本地的一个代理类。

实例化一个代理类的代码是这样的:同样,实例化的proxy也包含了一个Endpoint的ABC三个主要元素:Address –new EndpointAddress("")是地址。

相关文档
最新文档