金融投资风险公司网站源码,芜湖代理公司注册,php的网站怎么做,wordpress自动标签好久没有写博客#xff0c;作为一个程序员#xff0c;我居然习惯了不写博客。也难怪这些年来#xff0c;一直原地踏步#xff0c;无所长进。真是一份付出一份收获#xff0c;种瓜得瓜#xff0c;种豆得豆。 Windows Communication Foundation 是一种非常实用、非常强大… 好久没有写博客作为一个程序员我居然习惯了不写博客。也难怪这些年来一直原地踏步无所长进。真是一份付出一份收获种瓜得瓜种豆得豆。 Windows Communication Foundation 是一种非常实用、非常强大的技术。属于.NET范畴内的微软推出的技术。在这个.NET即将失去市场的日子里也只有WCF这个技术还有点价值还可以得到市场的认可。为了提升自己的价值要好好学习一些实用、值钱的技术。 Where Is WCF Come From wcf是什么为什么是一项值钱的技术在开始说明wcf是什么、wcf的价值之前让我们先回顾一下早些日子里的个人电脑应用程序是如何工作的这样有助于理解为什么会推出wcf这项技术。在最初的日子里个人电脑应用软件都非常匮乏且不可以多个任务同时进行。例如: word processor(文字处理器) 、spreadsheet(电子表格)、database(数据库)。一般用户使用数据库存储业务数据用电子表格分析数据最后通过文字处理器将这些数据整理做出报表。这些个应用程序之间不能相互通信、交互操作并且必选安装在相同的一台电脑上。随着网络的不断发展人们对数据共享的要求越来越急迫。例如在一个公司内的员工需要共享数据那么就需要各个应用软件间互相通信、互相交互且这些应用软件可以安装在不同的电脑上。 此时就出现了Inter-Process communication技术(进程间通信)。例如 named pipe、sockets这些技术的出现使得应用程序之间可以相互交互、通信、互相发送信息、协同完成任务。但是这些技术都是非常底层的网络技术对开发人员要求极高大大加强了开发人员的工作量。随着技术的快速发展微软又相继推出了Component Object Model(COM)、Distributed Component Object Model(DCOM)、COM、.NET Framework、Remoting 等技术。这些技术都是为了实现应用程序与组件之间相互通信的。 既然有这么多技术来支持应用程序与组件之间通信那为什么还需要推出WCF这项技术呢它又为什么比其他技术更值钱呢如果我们日常需求只停留在局域网内各个软件之间共享数据、发送、接收数据协同完成任务这个层面那么以上那些技术已经可以很好的满足我们的需求了根本不需要使用WCF这项技术。但是随着World wide web的快速发展出现了web Service这个概念。web service,是指在服务器上执行的应用程序或组件。也就是说我们使用的应用程序或者服务不是本地安装软件而是通过World wide web来访问部署这些应用软件的服务器来获取服务。我们在平日的项目开发中特别是前台开发我们都会经常使用Ajax技术来实现页面局部刷新或者通过Ajax调用后台代码完成对数据库的增删改查。其实Ajax就算一种web service经常使用的技术 .web service概念与另一个概念联系紧密Service-Oriented Architecture(SOA 面向服务架构). 功能以接口的形式提供给用户接口的实现对用户透明用户不会看到接口的实现也不需要关注接口的实现。接口的实现可以使用已有的软件功能或者其他的web service。面向服务的体系结构就是分布式服务。 通过以上对web service 与SOA的理解大家可以看出其实分布式服务的实质就是通过网络与各个应用服务、组件相互接收信息、回复信息、协同合作。这些应用服务、组件可以部署在世界上的任何地方不在像之前那么局限在一个公司的局域网中。WCF就是为了创建web service而推出的技术。web service是一种服务它不依赖于开发语言与部署服务器环境。使用java等其他语言也可以实现一个web service。 The Benefits Of WCF 要想实现应用程序与web service的通信就要考虑以下几点: 1.传输数据的格式 2.传输使用的协议 3.数据安全 以上这些问题都是需要双方认同的、需要保持一致的。只有这样才可以互相通信。web service使用XML 或者JASON作为数据传输的格式。使用Simple Object Access ProtocolSOAP协议进行相互通信。SOAP协议定义了: 1.SOAP协议消息的格式 2.传输数据如何加密 3.怎样对SOAP消息回复 web service可以发布Web Service Description Language(WSDL)文档这个文档是由XML形式展示的描述了Web Service可以接收的消息、以及返回的消息结构。客户端应用程序通过WSDL文档来决定如何与Web Service进行通信。 以上的这些WCF会提供一个模型很方便配置以上内容。 Building WCF Service 接下来我们来动手开发一个WCF服务。要开发的WCF包含两部分:WCF服务、客户端应用程序。将开发好的WCF服务部署到IIS上客户端应用程序调用服务。 WFC可以基于多种类型的模板开发例如网站、类库、工作流等。今天我们使用网站模板来开发WCF服务。 一、 先创建一个空的解决方案名称为TestService. 二、 双击解决方案-新增-新网站。 弹出的窗口选择WCFService.如下图: 三、创建WCF Service 后如下图: 我将网站起名字为PracticeService, 图中被红色圈中的是WCF 服务TestService是客户应用程序待会下面会讲到。 在App_Code文件下会出现两个类:IService.cs 、Service.cs。我将对应的两个类改为了:IPracticeService.cs Practice.cs。 Definition Contract WCF包含,Service Contract(服务契约)、Data Contract(数据契约)、Operation Contract(操作契约)、Member Contract(数据成员契约)。 Service Contract:向外界提供的服务。只有标注为Service Contract 的接口才能被外界以服务的形式看到。 Operation Contract:接口内的方法只用被Operation Contract属性定义后才可以被外界调用。 Data Contract:只有被Data Contract 属性定义后的类才可被WCF序列化、反序列成符合XML Schema(XML架构)的数据流。从客户端至WCF服务数据类型一定要符合XML Schema.客户端发送数据至WCF先将数据类型系列化成XML流到达WCF服务端后WCF将XML数据流反序列化成.NET对象反之亦然。由此可见只要是需要传输的类必须要具有Data Contract.Data Contract 属性可以定义在类、结构、枚举上。 Data Member:被传输的类中字段需要被Data Member属性标记才可以被访问。 以下是IPracticeService.cs代码段: using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel; namespace Test { [ServiceContract] public interface IPracticeService { [OperationContract] Liststring GetAllGirl(); [OperationContract] Girl GetSpecificGirl(string Id); // TODO: Add your service operations here } // Use a data contract as illustrated in the sample below to add composite types to service operations. [DataContract] public class Girl { [DataMember] public string Id { get; set; } [DataMember] public string Name { get; set; } [DataMember] public string Age { get; set; } [DataMember] public string Marry { get; set; } } } 这是一个被Service Contract属性标记的接口也是WCF服务提供的服务。接口内的方法被Operation Contract属性标记过才可以被访问。定义了一个Girl类使用Data Contract标记其中字段使用DataMember属性标记。这个接口提供了一下几个功能: 1.获取所有女孩子信息 2.获取具体某个女孩子信息 令Practice.cs类实现IPractice接口下面是Practice实现类代码段: using System.Collections.Generic;
// NOTE: You can use the Rename command on the Refactor menu to change the class name Service in code, svc and config file together.
namespace Test { public class Practice : IPracticeService { public Liststring GetAllGirl() { Liststring collect new Liststring(); string name MARY; collect.Add(name); name CHRISTINE; collect.Add(name); name TINA; collect.Add(name); name CRYSTAL; collect.Add(name); name SUZANNE; collect.Add(name); name BEATRICE; collect.Add(name); name KATIE; collect.Add(name); return collect; } public Girl GetSpecificGirl(string Id) { Girl girl new Girl { Age 22, Name SUZANNE, Marry Single}; return girl; } } } 我们只是为了实现WCF服务与客户端通信所以简单起见不再写复杂的数据访问层代码不访问数据库直接hard-code代码来实现接口。 值得注意的是.svc文件(Service.svc)。这个文件指明了实现了WCF服务类的名称与位置。特别是在将WCF服务部署到IIS时IIS需要.svc文件。如下图: 右击Service.svc,选择在浏览器中查看。看到如下图信息时说明成功创建了WCF服务。 点击上图中两个链接的任意一个弹出如下图页面: 这个页面显示的是WSDL(Web Service Definition Language)文档,是由WCF 服务生成的元数据文件描述了WCF服务的相关信息。客户端就是通过WSDL文档去与WCF服务通讯。可以把WSDL文档看作是商品使用说明书。(WCF 服务看作是商品) 以上就是我们的PracticeService 服务,它提供了两个方法1.获取所有女孩子信息 2.获取具体某个女孩子信息。服务开发完了但是还不能被访问。因为需要部署到Internet ,才可以被全世界访问到。接下来就要部署WCF服务。 Deploying WCF Service Into IIS WCF可以被部署到多种环境中例如:IIS、 Windows服务、独立的应用程序等。在这里以IIS为例。 双击PracticeService网站点击发布web应用程序如下图: 选择自定义在弹出页面输入PracticeService作为文件名。 按照下图序号依次操作。 部署后打开IIS应能看到如下图所示WCF 服务部署成功。 接下来就是测试WCF服务了。 Building A WCF Client Application 创建一个控制台程序TestService.双击服务引用选择添加服务引用。如下图: 点击发现会看到我们刚才部署的WCF服务。在下面的命名空间填写PracticeService. 测试WCF服务调用WFC服务。 using System;
using TestService.PracticeService;
namespace TestService { class Program { static void Main(string[] args) { Console.WriteLine(Press ENTER when the service has started); Console.ReadLine(); PracticeServiceClient proxy new PracticeServiceClient(); Console.WriteLine(Test 1: List all Grils name); string[] grilsproxy.GetAllGirl(); foreach (string girlsName in grils) { Console.WriteLine(Number: {0}, girlsName); } Console.WriteLine(); Console.WriteLine(Test 2: Display the details of a girl); Girl girl proxy.GetSpecificGirl(CHRISTINE); Console.WriteLine(Number: {0}, girl.Name); Console.WriteLine(Age: {0}, girl.Age); Console.WriteLine(marry: {0}, girl.Marry); Console.WriteLine(); } } } 引用服务引用命名空间using TestService.PracticeService; 该命名空间包含PracticeServiceClient类(proxy)代理类。代理类相当于客户端到WCF Service之间的翻译官。代理类使客户端对WCF服务的访问变成类似于对象实例访问方法的形式。代理类将客户端对函数的调用转换成对WCF 服务的访问。wcf服务返回的消息被代理类转换成对函数的调用。 代理类是如何做到这些的呢当 WCF服务发布后会生成WSDL文档WSDL文档描述了WCF服务的metadata(元数据)。代理类就是通过WSDL来完成翻译工作的! 请注意APP.config文件如下图: 上图中Client标签内的信息说明了客户端是如何与WCF Service通信的。在Client的标签内的endpoint终结点标签说明了WCF service的详细信息。其中包括: address(地址):web service服务部署的地址以便客户端去访问。 binding(绑定):主要包含web service通信相关的信息例如传输机制、传输协议等。binding支持多种传输协议默认使用BasicHttpBinding,使用http协议通信。 contract(契约):说明web service提供的服务。 WCF AND The Principles of SOA 到此我们已经使用WCF开发了一个webservice服务只要知道部署webservice服务的地址世界上任何一台计算机都可以使用它。我们前面讲到了SOAService-Oriented Architecture 面向服务的架构。SOA的原理就是将软件功能以服务的形式放在internet上客户不需要知道实现服务的细节只要明白这个服务是做什么的知道服务所在地址就可以。就像我们知道一张图片的地址我们就可以去访问它。每个服务都是一个小web service,客户端使用服务访问web service.因为与web service的访问与网络协议传输协议等有关与客户端程序用何种语言开发无关。所以web service可以被不同语言开发的客户端程序通信。 WCF是一个实现SOA程序的平台使用WCF可以快速开发SOA程序。 转载于:https://www.cnblogs.com/VitoCorleone/p/9240654.html