WCF技术

2024-08-18

WCF技术(共8篇)

WCF技术 篇1

在一个整体的解决方案中,有许多的有特定功能的应用程序需要进行相互的实时消息交互,如何解决这些应用程序间错综复杂的消息传递,是一个很常见但是令人很困扰的问题,尤其是在应用程序数量比较多,同时消息频率也很大的时候[1,2,3]。通常一般的解决方案会采取点对点直接订阅方式,这种方式的复杂度会使开发者让而却步,且消息密集度都将导致消息传输的延迟而不能正确传递。本文提出了一种相对简单、高效的且易于实施的技术手段。

1 WFC简介

1.1 WCF

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

1.2 WCF的优势

Net分布式技术,包括.Net Remoting、Web Service、COM+等五种技术,这既不利于开发者的开发,也加大了程序的维护难度和开发成本。正是因应于这样的缺陷,WCF才会在.Net 2.0中作为全新的分布式开发技术被微软强势推出,它整合了上述所属的分布式技术,成为了理想的分布式开发的解决之道。

从功能的角度来看,WCF完全可以看作是ASMX、.Net Remoting、Enterprise Service、WSE、MSMQ等技术的并集。这种说法仅仅是从功能的角度,事实上WCF远非简单的并集这样简单,它是真正面向服务的产品,它已经改变了通常的开发模式。因此利用WCF,就可以解决包括安全、可信赖、互操作、跨平台通信等等需求,开发者再不用去分别了解.Net Remoting、ASMX等各种技术了。概括地说,WCF具有如下的优势。

1.2.1统一性

WCF是对于ASMX、.Net Remoting、Enterprise Service、WSE、MSMQ等技术的整合。由于WCF完全是由托管代码编写,因此开发WCF的应用程序与开发其它的.Net应用程序没有太大的区别,我们仍然可以像创建面向对象的应用程序那样,利用WCF来创建面向服务的应用程序。

1.2.2互操作性

由于WCF最基本的通信机制是SOA协议,这就保证了系统之间的互操作性,即使是运行于不同的上下文中。这种通信可以是基于.Net到.Net间的通信,可以跨进程、跨机器甚至于跨平台的通信,只要支持标准的Web Service,例如J2EE应用服务器(如WebSphere,WebLogic)。应用程序可以运行在Windows操作系统下,也可以运行在其他的操作系统,如Sun Solaris、HP Unix、Linux等等。

1.2.3安全与可信赖

WS-Security、WS-Trust和WS-SecureConversation均被添加到SOAP消息中,以用于用户认证,数据完整性验证,数据隐私等多种安全因素。在SOAP的header中增加了WS-ReliableMessaging允许可信赖的端对端通信。而建立在WS-Coordination和WS-AtomicTransaction之上的基于SOAP格式交换的信息,则支持两阶段的事务提交。上述的多种WS-Policy在WCF中都给与了支持。对于Messaging而言,SOAP是Web Service的基本协议,它包含了消息头和消息体。在消息头中,定义了WS-Addressing用于定位SOAP消息的地址信息,同时还包含了MTOM(Message Transmission Optimization Mechanism)。

1.2.4兼容性

WCF充分的考虑到了与旧有系统的兼容性。安装WCF并不会影响原有的技术如ASMX和.Net Remoting。即使对于WCF和ASMX而言,虽然两者都使用了SOAP,但基于WCF开发的应用程序,仍然可以直接与ASMX进行交互。

2旧有方案的不足

多个应用程序间的实时消息交互,通常有以下几种方案。

2.1点对点订阅方式

这种方案是每个应用程序都向特定的应用程序订阅其所能提供的某些消息,这种方式有以下几个不足之处:扩展性差,每当有新的应用程序加入时候,当旧有的应用程序需要和这个新的应用程序进行通信时候,其他的应用程序都需要进行修改;实现复杂,每个应用程序都需要和许许多多的其他应用程序维护消息通道,一旦应用程序数量达到一定规模,信道维护工作是一件非常繁复且容易出错的任务。

2.2广播方式

这种方式下,每个应用程序都以广播方式向外发布消息,这种方式实现比较简单,但是有两个不足之处:每个应用程序都会收到很多不必要的消息,每个应用程序需要对每个消息进行判别,从而降低了处理效率;网络上的消息数量会非常的巨大,增大网络负担,从而降低消息传递的准确性。

3 WCF开发的基于订阅方式的消息总线

整个消息总线的原理如图1所示。

从图1可以看出,这种基于订阅方式的消息总线,核心在消息中心。这种方式有以下优势:

(1)每个应用程序都只向消息中心订阅其所需要的消息,大大减少了网络上消息数量。

(2)每个应用程序都只和消息中心做交互,只需要公开消息中心的部署地址,通信接口,各个应用程序就能够轻易的接入这个系统,与其他应用程序交互,这样即减少了信道维护工作量,同时也使得系统的扩展性大大增强。

(3)消息中心通信接口采用WCF,WCF的优势我们在理论基础节中已经有阐述。他的互操作性非常强,这种通信可以是基于.Net到.Net间的通信,可以跨进程、跨机器甚至于跨平台的通信,只要支持标准的Web Service,例如J2EE应用服务器(如WebSphere,WebLogic)。应用程序可以运行在Windows操作系统下,也可以运行在其他的操作系统,如Sun Solaris、HP Unix、Linux等等,这个保证了我们和异构系统通信没有问题。另外WCF又是安全与可信赖的,既保证了通信的稳定性和私密性。

(4)为了保证各个应用程序一旦离线,再次重启后也能够收到所订阅的消息,我们在消息中心一侧采用了一个持久化池,一旦某个应用程序非正常退出,就将他订阅的消息保存下来,等到该应用程序重启后再发还给他。

(5)消息中心在这个方案里是一个中枢,在应用程序增加后,消息中心会不会成为一个瓶颈呢?答案是肯定的,因为消息中心和所有应用程序通信,肯定会成为瓶颈,为了解决这个问题,我们可以使用扩展消息中心方式来进行,或者说使用多个消息中心(如图2所示)。不同的应用程序和不同的消息中心通信,消息中心1在收集应用程序1,应用程序N订阅的消息后,将本消息中心不能够提供的消息,转给消息中心,同样,消息中心2在收集应用程序2,应用程序……的消息后,也将本消息中心不能够提供的消息转给消息中心,而消息中心就把分消息中心当成是应用程序一样,中转与分发消息给不同的分消息中心。在这个方案里,分消息中心过滤了部分消息,减轻了网络通信压力。

4仿真实验

本方案的消息中心封装成了自动启动的Windows服务,随着Windows系统启动而自动启动,为这个消息总线中其他的应用程序提供了可信赖的运行环境;系统使用WCF技术,运行于Windows操作系统上,可实现同一计算机上多个进程或者多个计算机上的多个进程间的消息传递,通过配置,可支持TCP/IP、WebServies等多种底层通讯技术;消息由消息总线转发,参与通讯的进程订阅消息标题,经过消息总线过滤,其只收到所关系的消息,大大降低网络负荷;采用基于服务的技术,参与到消息通讯的进程只与消息中心交互,彼此不关心对方行为与存在,实现通讯进程的在线可插拔;利用缓存技术,实现消息传输的可靠性。

本技术方案已经在宝信软件股份有限公司的iMES软件中使用,该软件采用了一个消息中心,软件一期有5个应用程序,二期增加了两个,扩展非常简单。采用本技术方案前后信道数量由42个减少到14个,消息包数量由210个/s.减少到40。这里假设每个应用程序每秒发送5消息个包,订阅1个主题消息。记n为应用程序数,采用新消息总线前的信道数量是n(n-1),随着应用程序数的增加,信道数量近似以2次方增加,量是非常惊人的;而采用新的消息总线后,信道数量只是2n,而且都是和消息中心通讯,信道维护简单很多。

5结束语

如今的应用系统越来越庞大,系统之间的整合越来越多,而不同异构进程之间的通信是一个必须要解决的问题。本文提出一种利用WCF技术开发的基于订阅模式的消息总线,能够有效的解决这些进程间交互问题,仿真实验验证了算法的有效性。

参考文献

[1]年福丰,刘秋让.基于WCF的异构数据源集成系统的研究和实现.科学技术与工程,2009;9(11):3116-3119

[2]朱义,陈进,刘雨,等.基于SOA的设备智能维护系统架构设计及实现.计算机应用与软件,2009;26(6):10-13

[3]来兴华,张水平,尚文静.基于WCF的自助缴费系统的设计与实现.微计算机信息,

[4]程汤培.基于WCF的即时通信软件的设计与实现.电脑编程技巧与维护,2008;4:24-41

[5]胡文君.基于WCF的分布式异步消息处理机制的研究.武汉:武汉理工大学,2009

WCF技术 篇2

关键词:SOA WCF .Net 契约 服务

DOI:10.3969/j.issn.1672-8289.2010.10.058

0 引言

企业信息化发展的过程中,最早搭建的是基于业务模型的各种信息系统。其具体的实现模型是以业务数据存储为核心的应用程序模型。随着企业信息化的发展,企业的数据存储模式越来越分散于各自的系统框架中,而信息共享的需求越来越迫切。为了实现数据之间的互相共享,越来越多的接口协议被应用与系统扩展服务之上。例如TCP数据包模式,XML数据交换模式,WebService接口协议等。为使企业应用摆脱面向技术的解决方案的束缚,轻松应对企业商业服务变化、发展的需要,面向服务的体系结构,即SOA架构模型应运而生。SOA的关键是服务,即一切是基于服务来设计程序,服务是最核心的抽象手段,业务被划分为一系列的业务服务和业务流程。SOA已经成为现有系统应用框架的标准模型。

微软公司作为现有软件编程规范的制定者之一,已经在其最新的企业编程平台VS.Net2010中实现了基于SOA标准的应用程序开发模型,即WCF应用框架模型。它是基于Windows平台下开发和部署服务的软件开发包(SDK),专门用于服务定制、发布与运行,以及消息传递和处理。WCF整合了微软.Net平台下所有和分布式有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信范围而论,它可以跨进程、跨机器、跨子网、跨企业网甚至于跨Internet;以宿主程序而论,它可以以ASP.NET、EXE、WPF、WindowsForms、NT Service、COM+作为宿主程序。WCF可以支持的协议包括TCP、HTTP、跨进程及自定义。掌握了WCF,就掌握了微软实现SOA标准的服务架构体系。

1、WCF的优势

首先我们先来看若没有WCF应用框架,开发一个基于Internet的典型的分布式应用系统,

将会涉及到现有的几种技术。

上图我们可以看到,采用跨平台的技术手段,后端应用中间层以及数据库服务层,我们需要通过WebService来暴露其接口供前端客户端调用。如果在这个接口之上还需要充分考虑通信的安全性,我们得使用WebService Enhancements来保证ASMX的安全连接。若系统存在分布式事务逻辑,我们会考虑采用EnterpriseService(COM+)的内在事务处理模型,其中还包括了分布式事务处理逻辑(Distributed Transaction)。如果中间业务逻辑还细分为N个对象层级,那么我们还需要考虑中间对象的异步调用、脱机连接、断点连接等功能。也许我们还要使用消息队列(MSMQ)来支持应用程序之间的异步消息传递。

由此,我们看来,要建立一个架构牢靠,性能良好的Internet分布式应用系统,若使用到微软的.Net技术,我们就得使用.Net Remoting、Web Service、COM+等技术,这些技术,既降低了开发效率,又加大了程序的开发成本和维护难度。正因此有如此诸多的因素在里边,WCF的应用框架才会在微软的VS.Net2010中作为全新的分布式开发技术而强势推出,并成为理想的分布式开发的解决方案。WCF具有的优势如下。

1.1统一性

WCF是ASMX、.Net Remoting、Enterprise Service、WSE、MSMQ等技术的整合体。由于WCF完全由托管代码编写,因此开发WCF的应用程序与开发其他的.NET应用程序没有太大的区别,我们仍然可以像创建面向对象的应用程序那样,利用WCF来创建面向服务的应用程序。

1.2互操作性

WCF的最基本的通信机制是SOAP,这就保证了系统之间的互操作性,即使是在不同的上下文中。这种通信可以是基于.NET到.NET间的通信。同时,可以进行跨进程、跨机器甚至于跨平台的通信,只要支持标准的Web Service,例如J2EE应用服务器。应用服务器可以运行在Windows操作系统下,也可以运行在其他操作系统之下,例如Sun Solaris、HP UNIX、Linux等。

1.3安全与可信赖

WS-Securiy、WS-Trust和WS-SecureConversation均被添加到SOAP消息中,以用于用户认证、数据完整性验证、数据隐私等多种安全因素。在SOAP的header中增加了WS-ReliableMessaging允许可信赖的端对端通信。而建立在WS-Coordination和WS-AtomicTransaction之上的基于SOAP格式交换的信息,则支持两阶段的事务提交(two-phase commit transactions)。上述的多种WS-Policy在WCF中都给予了支持。对于Messaging而言,SOAP是Web Service的基本协议,它包含了消息头和消息体。在消息头中,定义了WS-Addressing用于定位SOAP消息的地址信息,同时还包含了MTOM(Message Transaction Optimization Mechanism)消息传输优化机制。

1.4兼容性

WCF充分的考虑到了与旧有系统的兼容性。安装WCF并不会影响原有的技术,如ASMX与?.Net Remoting。即使对于WCF和ASMX而言,虽然两者都是用了SOAP,但基于WCF开发的应用程序,仍然可以直接与ASMX进行交互。

2、基于SOA标准的用户需求分析

假设企业的信息系统要构建在SOA标准之上。那么系统对数据的需求分为2个层次。

2.1数据服务端

即该信息系统的数据请求以服务的方式提供。我们以“数据表格反馈”作为该服务针对客户端请求的回应。该服务端根据客户端的请求返回其所需要的数据内容序列。对其序列的接口封装采用安全连接的Web Service提供。

2.2数据客户端

即发起该数据请求的客户端,应该运行在微软的操作系统之上,表现形式为WindowsForm,当然其也可以采用WEB载体的方式运行。本例中我们只请求其中一个简单的数据内容表格申请。

3、基于WCF应用程序框架的具体代码实现

3.1 定义WCF的服务契约

契约定义了服务提供的功能和客户端程序可以使用哪些功能。契约可以完全独立于服务的实现代码。在WCF中契约分为3种类型:服务契约、数据契约、消息契约。本例中需要返回数据内容序列,因此采用数据契约。

Using system;

Using system.collections.generic;

Using system.Linq;

Using system.serviceModel;

Using system.Text;

Namespace WcfService1

{

[ServiceContract]

Public interface IService1

[operationContract]

String GetData(int value);

[operationContract]

CompositeType GetDataUsingDataContract(CompositeType composite);//此处为服务操作

}

下面定义通过服务发送的复合类型数据

[DataContract]

Public class CompositeType

{

Bool boolValue=true;

String stringValue=”Hello”;

[datamember]

Public bool BoolValue

{

Get{return boolValue;}

Set{boolvalue=value;}

}

Public bool BoolValue

{

Get{return boolValue;}

Set{boolvalue=value;}

}

}

3.2 实现WCF的服务契约

对契约接口的实现,继承接口并实现其方法。

Using system;

Using system.collections.generic;

Using system.Linq;

Using system.serviceModel;

Using system.Text;

Namespace WcfService1

{

public class Service1 : IService1

{

//查询表格数据的行数

public int GetDataGridNum()

{

DataGrid dg = new DataGrid();

return dg.RowNum;

}

//获取表格数据

public List getDataGird()

{

List< DataGrid > DataGridList= new List< DataGrid >();

DataGrid.Add(DataGrid);

return DataGrid;

}

}

}

3.3 宿主进程服务

相当于运行服务的载体,可以是WindowsForm程序或者Windows服务,也可以是ASP.NET的应用程序,甚至简单的控制台程序都可以。本例中采用WindowsForm程序作为载体。

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Windows.Forms;

using System.ServiceModel;

namespace WindowsFormsWcfApp

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

//声明宿主

ServiceHost host =null;

private void btnStart_Click(object sender, EventArgs e)

{

host = new ServiceHost(typeof(WcfService1.Service1));

host.Open();//启动服务的监听器信道,监听请求

//host.AddServiceEndpoint(typeof(IMyProcess), new BasicHttpBinding(), "manualWCF");

//ServiceMetadataBehavior smb = new ServiceMetadataBehavior();

//smb.HttpGetEnabled = true;

//host.Description.Behaviors.Add(smb);

label1.Text = "数据表格服务已启动";

}

private void btnStop_Click(object sender, EventArgs e)

{

if (host.State != CommunicationState.Closed)

{

host.Close();//停止数据表格服务

}

label1.Text = "数据表格服务已停止";

}

}

}

3.4 WCF客户端调用服务

客户端程序需要生成一个代理类来调用服务,然后实例化代理类,最后象调用普通本地方法一样来调用服务方法。

DataContentRef.ServiceClient wcfClient= new DataContentRef.ServiceClient();

ArrayList ListName=wcfClient.getDataArrayList()//获取数据内容表格

4、结论

通过WCF的例子,我们可以知道下一代的SOA的微软实现架构。其中确实对代码量进行了精简。并方便其更新其服务框架。以该框架进行扩展,可以衍生出基于WCF的N层模型的泛型。服务端可以跨平台,客户端可以在浏览器上实现,也可以标准的WinForm作为载体。为在微软编程平台下制定基于SOA标准的应用程序提供了实现例子。

参考文献:

[1] 姚刚霞 陶伟盛. 基于.Net的通信模型的实现[J]. 网络安全技术与应用,2009.9 69-71

[2] 李天平. .NET深入体验与实战精要[M]. 北京 电子工业出版社 2009.6

[3] 蒋金楠 WCF技术剖析(卷一)[M].北京 电子工业出版社 2009.7

[4] 徐雷 WCF技术内幕[M]. 华中科技大学出版社 2010.3

[5] 周明全 吕林涛 李军怀. 网络信息安全技术研究[J] 西安电子科技大学出版社.2005

[6] 杨义先.网络信息安全与保密[M]. 北京邮电大学出版社.1999

作者简介:

WCF技术 篇3

WCF(Windows Communication Foundation)是微软提出的基于服务架构(SOA)的网络通信API。WCF是一款真正面向服务的产品,从功能上讲,完全可以看作是ASMX、.Net Remoting、Enterprise Service、WSE、MSMQ等技术的并集。WCF统一了多种微软的分布式技术,提供了对跨供应商互操作性支持,解决了各种分布式技术之间的互联互通问题,尤其是异构平台下构建分布式应用的整合问题。WCF具有良好的松耦合、平台无关性和互操作性,使其成为微软分布式开发核心技术。

WCF作为新一代通信基础,具有众多优势:继承SOA架构优点,迅速构建松耦合的分布式企业级应用;良好的兼容性和统一的开发模式,提供互操作支持,适合不同的应用环境;提供安全、可靠的服务级分布式事务。

本文结合高校户籍管理系统,将WCF技术应用于当前非常流行的多层架构设计,满足项目安全、互操作和跨平台网络通信需求,具有一定的理论与实践意义。

1 基于WCF的多层服务架构

基于WCF的多层架构分为:页面表示层、WCF服务层、基本逻辑层和数据访问层[1,2,3,4]。系统多层架构设计见图1。

页面表示层主要负责用户与系统的交互。WCF支持WS-*标准,其客户端可以运行在异构平台,通过WCF提供的接口与WCF服务交互。当业务逻辑改变时,页面表示层无需修改,只需保持客户端的服务不变即可,简化了客户端编程的复杂性,方便了系统维护。

WCF服务层处于基本逻辑层和页面表示层之间,对业务逻辑层进行封装和抽象。WCF服务层设计数据契约、错误契约、消息契约和服务契约及服务层接口,为页面表示层提供服务。

基本逻辑层实现WCF服务的具体内容,是系统的逻辑处理中心。基本逻辑层处于数据访问层和Web服务层之间,对上层提供逻辑处理服务,调用下层数据访问层接口连接数据库。

数据访问层为基本逻辑层提供数据库操作方法,结合ADO.NET技术,实现对数据库的链接及数据的存取操作。

2 WCF服务层设计

高校户籍管理系统主要包括户籍信息管理、信息查询管理、收费管理、操作日志管理和学院信息管理等模块,采用传统多层架构开发模式[5]。本文重点讨论WCF服务层的设计与实现。

WCF客户端在通信过程中,先生成本地代理,通过代理经过访问点与服务端对应访问点交互。访问点是实现消息交换的基础,使用地址(Address)指定提供服务位置,使用绑定(Binding)配置通讯协议,使用契约(Contract)发布服务,通过XML标准格式的WCF配置文件,对外暴露访问点,提供服务。

WCF服务层契约的设计及实现是非常重要的一步。WCF包含4种契约,分别是数据契约(Data Contract)、错误契约(Fault Contract)、消息契约(Message Contract)及服务契约(Service Contract)。

3 WCF服务层实现

以高校户籍管理系统的户籍信息管理为例,简要概述数据契约、服务契约的实现。

(1)RInfo(户籍信息)数据契约主要实现代码如下:

其中,[DataContract]指定自定义结构的数据契约RInfoRequest,WCF提供了序列化支持。RInfoResponse的定义类似,[DataMember]指定数据成员。

(2)WCF服务接口主要实现代码如下:

通常使用接口来定义服务契约。IRInfoService为定义的户籍信息服务契约名称,包含CreateRInfo()方法创建户籍信息,接收一个RInfoRequest类型参数。[Fault-Contract]指定错误和异常的错误契约。

(3)WCF服务契约主要实现代码如下:

WCF服务实现方法是在服务端继承实现IRInfoSer-vice接口。接口实现过程中,通过数据访问层Storage的InsertRInfo()方法调用Wrapper封装类,Wrapper封装对数据库存储过程调用,实现数据的增删改查。

4 访问点配置实现

通过WCF配置文件,设置访问点内容,对外提供服务。WCF配置文件采用标准的XML格式,在配置文件中对访问点属性进行设置,主要代码如下:

5 结语

架构设计是整个项目设计开发过程中非常重要的一环,WCF服务层接口的设计与实现是分布式应用的关键。本文结合高校户籍管理系统,给出WCF服务层数据契约和服务契约的具体实现方式以及访问点配置,提高了系统的互操作性,节省了后期维护费用。

下一步工作是提出一整套基于WCF的.NET多层架构解决方案并进行精简和优化,降低系统设计开发的复杂度,提高系统的可扩展性和可移植性,结合AJAX技术的使用,进一步提高用户体验。

参考文献

[1]王连泽,李希龙.利用WCF技术实现两层/三层的兼容架构[J].电脑编程技巧与维护,2015(7):10-12.

[2]赵晓鹏,卫耀伟,常晓冰.基于WCF的综合治税信息系统设计与实现[J].软件导刊,2015(5):129-130.

[3]王光琼,杜天行,未永庆,等.基于SOA构架的分布式租车公司管理系统设计与实现[J].软件导刊,2014(6):52-54.

[4]孙志中,魏嘉银,秦永彬.基于WCF和NHibernate的软件架构研究及应用[J].计算机与数字工程,2015(4):43-44.

WCF技术 篇4

一个分布式数据库是由分布于计算机网络上的多个逻辑相关的数据库组成的集合,网络中的每个结点都具有独立处理的能力,可执行局部应用,同时每个结点通过网络通讯系统也能执行全局应用[1]。

将WCF技术引入分布式数据库系统中,使系统具有更强的互操作性、兼容性、统一性以及安全性。WCF技术提供跨平台的接口,适用于不同开发环境和编程语言,增强了系统的可扩展性。

2 WCF概述

WCF(原代号为Indigo)是基于Windows平台下开发和部署服务的软件开发包。是微软基于SOA(Service Oriented Architecture)推出的.Net平台下的框架产品,它代表了软件架构设计与开发的发展方向,在微软的战略计划中占有非常重要的地位。WCF是一个用于创建和运行分布式系统的技术集合,使用它能创建安全的(Secure)、可靠的(Reliable)、跨平台的(transacted messaging along with interoperability)分布式解决方案。它的面向服务的编程模型整合了.Net平台下以往全部的分布式开发技术,例如.Net Remoting,Asp Net Xml Web Service,MSMQ,WSE和Enterprise Service等,它可以支持跨应用程序域(App Domain),进程(Process),网络(Net Work)进行数据通讯,而且能寄宿在诸如IIS,Console等多种宿主(Host)中。是微软在SOA领域推出的一款主打产品[2]。

3 WCF的技术要素

作为基于SOA的一个框架产品,WCF最重要的就是能够快捷的创建一个服务(Service)。如图1所示,一个WCF Service由三部分构成,如图1所示。

1)Service Class:一个标记了[Service Contract]Attribute的类,在其中可能包含多个方法。除了标记一些WCF特有的Attribute外,这个类与其他类没有什么区别。

2)Host(宿主):可以是应用程序,进程等,它是WCF Service运行的环境。

3)Endpoints:可以是一个,也可以是一组,它是WCF实现通信的核心要素。

一个Endpoint由三部分组成:Address,Binding,Contract。为便于记忆,我们可以将这种管理服务的方式简称为服务的ABC[2]。

Address是Endpoint的网络地址,它标记了消息发送的目的地。在WCF中,它解决了服务在哪里的问题。

Binding描述的是如何发送消息,例如消息发送的传输协议(如TCP,HTTP),安全(如SSL,SOAP消息安全)。它实现的是在客户端和服务端进行通讯的底层细节。

Contract则描述的是消息所包含的内容,以及消息的组织和操作方式,任何一个分布式应用程序,它之所以能够互相传递信息,都是事先制定好数据交换规则的,这个规则正是交换数据的双方都能彼此理解对方的依据,此规则即为契约。

WCF同以往的分布式技术相比其最大的优势在于统一和简化了分布式技术的应用。以前使用不同的分布式技术,写法大不相同。而现在,只需要进行Attribute标记,再加上配置就可以实现不同技术下的分布式通信。

4 系统分析与设计

热电厂生产经营预警系统是一个基于WCF的分布式数据库应用系统,实现热电厂整体的生产经营预警机制。本系统适用于单位分散的各个部门,允许各部门将其常用数据存贮在本地,实施就地存放就地使用,降低通讯费用,并可提高响应速度。本系统是热电厂为加强企业生产经营管理,针对电煤价格上涨波动和发电成本增支压力巨大的实际状况,在各个分散的单位建立起规范的生产经营预警机制,对经营指标实施动态控制管理,从而使经济效益指导生产。

本预警系统在设计时从整体上划分为三层:数据层,中间层和表示层。数据层包含数据存储和与之交互的组件或服务。中间层包含一个或多个组件服务,WCF的服务主要在这一层部署。表示层指从中间层获得信息并将结果显示给客户机[3]。如图2所示。

生产经营预警系统的架构图如图3所示。

5 系统基本功能设计

基于WCF的生产经营预警系统基本功能包括WCF服务功能与中心服务站功能,WCF服务功能负责将地理位置分散的各电厂的数据从各自的数据库的表中读取出来,以供中心服务站对各分散电厂数据的调用。中心服务站是本预警系统的核心部分,其功能包括以下三大模块:

基础资料管理:包括基础资料管理,机组数据录入状态查询,综合指标查询。此模块负责录入燃料相关信息,入厂标煤单价信息,利润相关信息及主要生产指标等信息,并对指定日期的综合指标进行查询。

生产经营预警:它是生产经营预警系统的核心模块,主要功能包括边际利润排序图,机组负荷率曲线图,平均电价及单位成本费用,入厂标煤单价排序图,运行机组单位盈利能力排序图,运行机组现金流预警,运行机组敏感性分析。以上多个功能对录入数据进行处理和分析,并将结果以图表的形式直观的显示出来,使决策者对边际利润,机组负荷率,机组敏感性等多条信息进行分析和判断从而做出更准确的决策。

系统管理:包括角色权限设置,机组信息管理,系统用户管理。此模块可以注册和查询角色,机组及员工信息。

6 系统服务的实现

由于地理位置不同的各电厂根据具体需要创建的时间不一致,各电厂在创建时考虑到可靠性与可扩展性等方面的问题,各自创建了独立的数据库,每个局部数据库存在一个数据字典。由于各个电厂的边际利润,入厂标煤单价等数据各有差异,数据库设计和数据编码也各不一样,这就使得系统在设计时必须要考虑跨地域、跨平台性,并且需要建立一个统一的规范来提取、分析计算、汇总各个电厂的数据信息,最终以统一的格式将发电信息显示出来,以备相关部门查看和管理。

服务的设计主要放到了中间层来实现,服务的具体实现分以下几个步骤:

1)定义并实现WCF服务契约

各部门创建WCF服务,并将服务代码放入相应的服务类中,服务接口对外开放。WCF服务实现对各个部门数据的提取和发送。

2)启动WCF服务,创建并配置WCF客户端

服务创建成功后,中心服务站通过internet将分散在各地的服务添加进来,通过引用各服务的接口,将所需数据读取出来。中心服务器对各个WCF服务引用的配置文件如下:

3)使用WCF客户端

对所得数据进行分析计算,将最终数据信息返回给浏览器,供客户端查看,使之对显示结果进行分析。

7 结束语

基于.NET的WCF技术是分布式编程领域的一个新台阶,本文简要的介绍了WCF技术的基本知识,并将其应用到生产预警系统中,使系统高度灵活,展现了基于WCF技术开发分布式数据库系统的编程方法及程序设计技巧[4]。

参考文献

[1]分布式数据库的连接[EB/OL].http://search.download.csdn.net/search/,2009.5.

[2](美)罗威(Lowy,J).wcf服务编程[M].张逸,徐宁译.机械工业出版社,2008.1.

[3]付仲恺.构建WCF面向服务的应用程序系列课程[R].2007.7.

[4]Jillzhang.WCF从理论到实践[EB/OL].http://search.download.csdn.net/search/wcf,2009.5.

[5]付磊.ASP.NET编程实作教程[M].北京希望电子出版社,2002.

浅述WCF 篇5

它可以跨进程、跨机器、跨子网、企业网乃至于Internet;可以是控制台程序, IIS, Windows Forms, Windows Service等为宿主程序;它支持TCP, HTTP, 命名管道, M SM Q等协议;它还支持SAML, Kerberos, X509, 用户/密码, 自定义等多种标准与模式。

WCF是提供统一的, 可用于建立安全、可靠的面向服务的应用的高效开发平台。

1 WCF的应用

WCF兼容了早期很多技术特性, 支持Web Service的行业标准和核心协议, 某种程度上看, 它就是ASP.NET Web Service, 因此它能胜任ASP.NET Web Service和WSE能做的事情, 跨平台和语言更不是问题 (数据也支持XML格式化, 而且提供了自己的格式化器) 。但是WCF作为微软主推一个通讯组件或者平台, 它的目标不仅仅是在支持和集成Web Service, 和传统的分布式通信框架一样, 从本质上来说, WCF符合SOA思想的技术框架, 是一套软件开发包, 提供一个跨机器、跨进程以致跨网络的服务调用。但是WCF还没有广泛运用在企业当中, 不过随着开发者的深入探究, WCF会得到普及。而且WCF整合了以前各种分布式技术, 提供对各种协议的支持, 对旧有技术在迁移的方面也提供了有利的解决途径。同时, WCF还可以结合为各企业级商务应用程序间的消息交流、应用程序集成, 使得为软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具能够搭载于应用服务器之上, 更进一步满足企业应用的不同需要。所以对于开发者而言, 学习起来就不太难。而且应用SOA解决方案的最佳选择就是WCF。WCF是面向服务的框架, 当我们需要进行大量数据的处理、挖掘、承载大量的访问负荷时, 应用系统就需要在多个服务器上运行不同服务, 所以根据不同的项目开发WCF的不同服务, 然后放在不同服务器平台上, 使得资源有效地利用, 减轻负荷。

2 WCF适合与不适合应用的举例

例1:学校内部原来有个基于.NET开发的学生管理系统, 现想利用这个系统, 开发一个网站, 显示学生的信息、结构、招聘情况等, 考虑到学校安全问题, 不允许连入学生管理系统的数据库, 则可以开发一个WCF服务, 具有查询功能, 只要两者都基于.NET, 整合起来就容易。

例2:当我们在做视频、或聊天软件时, 虽然WCF具备了很多功能, 但不适合用它来完成, 会出现性能方面的问题, 所以我们要用方便、便捷的方式来实现, 就可以直接用C、C++语言等编程来完成。

WCF自承载的优点:

(1) 易用性; (2) 灵活性; (3) 易调试性; (4) 易部署性; (5) 支持所有绑定和传输。

WCF自承载的缺点:

(1) 可用性受到限制; (2) 功能受到限制。

3 WCF的优势

3.1 统一性 (集成性)

WCF保留了ASMX, Net Remoting, Enterprise Service, WSE MSMQ等旧有技术的整合, 提供了好的解决方案。为各种应用提供了单一的编程模型。

3.2 互操作性 (跨平台)

通过标准的SOAP消息WCF可以与其他应用程序进行交互, 很好地支持了跨平台跨操作系统的的目标。

当然越复杂的功能就需要更复杂的规范来支持, 只是需要两个不同的平台之间使用相同版本的协议, 因为WCF最基本的通信机制是SOAP (简单对象访问协议) , 这种可以跨进程、跨机器甚至于跨平台的通信, 强调了互操作性的角色, 而非实现它们的平台。这就保证了系统之间的互操作性, 即是可以运行不同的上下文。

3.3 安全与可信赖

客户端和服务通过Internet进行相互通信, 需要进行身份验证, 执行要求消息完整、保密。由于WS-Security, WS-Trust和WS-Secure Conversation均被添加到SOAP消息中, 以及用于用户认证, 数据完整性验证, 数据隐私等多种安全因素, 所以大大增强了WCF在运用上的安全性与可信赖性。

3.4 兼容性

WCF作为一个通讯组件或平台, 考虑到与旧有系统的兼容性, 所以它不仅仅是在支持和集成Web Service。因此, 安装WCF并不会影响到原有的软件。并可以直接进行交互使用。

4 结语

对于使用.NET Framework进行软件研发的开发人员来说, WCF是分布式编程领域的一个新台阶, 关注WCF技术的发展并在实际开发项目中合理地运用它是十分必要的。开发系统的时候, 也要做个权衡, 综合多方面的因素。

参考文献

[1]Juval Lowy著, 张逸, 徐宁译《.WCF服务编程》[J].北京:机械工业出版社, 2008.

[2]Michele Leroux Bustamante著, 庞引明, 侯伯薇译《.学习WCF:从原理到实践》[J].北京:电子工业出版社, 2008.

[3]Craig McMurtry著, 赵科平译《.WCF揭秘》[J].北京:人民邮电出版社, 2008.

浅谈基于WCF的事务处理 篇6

1 启用事务流

WCF能够跨越服务边界传播事务, 使服务能够参与客户端的事务, 并使客户端能够在同一事务中包含对多个服务的操作调用。绑定和操作合同配置二者都会控制客户端事务是否传播给服务的决策。

服务宿主或管理员必须显式同意接受可能来自跨组织或跨业务边界传入的事务。若要传播事务, 必须在服务宿主和客户端的绑定上都显式启用它。能够将客户端的事务传播给服务的绑定称为事务感知, 包含有NetTcpBinding、NetNamedPipeBinding、WSHttpBinding、WSDual Http Binding、WSFederationHttpBinding五种绑定。所有事务感知绑定都提供布尔属性TransactionFlow, 其默认值为False。若要启用传播, 需要以编程方式或在宿主配置文件中将此属性设置为True。

2 事务流的流动权限

使用了事务感知绑定并且启用了事务流, 这仅是服务要使用客户端的事务或者传播客户端事务所需条件的一部分。WCF提供了TransactionFlowAttribute属性控制客户端的事务是否流入服务中以及何时流入。

TransactionFlow属性是方法级属性, WCF只能在每个服务的操作级别做出关于事务流的决策, 其目的使服务可以自由选择是否使用客户端事务, 从而实现颗粒度。TransactionFlowAttribute的值包含在服务的已发布元数据中, 当导入合同定义时, 导入的定义将包含该配置后的值。这些属性是TransactionFlowOption.NotAllowed、TransactionFlowOption.Allowed和TransactionFlowOption.Mandatory。如果通过属性TransactionFlowOption.NotAllowed将操作配置为禁止事务流, 即使在绑定中启用了事务流, 并且客户端有事务, 也不会传播给此服务。

通过使用Transaction Flow Option.Allowed将操作配置为允许事务流时, 服务绑定既可以是事务感知绑定也可以是非事务感知绑定;如果客户端有事务, 则服务将允许客户端的事务跨服务边界流动。但在已经传播了客户端的事务的情况下, 服务也不一定会使用该事务。选择Transaction Flow Option.Allowed时, 客户端和服务必须在其绑定配置中实现兼容。如果服务操作允许事务流, 但绑定禁止事务流, 则客户端也应当在其绑定中禁止它。尝试使客户端事务流动, 将会导致错误, 因为服务将无法了解消息中的事务信息。但是, 当服务器端绑定配置被设置为允许事务流时, 客户端不一定希望在它这一端启用传播, 可能因此选择在绑定中将TransactionFlow设置为False, 即使服务已将它设置为True。

当配置此操作为TransactionFlowOption.Mandatory时, 服务和客户端必须启用事务感知绑定中的事务流。TransactionFlowOption.Mandatory意味着客户端必须将事务传播给服务。如果在没有事务的情况下尝试调用服务, 则在客户端会引发异常。使用强制流时, 客户端的事务将始终传播给服务, 但是服务不一定使用客户端的事务。

向客户端事务传播服务要求 (由其性质决定) 允许服务可以选择是否中止客户端事务。这意味着无法使客户端事务通过单向操作流向服务, 因为该单向操作无法获得应答消息。WCF将在服务加载时验证这一点, 如果配置单向操作用于除TransactionFlowOption.NotAllowed以外的属性, 将引发异常。

3 服务对事务作用域的获取

该Transaction类来自System.Transactions命名空间, 用于表示WCF事务。环境事务是指用于当前正在执行的代码的事务, 环境事务对象被存储在线程本地存储中。通过调用Transaction的静态Current属性来获得对环境事务的引用:

如果没有环境事务, Current将返回null。每个代码块 (无论是客户端还是服务) 都始终可以访问其环境事务。在WCF的上下文中, 环境事务极其重要。如果存在环境事务, 任何WCF资源管理器 (例如, SQL ServerTM或不稳定资源管理器) 都将在环境事务中自动登记。当客户端调用WCF服务时, 如果客户端有环境事务和绑定, 并且合同被配置为允许事务流, 则环境事务将传播给服务。

Transaction类用于本地事务, 也用于分布式事务。如果不需要分布式事务支持, WCF将使用本地事务管理器。如果客户端尝试将它的事务流向服务, 或者涉及多项持久资源, 则事务将被提升为分布式事务, 并由分布式事务控制 (DTC) 进行管理。每个事务有两个标识符, 用于标识本地事务和分布式事务。通过访问Transaction类的TransactionInformation属性, 可以获得事务标识符。

对于服务来说, WCF提供了简单而出色的声明性编程模型。默认情况下, 服务类和它的操作没有环境事务。即使在将客户端事务传播给服务时, 也是如此。为了具有环境事务, 对于每个合同方法, 服务都必须通过使用OperationBehavior属性的TransactionScopeRequired属性, 表明它希望WCF为事务限定方法主体的作用域。

Transaction Scope Required的默认值是False, 所以默认情况下服务没有环境事务。如果将TransactionScopeRequired设置为True, 则可以提供具有环境事务的操作:

如果客户端事务被传播给服务, WCF会将客户端事务设置为操作的环境事务。否则, WCF将为该操作创建新事务, 并将新事务设置为环境事务。图1中的关系图演示了作为绑定配置、合同操作以及本地操作行为属性的结果, WCF服务使用了哪个事务。

在图1中, 非事务性客户端调用Service 1, 操作合同使用TransactionFlowOption.Allowed进行配置。即使在绑定中启用了事务流, 由于客户端没有事务, 因此不传播事务。Service 1上的操作行为被配置为需要事务作用域。因此, WCF为Service 1创建了新事务A。然后, Service 1调用了其他三个配置各不相同的服务。

由于Service 2的绑定启用了事务流, 而且由操作合同强制客户端事务的流动。由于操作行为被配置为需要事务作用域, 因此, WCF将事务A设置为Service 2的环境事务。对Service 3的调用绑定没有启用事务流, 并且操作合同禁止事务流流动。但是, 由于Service 3的操作行为需要事务作用域, 因此, WCF为Service 3创建了新事务B, 并将它设置为Service 3的环境事务。对Service 4的调用绑定也没启用事务流, 并且操作合同禁止事务流。由于Service 4不需要事务作用域, 因此它没有环境事务。

4 事务的表决和完成

尽管WCF负责事务传播的各个方面以及跨资源提交或中止事务的整体管理工作, 但它并不知道事务应当提交还是中止, WCF无法知道对系统状态的更改是否是一致的。每个参与事务的服务都必须对事务应当提交还是中止进行表决。此外, WCF不知道事务何时结束, 以及所有服务何时完成其工作。这需要根服务给出指示。

WCF可以自动代表服务对提交或中止事务进行表决。自动表决由OperationBehavior属性的TransactionAutoComplete布尔属性进行控制:Transaction Auto Complete属性默认值为True。当设置为True时, 如果操作中没有未处理的异常, WCF将自动表决提交事务。如果有未处理的异常, WCF将表决中止事务。

事务何时结束由它的启动者决定。假设一个客户端没有事务或者没有将它的事务传播给服务, 并且该客户端调用了Transaction Scope Required被设置为true的服务操作。这样, 该服务操作就成为事务的根。根服务可以调用其他服务, 并将事务传播给它们。一旦根操作完成事务, 事务就将结束。它的作用不仅仅是表决;它还可以完成和终止根服务的事务。注意, 被根操作所调用的任何下游服务都只能对事务表决, 只有根服务才能表决并完成事务。

5 事务传播模式

事务传播模式由绑定的流属性 (两个值) 、操作合同中的流选项 (三个值) 和操作行为中的事务作用域属性的值 (两个值) 决定, 有12种可能的配置设置。这12个值中, 有4个不一致, 被WCF排除。图2列出了剩余的8种排列。

这8种排列共产生四种事务传播模式, 分别是客户端/服务模式、客户端模式、服务模式和无模式。在四种模式中, Service和None模式比较特殊, 可能会对系统的一致性产生潜在的威胁, 避免使用。重点介绍客户端/服务模式和客户端模式。

客户端/服务模式确保服务如果可能则使用客户端事务, 当客户端没有事务则使用服务端事务。客户端/服务模式是最分离的配置, 因为服务对客户端活动的假设程度最低。如果客户端有要流动的事务, 则服务将加入客户端事务。加入客户端事务总是对系统总体一致性有利。假设服务的某个事务与客户端的某个事务分离:这将使两个事务中的某一个有可能在另一个中止时被提交, 从而使系统处于不一致状态。

当服务加入客户端事务后, 由客户端和服务执行的所有工作 (并且可能包括客户端调用的其他服务) 将作为一个不可分割的操作被提交或中止。如果客户端没有事务, 服务仍然需要保护事务, 这样, 通过使服务成为新事务的根, 该模式向服务提供了临时事务。当服务可以独立使用, 或者它可以用作更大事务的组成部分时, 则适用客户端/服务模式。

客户端模式

如果根据设计要求服务必须使用它的客户端的事务, 并且永远不能单独使用服务时, 则应当选择客户端事务模式。因为被访问的所有资源都将登记在同一事务中, 因此, 不会有其他事务来争夺对相同资源和基本锁定的访问。这样避免死锁, 并最大程度实现系统总体一致性。Figure5配置客户端事务模式

6 结束语

WCF对事务的支持和它所提供的事务管理使开发人员所要做的只需设置少量属性在绑定中启用流, 选择合适的逻辑事务传播模式, 通过对服务器端配置文件、接口的方法和接口类上面属性的修改, 就能其轻松实现事务的创建、传播与管理, 增强了程序的可靠性, 减轻了开发者的劳动量, 提高工作效率。WCF中的事务支持意义不止如此, 在同步和实例管理方面也提供了强大的支持。

参考文献

[1]Juval Lowy Programming WCF Services O'Reilly2007.02.

WCF技术 篇7

经过二十多年的信息化建议, 目前我国已经建立起网络化、信息化、电子化的税务应用系统, 在此基础上, 税务系统下一步目标是实现互联互通、资源共享, 此时遇到的难题有:1) 现有的老系统存在异构性, 数据集成困难。老系统可能是不同的开发商开发, 运行在不同平台上, 采用不同的技术标准, 把这些老系统与新系统集成起来具有难度。2) 为适应税目、新业务的变化, 需要快速开发、增加系统新功能。3) 要求通过互联网提高政务效率及数据共享[1,2]。根据税务系统的现状, 采用面向服务架构 (Service-Oriented Architecture, SOA) 的分布式架构是解决税务新老系统集成最有效的方法。SOA是基于互联网集成异构系统, 消除信息孤岛的基本方案[3], 它常见的支持开发包如Sun的J2EE、IBM的Websphere等, 在实际应用中已经取得成功[4]。

Windows Communication Foundation (WCF) 是微软公司一套.NETFramework环境下SOA的开发平台, 已经集成在Visual Studio 2010等开发环境中, 目前越来越广泛地应用于各种SOA分布式系统开发[5]。本文通过一个个税查询案例探讨WCF架构下分布式税务系统的开发过程。

1 WCF下个税查询的实现过程

WCF下个税查询采用富客户端访问远程服务器上Web服务 (Web Service) 的方式工作, 使用Visual Studio 201为+IIS服务器软件开发。富客户端采用win Form形式。个税查询的基本要求:客户端给出查询的身份证号和被查询的年份, 服务器端返回该年份各月已经缴纳的个税。WCF是采用Web服务方式工作, 所以个税查询分成服务器端、客户端两边编程, 实现过程如下。

1.1服务器端的编程

服务器端的编程主要包含三个关键步骤:先定义一个服务接口, 在其中定义对外暴露的业务逻辑函数;再为接口写一个实现类, 实现业务逻辑函数;最后是编写配置信息, 把此服务部署到IIS上, 供客户端调用。

1) 定义服务接口的代码片段如下:

上述代码第1行声明上下文引用System.Service Model。第2行定义命名空间, 采用逆域名方式。第4行用[Service Contract]说明接口是一个WCF的服务接口。第5行定义一个服务接口。第7行[Operation Contract]说明业务逻辑函数是一个WCF的函数。第8行在接口中定义一个业务逻辑函数query () , 调用它时传入身份证号ID和查询的年份year, 返回字串形式的缴税记录。

2) 服务接口的实现类。

实现类要实现接口中的业务逻辑函数。代码片段如下:

上述代码片段中, 第2行实现接口。第6~8行根据输入的身份证号、查询年份, 构造SQL语句后通过ADO.NET查询后台数据库, 最后返回结果。

3) 部署服务。

运行VS2010的WCF部署工具, 产生部署信息, 关键的部署信息片段如下示:

上述部署信息中, 第3行表示部署接口实现类。第5行定义客户端调用业务服务的URL名。

1.2富客户端编程

运行VS2010, 新建一个服务终结点, 所设置的address、binding、contract与查询服务一致。在win Form窗体上放置身份证号码、查询年份两个文本框架, 单击查询按钮后调用服务, 结果打印在窗体上。如图1示。

2结论

WCF是微软公司在.NET环境下的一种SOA开发方案, 已经集成在Visual Studio 2010开发环境中, 是.NET Framework的重要组成部分, 具有易用、易开发、易部署等优点, 是税务新、老系统的一种快速集成方法, 在税务系统开发中有重要的应用前景。

参考文献

[1]宋海根, 张亚东.基于J2EE税务系统持久层Hibernate解决方案[J].微计算机信息, 2007, 3:223-224.

[2]邓海伟, 徐秋亮, 王忠天.基于J2EE的电子税务系统设计[J].计算机工程与设计, 2004, 25 (4) :606-608.

[3]张海军, 史维峰, 刘伟.基于SOA企业应用集成框架研究与实现[J].计算机工程与设计, 2008, 28 (8) :2085-2088.

[4]欧阳慧, 杨贯中, 陶勇.基于SOA/J2EE电信增值业务AAA系统的设计与实现[J].计算机工程与科学, 2005, 27 (9) :108-110.

WCF技术 篇8

深圳某货代公司原有的应用系统一直采用传统模式的信息系统,由相互独立的各个子系统组成,不同的子系统采用不同技术和平台开发,造成各子系统之间的信息相互独立,存在着较严重的“信息孤岛”问题,在数据共享与数据同步方面存在严重的问题,如各应用系统之间的公司组织架构和用户信息,目前企业的发展也已经受到了较严重的制约。基于WCF的统一用户视图(Union User View,简称UUV)服务组件的设计正是基于上述问题而提出的,它采用面向服务体系架构(SOA)思想和理论模式并应用WCF服务编程技术实现的轻量级服务组件,以统一服务的方式对公司组织架构和用户基本信息进行管理,并提供接口规范供各应用系统调用以获取公司组织架构和用户基本信息,并保证整个货代企业公司的用户账号一致,同时可实现一个用户多重身份的功能,很好地实现了货代公司组织架构和用户基本信息在各应用系统之间的数据共享与数据同步。

1 SOA研究概述

面向服务的体系架构(Service Oriented Architecture,SOA)是信息化技术迅速发展下的一种全新的体系架构,是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构[2]。SOA正成为新一代企业软件架构的主流和趋势,将会为整个企业级软件架构设计带来巨大的影响。

基于SOA的架构设计把原有的功能封装成服务,以服务或服务组合的形式组成业务流程,提高了已部署系统的灵活性,同时避免了因为业务变化而重新构建系统或者作大改动的麻烦,它不仅可以快速地对业务的变化作出响应,同时也能解决各应用系统之间存在的“信息孤岛”问题,更好地实现数据共享与数据同步,而且能够适合企业动态性的架构,可以对企业的各种实际业务与功能需求做出快速反应,真正做到随需而变[1]。

2 WCF服务编程技术

Windows通信基础(Windows Communication Foundation,WCF),是微软基于SOA推出的.Net平台下的框架产品,它代表了软件架构设计与开发的一种发展方向,是微软推出的在Windows操作系统下开发面向服务应用程序的统一平台[4]。WCF是微软应对SOA战略而推出的一套基于.NET Framework下的SDK[5]。在基于WCF的统一用户视图服务组件设计与实现中,将利用WCF服务编程技术来实现组件所需各类服务的开发,包括数据契约和服务契约的定义、基本服务实现;并结合.NET组件开发技术完成服务组件的实现。WCF集成了.NET编程开发的习惯,极大地提高了基于SOA的应用系统开发的效率,保证了服务编写的规范性和高质量[5]。

3 统一用户视图服务组件的分析与设计

3.1 UUV概述

统一用户视图,Union User View,简称UUV,是为管理员进行公司组织架构和用户基本信息管理,并提供接口规范供各应用系统调用以获取公司组织架构和用户基本信息,并保证整个货代企业公司的用户账号一致,同时可实现一个用户多重身份的功能。

3.2 逻辑结构

根据货代企业实际的业务需求,统一用户视图的逻辑结构如图1所示。

统一用户视图的逻辑结构主要包括以下几个部分:

用户信息库:存放组织机构及用户信息,用户信息保持与Active Directory同步,组织机构信息以信息库为准。

单点认证中心:对外提供开放式协议标准的HTTP接口和Web Services接口,供用户和独立应用系统(IAS)完成单点登录操作。

组织机构及用户管理:提供一系列用户管理界面,管理用户及组织机构信息。

应用管理模块:管理应用系统角色权限控制,用于门户个性化展现。

管理及查询接口:为应用系统提供查询用户相关信息接口,同步实现用户信息同步至各应用系统接口。

3.3 功能结构

统一用户视图中包括的功能模块和功能点如图2所示。

3.4 用户模型

统一用户视图的本质,就是维护好机构、人员和人员组三者之间的关系。它们之间的关系图3所示。

组织机构及用户管理的管理对象是深圳某货代企业所有的机构以及所有的工作人员,可以将机构和人员抽象为以下三个概念:

组织机构(ORG):是实际的货代集体企业各部门的抽象概念

人员或者用户(User):是现实中实际存在的人的抽象概念。规定一个人至少存在于一个部门下,即一个人员必须至少从属于一个机构,但一个人可属于多个组织机构。

组(Group):是人员或者部门的集合,统一用户视图只管理全局组,本地应用组由各应用系统维护。

组织机构、人员(用户)、组的数据关系如图4所示。

3.5 统一用户视图(UUV)服务组件接口设计

在基于WCF的统一用户视图服务组件的接口设计中,提供了内部接口和外部接口,内部接口主要提供给内部应用系统使用,外部接口主要提供给下属单位在构建第三方的应用系统时使用。服务组件接口架构图5所示。

1)内部接口设计

内部接口主要提供给内部应用系统使用[9],例如客户管理、销售管理等子系统,接口以内部服务方式提供,为了保障统一用户视图管理的唯一性,全部服务接口设计为只读属性。在应用系统中新建名为UUVInfo4Intranet SVC的服务,提供统一用户视图的内部接口调用,包括了查询用户信息、查询组织信息、查询所有的组织、查询组信息等接口。

2)外部接口设计

外部接口主要提供给下属单位在构建一些其他应用应用系统时,需要使用到用户、组织架构等信息时,方便构建第三方的应用系统。在应用系统中新建名为UUVInfo4-Internet SVC的服务,提供统一用户视图的外部接口调用其接口包括了同步用户信息、同步组织机构信息、同步组信息、查询组织接口等。

4 统一用户视图服务组件的实现

根据统一用户视图服务组件设计的要求,将服务组件中可能被多次用到的功能模块设计成服务,每一个功能模块都有多项功能组成,其中每一个功能就是一个基本服务。基本服务的实现包括了数据契约的定义、服务契约即服务接口的定义、服务的实现[7]。

4.1 数据契约定义

数据契约,即Data Contract,定义了与服务交互的数据类型[4]。WCF为内建类型如int和string隐式地定义了契约,也可以非常便捷地将定制类型定义为数据契约。

在统一用户视图中,用户信息包括了用户ID、用户登录帐号、用户中文名、用户英文名、岗位、办公电话、手机、小灵通、传真、E-mail等,因此需要对用户相关的信息定义好数据契约,以供服务消费者在调用服务是使用。用户信息数据契约定义如下:

由于Data Contract将被序列化以及反序列化,因此类型中成员的顺序也相当重要,在Data Member Attribute中,提供了Order属性,用以设置成员的顺序[4]。

4.2 服务契约定义

服务契约,即Service Contract,又称服务接口,描述了客户端能够之下的服务操作[4]。与面向对象的编程类似,在程序的编写过程中先完成对服务接口的定义,然后在完成对服务操作实现[6]。

在WCF服务编程中,使用特性Service Contract Attribute标定服务契约,Operation Contract Attribute标定服务方法服务实现。IUser SVC的服务接口定义具体如下:

Operation Contract只能用于Method,只有添加了此特性的方法才能被客户端调用。SOA只是分布式系统的架构体系,在架构体系内部依然采取面向对象的原则来编码,所以标注私有方法是不被推荐的,这也是使用接口作为服务契约的一个好处[10]。

4.3 服务操作实现

在服务操作的实现过程,也将会涉及到对业务逻辑层相应方法的调用,业务逻辑层又会调用到数据处理层方法的调用,对于数据处理层和业务逻辑层的实现属于传统的面向对象多层结构编程[8],在此将不再做详细介绍。

首先在项目中添加为User SVC的WCF Service的新项,此时将会产生两个文件User SVC.svc和App Code目录下的User SVC.cs文件。其中User SVC.svc文件是WCF服务中用于识别隐藏在文件和类后面的服务代码,类似与.asmx文件;而User SVC.cs文件将是完成对服务契约(接口)操作实现的类文件。具体实现代码如下所示:

5 结束语

基于WCF的统一用户视图服务组件采用面向服务体系架构(SOA)思想和理论模式,并结合.NET组件开发技术和WCF服务编程技术实现的一套轻量级服务组件,以统一服务的方式对公司组织架构和用户基本信息进行管理,很好地解决了货代企业信息系统中各子系统之间存在的“信息孤岛”问题,并保证整个货代企业公司的用户账号一致,同时可实现一个用户多重身份的功能,更好地实现了公司组织架构和用户基本信息在各应用系统之间的数据共享与数据同步。

摘要:基于WCF的统一用户视图(Union User View,简称UUV)服务组件采用面向服务体系架构(SOA)思想和理论模式并应用WCF服务编程技术实现的轻量级服务组件,以统一服务的方式对公司组织架构和用户基本信息进行管理,并提供接口规范供各应用系统调用以获取公司组织架构和用户基本信息,并保证整个货代企业公司的用户账号一致,同时可实现一个用户多重身份的功能,更好地实现了公司组织架构和用户基本信息在各应用系统之间的数据共享与数据同步。

关键词:统一用户视图,WCF,面向服务体系架构,服务组件

参考文献

[1]李巍.构建下一代软件架构SOA[EB/OL].http://tech.51cto.com/art/200601/16242.htm,2006.

[2]单建洪,卢中延.SOA整合之道[M].北京:电子工业出版社,2008.

[3]SOA在行业中的应用[EB/OL].http://www.ibm.com/developerworks/cn/webservices/ws-soaapp/index.html,2004.

[4]Juval Lowy.WCF服务编程[M].张逸,徐宁,译.北京:机械工业出版社,2008.

[5](美)Craig M.Marc M.Nigel W.等著.WCF揭密[M].赵科平,译.北京:人民邮电出版社,2008.

[6]沙为超.基于Web服务的SOA应用研究[J].安徽大学,2007.

[7]郭春燕.基于SOA的企业应用的研究与实现[J].大连理工大学,2005.

[8]郭晋伟.SOA架构的管理信息系统设计与实现[J].中国科学研究生院,2006.

[9]朱振杰.SOA的关键技术的研究与应用实现[J].四川:电子科技大学,2006.

[10]张逸.WCF基础知识问与答[EB/OL].http://www.cnblogs.com/wayfarer/archive/2008/04/15/1153775.-html,2008.

上一篇:记者的暗访技巧下一篇:学生日常备考策略