动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 软件工程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ 软件工程 ]的信息



本月文章推荐
.利用微软Atlas消费外部Web服务.
.测试工具应用之我见.
.微软加强面向服务架构SOA开发.
.面向服务的体系结构SOA概述.
.Windows 工作流活动技术概览.
.“6 Sigma”品质管理的研究.
.Reactivity公司Nash:是谁在决定.
.为什么要用UML建模之面向对象建模.
.JAVA设计模式之事务处理.
.统一建模语言UML轻松入门之动态建.
.IBM发布11项新品 加速实现SOA.
.SOA之后是SOBA.
.新上任项目经理遇到的难题.
.从六个角度分析流程建模.
.基于UML的系统分析方法研究.
.有效的软件质量管理.
.品质管理简介.
.如何为嵌入式开发建立交叉编译环.
.清除window 2000/XP系统中的无用.
.设计安全的Visual Studio.NET互联.

消息与.Net Remoting的分布式处理架构

发表日期:2008-3-23 |



  分布式处理在大型企业应用系统中,最大的优势是将负载分布。通过多台服务器处理多个任务,以优化整个系统的处理能力和运行效率。分布式处理的技术核心是完成服务与服务之间、服务端与客户端之间的通信。
在.Net 1.1中,可以利用Web Service或者.Net Remoting来实现服务进程之间的通信。本文将介绍一种基于消息的分布式处理架构,利用了.Net Remoting技术,并参考了CORBA Naming Service的处理方式,且定义了一套消息体制,来实现分布式处理。     一、消息的定义       要实现进程间的通信,则通信内容的载体——消息,就必须在服务两端具有统一的消息标准定义。从通信的角度来看,消息可以分为两类:Request Messge和Reply Message。为简便起见,这两类消息可以采用同样的结构。       消息的主体包括ID,Name和Body,我们可以定义如下的接口方法,来获得消息主体的相关属性:
消息与.Net Remoting的分布式处理架构 public interface IMessage:ICloneable 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 IMessageItemSequence GetMessageBody(); 消息与.Net Remoting的分布式处理架构 string GetMessageID(); 消息与.Net Remoting的分布式处理架构 string GetMessageName(); 消息与.Net Remoting的分布式处理架构 消息与.Net Remoting的分布式处理架构 void SetMessageBody(IMessageItemSequence aMessageBody); 消息与.Net Remoting的分布式处理架构 void SetMessageID(string aID); 消息与.Net Remoting的分布式处理架构 void SetMessageName(string aName); 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构
  消息主体类Message实现了IMessage接口。在该类中,消息体Body为IMessageItemSequence类型。这个类型用于Get和Set消息的内容:Value和Item:
消息与.Net Remoting的分布式处理架构 public interface IMessageItemSequence:ICloneable 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 IMessageItem GetItem(string aName); 消息与.Net Remoting的分布式处理架构 void SetItem(string aName,IMessageItem aMessageItem); 消息与.Net Remoting的分布式处理架构 消息与.Net Remoting的分布式处理架构 string GetValue(string aName); 消息与.Net Remoting的分布式处理架构 void SetValue(string aName,string aValue); 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构

  Value为string类型,并利用HashTable来存储Key和Value的键值对。而Item则为IMessageItem类型,同样的在IMessageItemSequence的实现类中,利用HashTable存储了Key和Item的键值对。       IMessageItem支持了消息体的嵌套。它包含了两部分:SubValue和SubItem。实现的方式和IMessageItemSequence相似。定义这样的嵌套结构,使得消息的扩展成为可能。一般的结构如下:       IMessage——Name
                     ——ID
                     ——Body(IMessageItemSequence)
                            ——Value
                            ——Item(IMessageItem)
                                   ——SubValue
                                   ——SubItem(IMessageItem)
                                          ——……       各个消息对象之间的关系如下: 消息与.Net Remoting的分布式处理架构
      在实现服务进程通信之前,我们必须定义好各个服务或各个业务的消息格式。通过消息体的方法在服务的一端设置消息的值,然后发送,并在服务的另一端获得这些值。例如发送消息端定义如下的消息体:
消息与.Net Remoting的分布式处理架构 IMessageFactory factory = new MessageFactory(); 消息与.Net Remoting的分布式处理架构 IMessageItemSequence body = factory.CreateMessageItemSequence(); 消息与.Net Remoting的分布式处理架构 body.SetValue("name1","value1"); 消息与.Net Remoting的分布式处理架构 body.SetValue("name2","value2"); 消息与.Net Remoting的分布式处理架构 消息与.Net Remoting的分布式处理架构 IMessageItem item = factory.CreateMessageItem(); 消息与.Net Remoting的分布式处理架构 item.SetSubValue("subname1","subvalue1"); 消息与.Net Remoting的分布式处理架构 item.SetSubValue("subname2","subvalue2");
消息与.Net Remoting的分布式处理架构 IMessageItem subItem1 = factory.CreateMessageItem(); 消息与.Net Remoting的分布式处理架构 subItem1.SetSubValue("subsubname11","subsubvalue11"); 消息与.Net Remoting的分布式处理架构 subItem1.SetSubValue("subsubname12","subsubvalue12"); 消息与.Net Remoting的分布式处理架构 IMessageItem subItem2 = factory.CreateMessageItem(); 消息与.Net Remoting的分布式处理架构 subItem1.SetSubValue("subsubname21","subsubvalue21"); 消息与.Net Remoting的分布式处理架构 subItem1.SetSubValue("subsubname22","subsubvalue22"); 消息与.Net Remoting的分布式处理架构 消息与.Net Remoting的分布式处理架构 item.SetSubItem("subitem1",subItem1); 消息与.Net Remoting的分布式处理架构 item.SetSubItem("subitem2",subItem2); 消息与.Net Remoting的分布式处理架构 消息与.Net Remoting的分布式处理架构 body.SetItem("item",item); 消息与.Net Remoting的分布式处理架构 消息与.Net Remoting的分布式处理架构 //Send Request Message 消息与.Net Remoting的分布式处理架构 MyServiceClient service = new MyServiceClient("Client"); 消息与.Net Remoting的分布式处理架构 IMessageItemSequence reply = service.SendRequest("TestService","Test1",body);

      在接收消息端就可以通过获得body的消息体内容,进行相关业务的处理。
  二、.Net Remoting服务       在.Net中要实现进程间的通信,主要是应用Remoting技术。根据前面对消息的定义可知,实际上服务的实现,可以认为是对消息的处理。因此,我们可以对服务进行抽象,定义接口IService:
消息与.Net Remoting的分布式处理架构
public interface IService 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 IMessage Execute(IMessage aMessage); 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构
      Execute()方法接受一条Request Message,对其进行处理后,返回一条Reply Message。在整个分布式处理架构中,可以认为所有的服务均实现该接口。但受到Remoting技术的限制,假如要实现服务,则该服务类必须继续自MarshalByRefObject,同时必须在服务端被Marshal。随着服务类的增多,必然要在服务两端都要对这些服务的信息进行治理,这加大了系统实现的难度与治理的开销。假如我们从另外一个角度来分析服务的性质,基于消息处理而言,所有服务均是对Request Message的处理。我们完全可以定义一个Request服务负责此消息的处理。       然而,Request服务处理消息的方式虽然一致,但究竟服务实现的业务,即对消息处理的具体实现,却是不相同的。对我们要实现的服务,可以分为两大类:业务服务与Request服务。实现的过程为:首先,具体的业务服务向Request服务发出Request请求,Request服务侦听到该请求,然后交由其侦听的服务来具体处理。       业务服务均具有发出Request请求的能力,且这些服务均被Request服务所侦听,因此我们可以为业务服务抽象出接口IListenService:
消息与.Net Remoting的分布式处理架构 public interface IListenService 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 IMessage OnRequest(IMessage aMessage); 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构
      Request服务实现了IService接口,并包含IListenService类型对象的委派,以执行OnRequest()方法:
消息与.Net Remoting的分布式处理架构 public class RequestListener:MarshalByRefObject,IService 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 public RequestListener(IListenService listenService) 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 m_ListenService = listenService; 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构 private IListenService m_ListenService; 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 IService Members#region IService Members 消息与.Net Remoting的分布式处理架构 public IMessage Execute(IMessage aMessage) 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 return this.m_ListenService.OnRequest(aMessage); 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构 #endregion 消息与.Net Remoting的分布式处理架构 public override object InitializeLifetimeService() 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 return null; 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构 }

  在RequestListener服务中,继续了MarshalByRefObject类,同时实现了IService接口。通过该类的构造函数,接收IListService对象。

  由于Request消息均由Request服务即RequestListener处理,因此,业务服务的类均应包含一个RequestListener的委派,唯一的区别是其服务名不相同。业务服务类实现IListenService接口,但不需要继续MarshalByRefObject,因为被Marshal的是该业务服务内部的RequestListener对象,而非业务服务本身:
消息与.Net Remoting的分布式处理架构 public abstract class Service:IListenService 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 public Service(string serviceName) 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 m_ServiceName = serviceName; 消息与.Net Remoting的分布式处理架构 m_RequestListener = new RequestListener(this); 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 IListenService Members#region IListenService Members 消息与.Net Remoting的分布式处理架构 public IMessage OnRequest(IMessage aMessage) 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 //…… 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构 #endregion 消息与.Net Remoting的分布式处理架构 private string m_ServiceName; 消息与.Net Remoting的分布式处理架构 private RequestListener m_RequestListener; 消息与.Net Remoting的分布式处理架构 }
  Service类是一个抽象类,所有的业务服务均继续自该类。最后的服务架构如下:
(图片较大,请拉动滚动条观看)
  我们还需要在Service类中定义发送Request消息的行为,通过它,才能使业务服务被RequestListener所侦听。
消息与.Net Remoting的分布式处理架构 public IMessageItemSequence SendRequest(string aServiceName,
string aMessageName,IMessageItemSequence aMessageBody) 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 IMessage message = m_Factory.CreateMessage(); 消息与.Net Remoting的分布式处理架构 message.SetMessageName(aMessageName); 消息与.Net Remoting的分布式处理架构 message.SetMessageID(""); 消息与.Net Remoting的分布式处理架构 message.SetMessageBody(aMessageBody); 消息与.Net Remoting的分布式处理架构 消息与.Net Remoting的分布式处理架构 IService service = FindService(aServiceName); 消息与.Net Remoting的分布式处理架构 IMessageItemSequence replyBody = m_Factory.CreateMessageItemSequence(); 消息与.Net Remoting的分布式处理架构 if (service != null) 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 IMessage replyMessage = service.Execute(message); 消息与.Net Remoting的分布式处理架构 replyBody = replyMessage.GetMessageBody(); 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构 else 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 replyBody.SetValue("result","Failure"); 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构 return replyBody; 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构

      注重SendRequest()方法的定义,其参数包括服务名,消息名和被发送的消息主体。而在实现中最要害的一点是FindService()方法。我们要查找的服务正是与之对应的RequestListener服务。不过,在此之前,我们还需要先将服务Marshal:
消息与.Net Remoting的分布式处理架构 public void Initialize() 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 RemotingServices.Marshal(this.m_RequestListener,
this.m_ServiceName +".RequestListener"); 消息与.Net Remoting的分布式处理架构 }
  我们Marshal的对象,是业务服务中的Request服务对象m_RequestListener,这个对象在Service的构造函数中被实例化:        m_RequestListener = new RequestListener(this);        注重,在实例化的时候是将this作为IListenService对象传递给RequestListener。因此,此时被Marshal的服务对象,保留了业务服务本身即Service的指引。可以看出,在Service和RequestListener之间,采用了“双重委派”的机制。       通过调用Initialize()方法,初始化了一个服务对象,其类型为RequestListener(或IService),其服务名为:Service的服务名 + ".RequestListener"。而该服务正是我们在SendRequest()方法中要查找的Service:       IService service = FindService(aServiceName);       下面我们来看看FindService()方法的实现:
消息与.Net Remoting的分布式处理架构 protected IService FindService(string aServiceName) 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 lock (this.m_Services) 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 IService service = (IService)m_Services[aServiceName]; 消息与.Net Remoting的分布式处理架构 if (service != null) 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 return service; 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构 else 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构 IService tmpService = GetService(aServiceName); 消息与.Net Remoting的分布式处理架构 AddService(aServiceName,tmpService); 消息与.Net Remoting的分布式处理架构 return tmpService; 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构 } 消息与.Net Remoting的分布式处理架构

      可以看到,这个服务是被添加到m_Service对象中,该对象为SortedList类型,服务名为Key,IService对象为Value。假如没有找到,则通过私有方法GetService()来获得:
消息与.Net Remoting的分布式处理架构 private IService GetService(string aServiceName) 消息与.Net Remoting的分布式处理架构消息与.Net Remoting的分布式处理架构 ...{ 消息与.Net Remoting的分布式处理架构
上一篇:Avalon应用程序中的导航技术分析 人气:187
下一篇:数据库设计三大范式应用实例剖析 人气:358
浏览全部软件工程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-23 Menalto Gallery v2.3 Rc1 多国语
2008-7-23 深度学习网址导航系统 v2.6.1
2008-7-23 因特达crm2008客户关系管理系统
2008-7-23 60度 CMS v1.0 Build 080723
2008-7-23 幻影动漫网视频系统(Ppdong) v1.
2008-7-23 好易祝福墙 2008
2008-7-23 APJE私服发布系统 v2.0 PHP版
2008-7-23 毕业论文在线指导系统源码
2008-7-23 Jacky法律在线网站源码
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵