没有合适的资源?快使用搜索试试~ 我知道了~
首页WCF分布式开发步步为赢.pdf
WCF分布式开发步步为赢.pdf

从网上整理的资料 1.WCF分布式框架基础概念 2.自定义托管宿主WCF解决方案开发配置过程详解 3.WCF服务元数据交换、配置及编程开发 4.WCF服务可靠性传输配置与编程开发 5.服务契约与操作重载 6.WCF服务契约继承与分解设计 7.WCF数据契约与序列化 8.使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据 9.WCF服务实例激活类型编程与开发 10.请求应答(Request-Reply) 、单向操作(One-Way)、回调操作(Call Back) 11.WCF流处理(Streaming)机制 12.WCF事务机制(Transaction)和分布式事务编程 13.WCF服务离线操作与消息队列MSMQ 14.WCF安全编程--基本概念 15.错误契约(FaultContract)与异常处理(ExceptionHandle)
资源详情
资源评论
资源推荐

WCF 分布式开发步步为赢(1):WCF 分布式框架基础概念
众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA 面向服务架构的出现为我们的如何利用现有企业系统资源进行企业 ERP
系统设计和实现提供了重要的参考原则。SOA 如此炙手可热,各大厂商都推出了自己的中间件产品,比如 Oracle Fusion 和 SAP NetWeaver,IBM、BEA
等企业也推出了自己基于 SOA 的解决方案。基于 J2EE 平台的 SOA 架构设计中的一个重要概念就是 EJB 企业服务总线,作用是实现各个系统的数据交互。
而.NET 平台上,WCF 就是微软为各个系统的数据交互提供通讯基础框架。由于论文课题的原因,我对产生了 SOA(Service-oriented architecture,面
向服务架构)有了接触,并且产生了浓厚的兴趣。故此对.NET 平台上基于 SOA 的企业应用系统集成和实现技术进行潜心学习,总结心得和体会,整理出
布式开发的系列文章,与大家分享。
下面介绍一下《WCF 分布式开发步步为赢》系列文章的结构。首先会是 WCF 分布式开发基础概念的介绍,其次会设计各个知识点详细的介绍和应
用,中间会穿插与以前技术的对比分析,涉及服务契约、数据契约、操作契约、事物、安全、消息队列等重要概念。同样作为老徐一贯的风格,我会尽
量做到文章的调理清晰、系统详细、通俗易懂!也会放出标注的详细代码供大家参考学习。 本节文章的结构是:1.WCF 基础概念介绍 2.WCF 新的特
性 3.WCF 框架模型 4.实现代码分析 5.总结。
【1】WCF 基础概念介绍
要学习 WCF,首先我们要清楚 WCF 的基本概念,那么什么是 WCF 呢?
WCF 全称 Windows Communication Foundation,是 Microsoft 为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5 的重要
组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。
根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得
开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF 是微软分布式应用程序开发的集大成者,它整合了.Net
平台下所有的和分布式系统有关的技术,如 Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0 和 MSMQ 消息队列。以通信
(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以 ASP.NET,EXE,WPF,Windows Forms,
NT Service,COM+作为宿主(Host)。WCF 可以支持的协议包括 TCP,HTTP,跨进程以及自定义,安全模式则包括 SAML, Kerberos,X509,用户/密码,
自定义等多种标准与模式。也就是说,在 WCF 框架下,开发基于 SOA 的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了 WCF,
就相当于掌握了叩开 SOA 大门的钥匙。(参考 MSDN)
这里 SOA 概念我们要明确一下,SOA(Service-oriented architecture,面向服务架构)是一种架构模式和设计原则。在<Programming WCF Services
>By Juval Lowy 一书中解释为 SOA(Service-oriented applicatoin)面向服务的应用程序,两者应该不冲突,后者应该是采用 SOA 面向服务架构设计和
实现的应用程序(Service-oriented applicatoin)。
WCF 的强大之处就是因为整合了.Net 平台下所有的和分布式系统有关的 Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0 和
MSMQ 消息队列等技术,我在之前的 WCF 分布式开发必备知识(4)和 WSE3.0 构建 Web 服务安全(4)系列文章中都给出了详细的介绍,这里就不在详述,有
兴趣的朋友可以自己查阅。以后具体介绍 WCF 相关知识点的时候需要的地方我会在进行讲解。
【2】WCF 新的特性
Indigo 有三项突出的特性:与多种现有 Microsoft 技术的统一性,对跨供应商互操作性的支持,以及显式的面向服务特性。
【2.1】与 Microsoft 分布式计算技术的统一性
Microsoft 以前的分布式计算技术特性和应用领域不同。要构建基本的可互操作的 Web 服务,最佳选择是 ASP.NET Web 服务(ASMX)。要连接两个
基于 .NET Framework 的应用程序,选择 .NET Remoting。如 果 应用程序需要分布式事务和其他更高级的服务,其创建者一般会使用企业服务 Enterprise
Sevices,即 COM+ 的继任者。要构建 Web 服务安全,使用 WS-Addressing 和 WS-Security 规范,开发人员可以构建采用 WSE3.0 的应用程序。而要创
建基于消息的排队式应用程序,基于 Windows 的开发人员则应使用 Microsoft 消息队列 (MSMQ)。 各个技术的具体特性和 WCF 对比如下表:
ASMX
.NET Remoting
企业服务
WSE
MSMQ
Indigo
Web 服务
X
X
.NET - .NET 通信
X
X
分布式事务等。
X
X
WS-* 规范支持
X
X

队列消息传输
X X
WCF 支持了以前分布式技术的所有的特性,因而对于建立分数是应用更加的灵活和全面。
【2.2】与非 Microsoft 应用程序的互操作性
由于 Indigo 的基本通信机制是 SOAP,因此 Indigo 应用程序可与大量运行于各种上下文环境的其他软件进行通信。基于 Indigo 构建的应用程
序可与下列所有程序进行交互:
1)运行于同一 Windows 计算机上不同进程中的 Indigo 应用程序。
2)运行于另一 Windows 计算机上的 Indigo 应用程序。
3)基于其他技术构建的应用程序,如基于 Java 2 企业版 (J2EE) 构建的、支持标准 Web 服务的应用程序服务器。
4)Indigo 应用程序还可以与基于 Indigo 以前的 .NET Web 服务(ASMX)构建的应用程序进行互操作。
这样通过标准的 SOAP 消息 WCF 可以与其他应用程序进行交互,很好地支持了跨平台跨操作系统的的目标。当然 WCF 中支持安全、事物、MTOM 特性,
这些都以前 WSE 中的主要概念,我们发现 WCF 中也进行了扩展和支持。利于技术的向前兼容。
【2.3】对面向服务开发的显式支持
面向服务是一个广泛的领域,它包含面向服务应用程序和更广泛的面向服务体系结构 (SOA) 的概念。在设计此项技术的过程中始终遵守四项基本
原则:
1.共享架构,而不是类:与旧的分布式对象技术不同,服务仅通过精心定义的 XML 接口与其客户端进行交互。跨越服务边界传递完整的类、方法
及全部之类的行为被禁止。
2.服务具有自主性:服务及其客户端同意它们之间的接口,但相互独立。它们可以采用不同的语言编写,可 以 使 用 不 同 的 运 行 时环境(如 CLR 和 Java
虚拟机),可以运行在不同操作系统上,还可以存在其他方面的不同。
3.边界是显式的:分布式对象技术 [如分布式 COM (DCOM)] 的目标之一是使远程对象尽可能看上去像本地对象一样。虽然这种方法通过提供一种
通用编程模型在某些方面简化了开发,但也同时隐藏了本地对象与远程对象之间不可避免的区别。服务通过使服务与其客户端之间的交互更明显而避免
了这一问题。隐藏分布式特性并非目的。
4.采用基于策略的兼容性:决定在系统之间使用哪些选项应取决于基于 WS-Policy 的机制。
WS-Policy 在 WSE3.0 里我们应该比较常见,通过策略配置来支持和实现 Web 服务的安全。这里很多技术概念我们都可以从早期的分布式技术里找
到原型。
【3】WCF 服务框架模型
下面我们来介绍一下 WCF 服务的基本结构。 WCF 服务的基本结构如下图所示:

每个 Indigo 服务均由三个部分构成:
1.服务类:采用 C# 或 VB.NET 或其他基于 CLR 的语言编写,实现一个或多个方法。通常包括服务契约、操作契约和数据契约。
2.宿主:一种应用程序域和进程,服务将在该环境中运行。ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host) 。
3.终结点:服务暴露出来的地址,由客户端用于访问服务。通常提及的概念就是 ABC,即地址、绑定和契约的第一个字母的简称。 如图:
终结点中重要的概念就是绑定,它是实现通信的关键部分。这里定义消息通讯的协议包括 HTTP、TCP、UDP、MSMQ 等,用户可以根据自己的需要定义。
【4】实现代码分析
上面介绍了 WCF 相关的一些基本概念、特性和框架模型,现在我们来具体实现一个 WCF 的应用实例。客户端和 WCF 服务通信的过程如图:
客户端通过代理调用 WCF 服务,代理通过服务地址找到特定的服务,调用执行特定的服务方法。
我们代码的演示部分也分为 3 个部分,首先是服务类(契约部分),其次是宿主(自己定义一个控制台程序),客户端(控制台)。
【4.1】契约(Contract)
定义实现的代码包括服务契约 IWCFService、操作契约 OperationContract、和数据契约 DataContract。具体代码实现如下:

//ServiceContract 属性以及 Indigo 使用的所有其他属性均在 System.ServiceModel 命名空间中定义,
//因此本例开头使用 using 语句来引用该命名空间。
namespace WCFService
{
//1.服务契约
[ServiceContract(Namespace = "http://www.cnblogs.com/frank_xl/")]
public interface IWCFService
{
//操作契约
[OperationContract]
string SayHello(string name);
//操作契约
[OperationContract]
string SayHelloToUser(User user);
}
//2.服务类,集成接口。实现契约
public class WCFService : IWCFService
{
//实现接口定义的方法
public string SayHello(string name)
{
Console.WriteLine("Hello! {0},Using string ", name);
return "Hello! " + name;
}
//实现接口定义的方法
public string SayHelloToUser(User user)
{
Console.WriteLine("Hello! {0} {1},Using DataContract ", user.FirstName, user.LastName);
return "Hello! " + user.FirstName + " " + user.LastName;
}
}
//3.数据契约//序列化为 XML,作为元数据封装到服务里
[DataContract]
public struct User
{
[DataMember]
public string FirstName;
[DataMember]
public string LastName;
}

}
【4.2】宿主(托管进程)
WCFHost 宿主进程托管服务 WCFService,项目类型也为控制台应用程序(你也可以创建其他的项目类型)。这里要添加对 WCFService 类库的引
用。托管采用反射方式动态创建服务的实例。具体代码如下:
//采用自托管方式,也可以是 IIS、WAS,Windows 服务等用户自定义程序托管服务
public class WCFHost
{
static void Main(string[] args)
{
//反射方式创建服务实例,
//Using 方式生命实例,可以在对象生命周期结束时候,释放非托管资源
using (ServiceHost host = new ServiceHost(typeof(WCFService.WCFService)))
{
//相同的服务注册多个基地址
//添加服务和 URI,用户资源标识符
//Uri tcpAddress = new Uri("http://localhost:8001/WCFService");
Uri httpAddress = new Uri("http://localhost:8002/WCFService");
//Uri httpAddressLisening = new Uri("http://localhost:8002/WCFService");
//host.AddServiceEndpoint(typeof(WCFService.IWCFService), new WSHttpBinding(), tcpAddress);
host.AddServiceEndpoint(typeof(WCFService.IWCFService), new WSHttpBinding(), httpAddress);
//判断是否以及打开连接,如果尚未打开,就打开侦听端口
//if (host.State !=CommunicationState.Opening)
host.Open();
//显示运行状态
Console.WriteLine("Host is runing! and state is {0}",host.State);
//等待输入即停止服务
Console.Read();
}
}
}
这里值得注意的就是绑定协议要和配置文件里的设置一样,不然会出现编译错误或者运行时异常。编译结束会生成可执行文件 EXE。
【4.3】客户端
客户端要添加对以上服务的引用,如 果 你初次建立服务,配置不当很容易出现引用服务失败的问题,配置服务相关的错误和解决办法我也整理到 WCF
分布式开发常见错误解决里了,大家需要的话可以参考,是在遇到苦难可以留言给我一起交流。
客户端的具体实现代码如下:
class WCFClient
{
剩余100页未读,继续阅读













安全验证
文档复制为VIP权益,开通VIP直接复制

评论22