Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>开发者网络>微软开发专栏>ASP.NETC#VB.NETVC.NET技术专题XML|软件频道产品中心群乐下载群乐:大家耍QQ
您现在的位置: 天极网 > 开发频道 > 微软开发专栏 > 消息与.Net Remoting的分布式处理架构
全文

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

2005-11-23 17:21 作者: wayfarer 出处: 博客堂 责任编辑:>方舟
  分布式处理在大型企业应用系统中,最大的优势是将负载分布。通过多台服务器处理多个任务,以优化整个系统的处理能力和运行效率。分布式处理的技术核心是完成服务与服务之间、服务端与客户端之间的通信。在.Net 1.1中,可以利用Web Service或者.Net Remoting来实现服务进程之间的通信。本文将介绍一种基于消息的分布式处理架构,利用了.Net Remoting技术,并参考了CORBA Naming Service的处理方式,且定义了一套消息体制,来实现分布式处理。 

   一、消息的定义

      要实现进程间的通信,则通信内容的载体——消息,就必须在服务两端具有统一的消息标准定义。从通信的角度来看,消息可以分为两类:Request Messge和Reply Message。为简便起见,这两类消息可以采用同样的结构。

      消息的主体包括ID,Name和Body,我们可以定义如下的接口方法,来获得消息主体的相关属性:

public interface IMessage:ICloneable { IMessageItemSequence GetMessageBody(); string GetMessageID(); string GetMessageName(); void SetMessageBody(IMessageItemSequence aMessageBody); void SetMessageID(string aID); void SetMessageName(string aName); }
  消息主体类Message实现了IMessage接口。在该类中,消息体Body为IMessageItemSequence类型。这个类型用于Get和Set消息的内容:Value和Item:
public interface IMessageItemSequence:ICloneable { IMessageItem GetItem(string aName); void SetItem(string aName,IMessageItem aMessageItem); string GetValue(string aName); void SetValue(string aName,string aValue); }

  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)
                                          ——……

      各个消息对象之间的关系如下:

Distribute1.gif
      在实现服务进程通信之前,我们必须定义好各个服务或各个业务的消息格式。通过消息体的方法在服务的一端设置消息的值,然后发送,并在服务的另一端获得这些值。例如发送消息端定义如下的消息体:

IMessageFactory factory = new MessageFactory(); IMessageItemSequence body = factory.CreateMessageItemSequence(); body.SetValue("name1","value1"); body.SetValue("name2","value2"); IMessageItem item = factory.CreateMessageItem(); item.SetSubValue("subname1","subvalue1"); item.SetSubValue("subname2","subvalue2");
IMessageItem subItem1
= factory.CreateMessageItem(); subItem1.SetSubValue("subsubname11","subsubvalue11"); subItem1.SetSubValue("subsubname12","subsubvalue12"); IMessageItem subItem2 = factory.CreateMessageItem(); subItem1.SetSubValue("subsubname21","subsubvalue21"); subItem1.SetSubValue("subsubname22","subsubvalue22"); item.SetSubItem("subitem1",subItem1); item.SetSubItem("subitem2",subItem2); body.SetItem("item",item); //Send Request Message MyServiceClient service = new MyServiceClient("Client"); IMessageItemSequence reply = service.SendRequest("TestService","Test1",body);

      在接收消息端就可以通过获得body的消息体内容,进行相关业务的处理。

共2页。 1 2 :
网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml