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服务。

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

  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("")是地址。

相关文档
最新文档