您的位置:首页 > 其它

WCF

2016-05-11 23:14 267 查看
初入职场,开始接触C#,开始接触WCF,那么从头开始学习吧,边学边补充吧。学习WCF之前,有必要先来了解下SOA

SOA

Service-Oriented Architecture,面向服务架构,粗粒度、开放式、松耦合的服务结构,将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口采用中立的方式定义,独立于实现服务的硬件平台、操作系统和编程语言(跨平台)。

SOA既是一种编程方式,也是软件开发的一种架构方法,服务层是SOA的基础,核心是“服务”,本质就是将服务组合起来并对外提供接口。SOA架构的技术基础是SOAP(Simple Object Access Protocol,简易对象访问协议)标准,SOAP用XML语言定义一个服务操作方法所发送和接收消息的内容。


实现SOA思想的技术

Web Service

WCF


参考:对SOA的一点理解漫谈SOA

有关 web service 的学习,参见:Web Service - sqh

关于 Web Service 和 WCF,异同点作简单的说明

数据交换/通信方式:Web 服务在HTTP上通过SOAP与端点通信,WCF 服务可以选择使用不同的协议进行通信

运行方式:Web 服务总是运行在 IIS 上,WCF 服务可以选择合适宿主

关于WCF与Web Service的区别参见:http://www.cnblogs.com/xiurui12345/archive/2012/03/30/2425445.html。下面主要研究 WCF。

WCF

Windows Communication Foundation(WCF)是由微软开发的一系列支持弹性数据通信的应用程序框架,可以理解为Windows通讯开发平台。作为微软主推的一个通讯组件或者平台,不仅支持和集成Web Service,还兼容和具备微软早期技术的特性,整合了原有windows通讯的 .Net Remoting、WebService、Socket机制,融合有HTTP和FTP相关技术,是建立在Web Service架构上的一个全新通信平台。WCF可以理解为Web Service的升级版。

微软官方解释:WCF(之前的版本名为 Indigo)是完全使用托管代码建立和运行面向服务应用程序的统一框架,使开发者能建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作

Microsoft为构建 面向服务 的应用提供的 分布式通信框架

WCF是.NET Framework 3.5的重要组成部分

Web服务和远程技术相结合的通用基础结构,提供创建远程服务并与其通信的框架

微软分布式应用程序开发的集大成者,整合了.Net平台与分布式系统的有关技术,是Win平台上开发分布式应用最佳的实践方式

WCF是一套框架,用来创建各种服务,且能够创建兼容Web服务的服务,也就是说可以创建能够与Web服务互联互通的服务。WCF最基本的通信机制是SOAP,保证系统之间的互操作性。WCF技术允许创建服务,可以跨进程、计算机和网络从其他应用程序访问这些服务。利用这些服务,可以在多个应用程序中共享功能,提供数据源或抽象复杂过程。

优点

统一性、兼容性,支持跨平台交流

具有互操作性的Web服务,支持.Net与.Net通信、分布式事务、消息队列(Message Queue)

安全可靠的消息通信,灵活配置支持单工、半双工、全双工

支持HTTP或TCP通信,寄宿在web服务器、windows服务或自我寄宿

其余相关信息可参考:WCF .vs. Web Service

WCF做啥

WCF 是面向服务的,跨平台的安全、可信赖、事务性的解决方案,作为 WebService,.Net Remoting,Enterprise Service,WSE,MSMQ 的并集,以面向服务为思想提供了包含通讯、事务、并发、队列、安全等一系列的整套的分布式开发方案。

WCF最终目标是通过进程或不同的系统、通过本地网络或是通过Internet收发客户端服务器之间的消息

WCF专门用于面向服务(Service-Oriented)开发

namespace RVC.WCF.Certificate
{
[DataContract]
public class UserInfo
{
[DataMember]
public string UserID;
[DataMember]
public string UserName;
[DataMember]
public string Password;
[DataMember]
public DateTime CertTime;
}
}


UserInfo
创建的 WCF服务库,仅需新增 .cs接口文件 和 .svc.cs接口实现文件,配置文件 App.config 暂时无需改动。注意代码仅供参考,不要过于讲究细节。

[2]. 包装WCF服务库

创建好的 WCF服务库不能直接运行,需要宿主托管才能执行。通过 VS新建项目 -> ASP.NET 空 Web 应用程序,作为该 WCF服务类库的 Host 将上述 WCF服务类库包含进来。

每一个 ASP.NET Web服务 都具有一个 .asmx 文件,客户端通过访问 .asmx 文件实现对相应 web 服务的调用。类似,每个 WCF 服务也具有一个对应的文件,即 .svc 文件。基于 IIS 的服务寄宿要求相应的 WCF 服务具有相应的 .svc 文件,.svc 文件部署于 IIS 站点中,对 WCF 服务的调用体现在对 .svc 文件的访问上。

(1)右键项目,添加一个文件夹,命名为 Services

(2)右键 Services 文件夹,添加 WCF服务 文件,分别命名为 CalculateService.svc 和 CertificateService.svc,同时将 .cs接口文件 和 .svc.cs接口实现文件删除,只留下 .svc服务托管文件

(3)依次修改 .svc 文件为如下形式,分别指向对应的服务实现文件

// CalculatorService
<%@ ServiceHost Language="C#" Debug="true" Service="RVC.WCF.Calculator.CalculatorService" CodeBehind="CalculateService.svc.cs" %>

// CertificateService
<%@ ServiceHost Language="C#" Debug="true" Service="RVC.WCF.Certificate.CertificateService" CodeBehind="CertificateService.svc.cs" %>


其中 Service = "命名空间.服务名称" 表示提供的服务,CodeBehind = "服务接口实现文件" 表示服务实现类。

除此之外,Web.config 暂不改动。至此,服务相关文件全部创建完毕,下面给出资源结构图



其中,右图是为了调试方便,将2个WCF服务类库项目添加到了该Web应用程序中。

为了验证服务是否能运行,右键 RVC.WCF.Service,选择 在浏览器中查看 并进入 Services 文件夹



点击即可查看服务运行情况。

[3]. 在 IIS 上发布 WCF 服务

同样是右键 RVC.WCF.Service,选择 生成部署包,生成文件路径:...\RVC.WCF.Service\obj\Debug\Package\PackageTmp

将该文件夹下的文件复制到 IIS 的相关路径下,在 IIS -> 网站 -> 添加网站 或 IIS -> 网站 -> Default Web Site -> 添加应用程序 并指向该路径即可。

至此,将该 WCF 服务成功发布到 IIS 上。

推荐文章:WCF4.0新特性体验(7):IIS无SVC文件托管WCF服务(IIS hosting without an SVC file )

在 WCF 学习中遇到的一些问题

[1]. 如何读取配置文件中 endpoint 结点的地址?

// 方法1
SqhServiceClient SqhClient = new SqhServiceClient();
var endpoint = SqhClient.Endpoint;

// 方法2
string sectionPath = "system.serviceModel/client";
var clientNode = (ClientSection)ConfigurationManager.GetSection(sectionPath);
var endpoints = clientNode.Endpoints;


其中,方法1只能读取某个终结点的信息,而方法2可以读取该服务下所有终结点的信息。

关于方法2的具体解决方法参见:http://www.cnblogs.com/huangxincheng/p/4396284.html

参考:

WCF入门教程我的WCF之旅

专栏:传说中的WCF架构之路 - WCF全析
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: