WCF简介

一、简介

WCF是Windows Communication Foundation缩写,是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。

根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communication)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。

WCF是.NET Framework的扩展,它提供了创建安全的、可靠的、事务服务的统一框架,WCF 整合和扩展了现有分布式系统的开发技术,如Microsoft .NET Remoting、Web Services、Web Services Enhancements (WSE)等等,来开发统一的可靠系统。WCF简化了SOA框架的应用,同时也统一了Enterprise Services、Messaging、.NET Remoting、Web Services、WSE 等技术,极大的方便了开发人员进行WCF应用程序的开发和部署,同时也降低了WCF应用开发的复杂度。

WCF支持大量的Web Service标准,这些标准包括XML、XSD、SOAP、Xpath、WSDL等标准和规范,所以对于现有的标准,开发人员能够方便的进行移植。同时WCF可以使用Attribute属性进行WCF应用程序配置,提高了WCF应用的灵活性。WCF遵循客户端/服务器模型在应用程序之间进行通信,客户端程序能够通过服务器端提供的EndPoint端直接访问服务。

WCF是一个统一框架,用于创建既安全可靠又可交互的分布式事务处理应用程序。Visual Studio 的早期版本中存在一些可用于在应用程序之间进行通信的技术。 如果要以一种能够实现从任何平台访问信息的方式来共享信息,则应使用 Web 服务(也称为 ASMX Web 服务)。如果只想在客户端和正在 Windows 操作系统上运行的服务器之间移动数据,则应使用 .NET 远程处理。如果需要事务处理通信,则应使用企业服务 (DCOM),或者如果需要排队的模型,则应使用消息队列(也称为 MSMQ)。

WFC将所有这些技术的功能汇集到一个统一编程模型中。这简化了开发分布式应用程序的过程。

二、WCF框架模型

三、WCF 编程模型

WCF 编程模型 WCF 编程模型基于以下两个实体之间的通信:WCF 服务和 WFC 客户端。该编程模型封装在 .NET Framework 的 System.ServiceModel 命名空间中。

WCF 服务

WCF 服务基于一个定义服务与客户端之间的协定的接口。它是用 ServiceContractAttribute 属性进行标记的,如下列代码中所示: 

<ServiceContract()> _
Public Interface IService1
<OperationContract()> _
Function GetData(ByVal Value As String) As String
End Interface

通过使用 OperationContractAttribute 属性标记 WCF 服务公开的函数和方法,可以定义这些函数和方法。另外,通过使用 DataContractAttribute 属性标记复合类型,可以公开序列化数据。这样可以在客户端中进行数据绑定。 定义了接口及其方法后,会将它们封装在一个实现该接口的类中。单一的 WCF 服务类可以实现多个服务协定。 为了使用 WCF 服务,通过通常所说的“终结点”公开了此服务。 只有使用终结点提供的方法才能与服务进行通信;您不能像访问其他类那样通过直接引用来访问该服务。

终结点由地址、绑定和协定组成。地址定义服务的位置;该地址可以是 URL、FTP 地址、网络路径或本地路径。绑定定义与服务通信的方法。WCF 绑定提供一个用于指定协议(如 HTTP 和 FTP)、安全机制(如 Windows 身份验证或用户名和密码)和更多内容的通用模型。协定包括 WCF 服务类公开的操作。

可以针对单一的 WCF 服务公开多个终结点。这样,不同的客户端便可以采用不同的方法与同一服务进行通信。例如,银行服务可以为雇员提供一个终结点,为外部客户提供另一个终结点,每个终结点都使用不同的地址、绑定、和/或协定。

WCF 客户端

WCF 客户端由“代理”和终结点所组成,前者使应用程序能够与 WCF 服务通信,后者与针对服务定义的终结点相匹配。 该代理在 app.config 文件中的客户端上生成并包括有关服务所公开的类型和方法的信息。例如,对于公开多个终结点的服务,客户端可以选择最能满足其需求的服务,以便通过 HTTP 进行通信以及使用 Windows 身份验证。

创建 WCF 客户端后,可以像引用任何其他对象那样在代码中引用服务。例如,若要调用之前显示的 GetData 方法,则应编写与下列内容相似的代码: 

Dim client As New ServiceReference.Service1Client
Dim returnString As String
returnString = client.GetData("Hello")
MsgBox(returnString)

四、Visual Studio 中的 WCF 工具

创建并测试 WCF 服务

可以使用 WCF Visual Studio 模板为基础快速创建自己的服务。然后可以使用 WCF 服务自动主机和 WCF 测试客户端来调试和测试此服务。通过共同使用这些工具,可以快速方便地进行调试和测试,从而缩短调试和测试周期,并且不必在早期阶段提交给宿主模型。

WCF 模板

WCF Visual Studio 模板为服务开发提供一个基类结构。在“添加新项目”对话框中可以使用一些 WCF 模板。这些模板包括 WCF 服务库项目、WCF 服务网站、和 WCF 服务项模板。 选择模板时,将为服务协定、服务实现、以及服务配置添加文件。所有必需的属性都已添加,同时将创建简单的“Hello World”服务类型,且不必编写任何代码。当然,您将需要添加代码以便为实际服务提供函数和方法,但是模板会提供基础。

WCF 服务主机

为 WCF 服务项目启动 Visual Studio 调试程序(通过按 F5)时,将自动启动 WCF 服务主机工具以便以本地方式承载服务。WCF 服务主机将枚举 WCF 服务项目中的服务、加载该项目的配置、并为它所找到的每个服务实例化主机。 通过使用 WCF 服务主机,可以测试 WCF 服务,而不用在开发期间编写额外代码或提交给特定主机。

WCF 测试客户端

通过使用 WCF 测试客户端工具,可以输入测试参数、将该输入提交给 WCF 服务、并查看该服务发送回的响应。如果将 WCF 测试客户端与 WCF 服务主机结合起来,会提供满意的服务测试体验。 按 F5 调试 WCF 服务项目时,WCF 测试客户端将打开并显示在配置文件中定义的服务终结点的列表。可以测试参数并启动服务,重复此过程以连续测试和验证您的服务。

在 Visual Studio 中访问 WCF 服务

Visual Studio 2008 简化了创建 WCF 客户端的任务,同时将针对使用“添加服务引用”对话框添加的服务自动生成代理和终结点。所有必需的配置信息将添加到 app.config 文件中。大多数情况下,只需实例化该服务便可以使用此服务。 通过使用“添加服务引用”对话框,可以输入服务的地址或搜索在解决方案中定义的服务。该对话框将返回由服务和这些服务提供的操作所组成的列表。通过使用此对话框,还可以定义用于在代码中引用服务的命名空间。 通过使用“配置服务引用”对话框,可以自定义服务的配置。可以更改服务地址,指定访问级别、异步行为和消息协定类型,以及配置类型重用。

转载于:https://www.cnblogs.com/Linsj/archive/2012/08/01/2618571.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css链接样式_CSS中的样式链接

css链接样式CSS样式链接 (CSS Styling Links) The links in CSS can be styled in various ways to make our website more presentable and attractive. The links can also be styled depending on their states e.g. visited, active, hover, etc. CSS中的链接可以通过各种方…

《MySQL——约束》

目录主键约束唯一主键非空约束默认约束外键约束主键约束 -- 主键约束 -- 使某个字段不重复且不得为空&#xff0c;确保表内所有数据的唯一性。 CREATE TABLE user (id INT PRIMARY KEY,name VARCHAR(20) );-- 联合主键 -- 联合主键中的每个字段都不能为空&#xff0c;并且加起…

UIControl事件

CHENYILONG BlogUIControl事件 FullscreenUIControl事件1.UIControlEventTouchDown单点触摸按下事件&#xff1a;用户点触屏幕&#xff0c;或者又有新手指落下的时候。2.UIControlEventTouchDownRepeat多点触摸按下事件&#xff0c;点触计数大于1&#xff1a;用户按下第二、三、…

C++ 为什么要使用#ifdef __cplusplus extern C { #endif

经常看到别人的头文件 有这样的代码 #ifdef __cplusplus extern "C" { #endif// C 样式 的函数#ifdef __cplusplus } #endif 为什么要这样呢&#xff1f; 因为 C 语言不支持重载函数 也就是同名函数&#xff0c;参数却不一样,C支持&#xff0c;其编译器对函数名的处理…

css中的媒体查询_CSS中的媒体查询

css中的媒体查询CSS | 媒体查询 (CSS | Media Queries) Creating a web page is not an easy task as it requires loads of content and data so that it becomes strongly responsive to the users. To do that various contents are even added e.g.: resources, informativ…

SharePoint2013安装组件时AppFabric时出现1603错误,解决方法:

采用PowerShell命令批量下载必备组件: 下载完成后&#xff0c;采用批处理命令安装必备组件。 注&#xff1a;SPS2013安装必备组件及批处理下载地址&#xff1a; 需要将必备组件放在安装文件的PrerequisiteInstallerFiles文件夹中&#xff0c;将PreReq2013.bat放在安装文件根目录…

《MySQL——数据表设计三大范式》

目录数据表设计范式第一范式第二范式第三范式数据表设计范式 第一范式 数据表中的所有字段都是不可分割的原子值。 字段值还可以继续拆分的&#xff0c;就不满足第一范式&#xff0c;如下&#xff1a; 下面这个&#xff0c;更加贴合第一范式&#xff1a; 范式设计得越详细&…

三道简单树型dp+01背包~~hdu1561,poj1947,zoj3626

以前学树型dp就是随便的看了几道题&#xff0c;没有特别注意树型dp中的小分类的总结&#xff0c;直到上次浙大月赛一道很简单的树型dp都不会&#xff0c;才意识到自己太水了&#xff5e;&#xff5e;come on&#xff01; hdu1561&#xff1a;题目给出了很多棵有根树&#xff0c…

css 字体图标更改颜色_在CSS中更改字体

css 字体图标更改颜色CSS字体属性 (CSS font properties ) Font properties in CSS is used to define the font family, boldness, size, and the style of a text. CSS中的字体属性用于定义字体系列 &#xff0c; 粗体 &#xff0c; 大小和文本样式 。 Syntax: 句法&#xf…

深入new/delete:Operator new的全局重载

Operator new 的全局重载 原文地址&#xff1a;http://blog.csdn.net/zhenjing/article/details/4354880 我们经常看到这么一句话&#xff1a; operator new 可以重载&#xff0c; placement new 不可重载。其实此处所说的不可重载应该是指全局的 placement new 不可重载&#…

C++基础知识点整理

基本语法 1、static关键字的作用 1、全局静态变量 加了static关键字的全局变量只能在本文件中使用。 存储在静态存储区&#xff0c;整个程序运行期间都存在。 2、局部静态变量 作用域仍为局部作用域。 不过离开作用域之后&#xff0c;并没有销毁&#xff0c;而是贮存程序中&a…

Haskell学习笔记

《learn you a Haskell》这书的结构与常见的语言入门教材完全不一样。事实上&#xff0c;即使学到第八章&#xff0c;你还是写不出正常的程序…因为到现在为止还没告诉你入口点模块怎么写&#xff0c;IO部分也留在了最后几章才介绍。最重要的是&#xff0c;没有系统的总结数据类…

组合问题 已知组合数_组合和问题

组合问题 已知组合数Description: 描述&#xff1a; This is a standard interview problem to make some combination of the numbers whose sum equals to a given number using backtracking. 这是一个标准的面试问题&#xff0c;它使用回溯功能将总和等于给定数字的数字进…

可变参数模板、右值引用带来的移动语义完美转发、lambda表达式的理解

可变参数模板 可变参数模板对参数进行了高度泛化&#xff0c;可以表示任意数目、任意类型的参数&#xff1a; 语法为&#xff1a;在class或者typename后面带上省略号。 Template<class ... T> void func(T ... args) {// }T:模板参数包&#xff0c;args叫做函数参数包 …

BI-SqlServer

一.概述 SqlServer数据仓库ETL组件 IntegrationServiceOLAP组件 AnalysisService报表 ReportingServiceMDX(查多维数据集用的)和DMX(查挖掘模型用的)。二.商业智能-Analysis Services 项目 构建挖掘模型1构建挖掘模型2构建挖掘模型3三.商业智能-SqlServerAnalysis-Asp.net WebS…

python 子图大小_Python | 图的大小

python 子图大小In some cases, the automatic figure size generated by the matplotlib.pyplot is not visually good or there could be some non-acceptable ratio in the figure. So, rather than allowing a pyplot to decide the figure size, we can manually define t…

《设计模式整理》

目录常见设计模式如何保证单例模式只有一个实例单例模式中的懒汉与饿汉模式OOP设计模式的五项原则单例模式中的懒汉加载&#xff0c;如果并发访问该怎么做常见设计模式 单例模式&#xff1a; 单例模式主要解决了一个全局使用的类频繁的创建和销毁的问题。 单例模式下确保某一个…

JSON学习资料整理

1.什么是JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;但是也使用了类似于C语言家族的习惯&#xff08;包括C, C, C#, Java, JavaScript, Perl, Python等&#xff09;。这些…

OSI七层模型及其数据的封装和解封过程

OSI(Open System Interconnection)参考模型把网络分为七层: 1.物理层(Physical Layer) 物理层主要传输原始的比特流,集线器(Hub)是本层的典型设备; 2.数据链路层(Data Link Layer) 数据链路层负责在两个相邻节点间无差错的传送以帧为单位的数据,本层的典型设备是交换机(Switch)…

rss聚合模式案例_RSS的完整形式是什么?

rss聚合模式案例RSS&#xff1a;真正简单的联合 (RSS: Really Simple Syndication) RSS is an abbreviation of Really Simple Syndication. It is also called Rich Site Summary. It is quality attainment for the syndication of collection of web content and used to di…