基于.NET的 IMS服务器设计与实现

  • 格式:pdf
  • 大小:479.23 KB
  • 文档页数:9

基于.NET的IMS服务器设计与实现

师耕宇,李绍胜 北京邮电大学信息与通信工程学院,北京 (100876) E-mail: univer.shi@gmail.com 摘 要:本文给出了一种基于.NET技术的IMS服务器设计。该服务器通过对reSIProcate协议栈进行封装,支持了用.NET开发应用服务器,从而实现服务器功能可扩展。同时为支持轻量级终端接入服务器,提出了一个基于XML的轻量级协议。文中首先介绍了服务器的总体设计,包括协议栈、应用服务器、消息分发模块和数据库与数据访问模块的设计。然后针对其中的重点模块进行展开,描述了模块的详细设计。最后,阐述了服务器的部署方式,以及设计中的不足,并提出了改进方案。 关键词:IMS;SIP;.NET;服务器;应用服务器 中图分类号:TP393.09

1 引言

IMS(IP Multimedia Subsystem)即IP多媒体子系统,由3GPP标准组织在R5版本基础

上提出,是在基于IP的网络上提供多媒体业务的通用网络架构。IMS技术对控制层做了进

一步分解,实现了会话控制实体CSCF(Call Session Control Function)和承载控制实体MGCF

(Media Gateway Control Function)在功能上的分离,使网络架构更为开放、灵活[1]。

本文中介绍的IMS服务器主要实现了CSCF和HSS的功能,并且在此基础上开发了基

本的应用服务器,用于支撑即时消息等基本的IMS业务。该服务器除了支持基于SIP[2]协议

的终端接入,还提供了一套基于XML的消息类型,用于支持一些无法使用SIP协议的轻量

级终端接入服务器并和SIP终端实现通信。

2 服务器总体设计

2.1 服务器架构图

服务器总体架构主要分为四部分,即协议栈、消息分发模块,应用服务器和数据访问模

块。总体架构图如图1所示。

2.2 协议栈设计

协议栈的设计分为三部分:SIP协议栈、XML-SIP协议栈和统一格式消息。

SIP协议栈的设计基于开源的reSIProcate[3]协议栈。reSIProcate协议栈是一套功能完整

的SIP协议栈,其中提供了完整的SIP事务机制,因此重用reSIProcate协议栈可以节省大量

的开发成本。但reSIProcate使用C++语言编写,而上层应用使用C#语言开发,并且C#语言

在与C++进行互操作时不宜传递结构体等复杂类型,因此本服务器的协议栈采用了封装

reSIProcate并对上层提供托管代码接口的方案。

如图1中所示, BaseSipStackLib使用托管C++[4]语言对reSIProcate进行封装,为

SipStackLib提供托管接口。SipStackLib使用C#语言编写。SipStackLib使用BaseSipStackLib

的托管接口[5],对reSIProcate进行调用,发送、接收并处理SIP消息。 http://www.paper.edu.cn 中国科技论文在线

-2- XML-SIP是一套基于SIP协议定制的消息库。该库的功能在于为非SIP终端提供一种

和服务器通信的方式。XML-SIP消息通过WEB服务和TCP两种方式和外网通信。只要终

端能够解析XML消息,从中提取信息,就能和服务器进行通信。

统一格式消息的设计目的在于在服务器内部统一SIP和XML-SIP两种协议。通过适配

器,SIP协议和XML-SIP协议可以被转化为统一格式消息。统一格式消息中携带SIP和

XML-SIP中的所有信息。当服务器收到一个SIP消息或XML-SIP消息,服务器会将其转化

为统一格式消息,并送入应用服务器进行处理。处理后的响应消息仍然为统一格式消息。此

时服务器会根据用户的类型,将统一格式消息转为响应的SIP消息或XML-SIP消息,并将

其发送给终端用户,从而实现终端和服务器之间的请求-响应机制。

2.3 应用服务器设计

应用服务器的设计基于一种可扩展的架构。每个逻辑上的应用服务器实际中表现为一

个.NET程序集。每个应用服务器程序集包含一个入口点服务。该服务是一个实现了

IExtensionService接口的类。基于MEF[6]库提供的依赖注入功能,该类的实例会被MEF放

入对象池。服务器在启动时会扫描所有的应用服务器程序集,并将每个应用服务器的入口点

服务以单例模式[7]放入对象容器中。应用服务器入口服务类及接口设计如图2所示。

每个应用服务器包含一个ProcessMessage方法。该方法接收一个统一格式消息,并对其

进行处理。如果消息是请求,应用服务器会在处理过程中发送该消息的响应。

图1 IMS服务器总体架构图 http://www.paper.edu.cn 中国科技论文在线

-3-

2.4 消息分发模块设计

消息分发模块的功能在于将从网络接收到的SIP或XML-SIP消息送到相应的应用服务

器进行处理,并将应用服务器返回的响应发送到终端用户。消息分发模块分为两部分,即消

息分发器和服务定位器。

消息分发器的设计采用了职责链模式[7][8]。2.3节中提到,每个应用服务器的入口点服务

会在服务器程序启动时被加载到对象容器中。在服务器启动时,应用服务器会向消息分发模

块注册自己所能处理的消息类型。消息分发器从网络收到一条消息时,会根据消息的类型和

内容利用消息定位器定位能够处理此消息的一个或多个应用服务器,并将消息发送到相应的

应用服务器进行处理。一个消息可能被多个服务器处理,因此服务器在注册的时候会提供一

个优先级参数,即IExtensionService中的Priority属性。消息分发器根据优先级判断应该最

先将消息发送到哪个服务器。一个消息可能被一个或多个应用服务器处理,因此每个应用服

务器会说明自己是否是一个中间处理服务器,即IExtensionService中的IsMesneService属性。

如果应用服务器是一个中间处理服务器,消息在处理后会被送到下一个能够处理此消息的应

用服务器中;否则,消息的处理过程将结束。

消息分发流程图如图3所示。

 图2 应用服务器入口服务类及接口设计 http://www.paper.edu.cn 中国科技论文在线

-4-

2.5 数据库及数据访问模块设计

本系统的数据库使用Microsoft SQL Server

2005,并使用.NET的LINQ to SQL[9]对数据进行持

久化。在LINQ to SQL上层使用Data Repository对

LINQ to SQL的Data Context进行封装,同时为Data

Service提供数据。Data Service分为接口和实现两

部分。上层的应用服务器等业务逻辑通过接口访问

Data Service,这样可以屏蔽下层数据的变动,提高

系统的可维护性。

数据库及数据访问层设计如图4所示。

图3 消息分发流程图

图4 数据库及数据访问层设计 http://www.paper.edu.cn 中国科技论文在线 3服务器详细设计

3.1 SipStackLib中SIP消息及消息头详细设计

SIP协议栈中,SIP消息和SIP消息头是最经常被使用的对象。图4中以From消息头为

例展示消息、消息头、消息解析器之间的关系。

一个SIP消息中包含一个消息头列表,其中保存着属于该消息的所有消息头对象。SIP

消息对象中针对每一种消息头存在一个对应的属性,如图4中SipMessage类性的From属性,

引用一个SipFrom消息头对象。每个消息头类型拥有相同的SipHeader基类型。

每个消息头类型都对应一个解析器,负责从BaseSipStackLib中解析消息头,并返回

SipStackLib中的消息头类型对象。

3.2 协议适配器详细设计

协议适配器的设计采用了适配器模式[7][8]。如图1中所示,SIP消息或XML-SIP消息在

送入应用服务器之前会被适配成统一格式消息。应用服务器处理消息后,响应也会被送入协

议适配器,从而被还原成相应的消息。XML-SIP协议的适配方式与SIP协议相同,在此仅

以SIP协议适配器为例说明。

SIP协议适配器分为两个部分,即消息适配器和消息头适配器。两种适配器的设计思想

采用设计模式中的适配器模式。以Invite消息为例,适配器的设计如图6所示。

图5 SIP消息及消息头类图 http://www.paper.edu.cn 中国科技论文在线

-6- 图中SipInviteMessageAdapter为适配器。该类实现了统一格式消息中的IInviteMessage

接口,同时引用一个SipInviteMessage对象。从而使上层的业务逻辑可以通过IInviteMessage

的接口操作SipInviteMessage对象。SipInviteMessageAdapter中的InnerMessage属性即为

SipInviteMessage对象的引用。

消息头适配器中,以From消息头适配器为例,SipFromAdapter实现了统一格式消息中

的IFrom接口,同时引用一个SipFrom对象。从而使上层的业务逻辑可以通过IFrom接口操

作SipFrom对象。From消息头适配器类图如图7所示。

3.3 点对点通话服务器详细设计

点对点通话服务器的功能在于支持两个终端建立、拆除对话。在SIP协议中,从主叫用

户开始拨打被叫到挂机的完整过程称为一个对话。一个对话中包含多个有状态的SIP事务,

因此点对点通话服务器中需要维护对话的状态。

基于以上分析,点对点通话服务器使用.NET WF[10][11],即工作流技术实现。每个消息

到来时,点对点入口服务会根据消息类型触发相应的工作流事件,并将消息传递到工作流中

进行处理。.NET WF使开发者能够清晰地设计工作流的具体流程,降低了开发成本和软件

的可维护性。

图6 Invite消息适配器设计 

图7 From消息头适配器设计 http://www.paper.edu.cn 中国科技论文在线