基于消息与.Net Remoting的分布式处理架构
来源:互联网 发布:守望网络初始化失败bo 编辑:程序博客网 时间:2024/06/05 01:10
原始出处:http://wayfarer.blog.51cto.com/1300239/279909
C#语言:
public interface IMessage:ICloneable
{
IMessageItemSequence GetMessageBody();
string GetMessageID();
string GetMessageName();
void SetMessageBody(IMessageItemSequence aMessageBody);
void SetMessageID(string aID);
void SetMessageName(string aName);
}
{
IMessageItemSequence GetMessageBody();
string GetMessageID();
string GetMessageName();
void SetMessageBody(IMessageItemSequence aMessageBody);
void SetMessageID(string aID);
void SetMessageName(string aName);
}
C#语言:
public interface IMessageItemSequence:ICloneable
{
IMessageItem GetItem(string aName);
void SetItem(string aName,IMessageItem aMessageItem);
string GetValue(string aName);
void SetValue(string aName,string aValue);
}
{
IMessageItem GetItem(string aName);
void SetItem(string aName,IMessageItem aMessageItem);
string GetValue(string aName);
void SetValue(string aName,string aValue);
}
C#语言:
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);
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);
C#语言:
public interface IService
{
IMessage Execute(IMessage aMessage);
}
{
IMessage Execute(IMessage aMessage);
}
C#语言:
public interface IListenService
{
IMessage OnRequest(IMessage aMessage);
}
{
IMessage OnRequest(IMessage aMessage);
}
C#语言:
public class RequestListener:MarshalByRefObject,IService
{
public RequestListener(IListenService listenService)
{
m_ListenService = listenService;
}
private IListenService m_ListenService;
#region IService Members
public IMessage Execute(IMessage aMessage)
{
return this.m_ListenService.OnRequest(aMessage);
}
#endregion
public override object InitializeLifetimeService()
{
return null;
}
}
{
public RequestListener(IListenService listenService)
{
m_ListenService = listenService;
}
private IListenService m_ListenService;
#region IService Members
public IMessage Execute(IMessage aMessage)
{
return this.m_ListenService.OnRequest(aMessage);
}
#endregion
public override object InitializeLifetimeService()
{
return null;
}
}
C#语言:
public abstract class Service:IListenService
{
public Service(string serviceName)
{
m_ServiceName = serviceName;
m_RequestListener = new RequestListener(this);
}
#region IListenService Members
public IMessage OnRequest(IMessage aMessage)
{
//……
}
#endregion
private string m_ServiceName;
private RequestListener m_RequestListener;
}
{
public Service(string serviceName)
{
m_ServiceName = serviceName;
m_RequestListener = new RequestListener(this);
}
#region IListenService Members
public IMessage OnRequest(IMessage aMessage)
{
//……
}
#endregion
private string m_ServiceName;
private RequestListener m_RequestListener;
}
C#语言:
public IMessageItemSequence SendRequest(stringaServiceName,string aMessageName,IMessageItemSequence aMessageBody)
{
IMessage message = m_Factory.CreateMessage();
message.SetMessageName(aMessageName);
message.SetMessageID("");
message.SetMessageBody(aMessageBody);
IService service = FindService(aServiceName);
IMessageItemSequence replyBody = m_Factory.CreateMessageItemSequence();
if (service != null)
{
IMessage replyMessage = service.Execute(message);
replyBody = replyMessage.GetMessageBody();
}
else
{
replyBody.SetValue("result","Failure");
}
return replyBody;
}
{
IMessage message = m_Factory.CreateMessage();
message.SetMessageName(aMessageName);
message.SetMessageID("");
message.SetMessageBody(aMessageBody);
IService service = FindService(aServiceName);
IMessageItemSequence replyBody = m_Factory.CreateMessageItemSequence();
if (service != null)
{
IMessage replyMessage = service.Execute(message);
replyBody = replyMessage.GetMessageBody();
}
else
{
replyBody.SetValue("result","Failure");
}
return replyBody;
}
C#语言:
public void Initialize()
{
RemotingServices.Marshal(this.m_RequestListener,this.m_ServiceName + ".RequestListener");
}
{
RemotingServices.Marshal(this.m_RequestListener,this.m_ServiceName + ".RequestListener");
}
C#语言:
m_RequestListener = new RequestListener(this);
C#语言:
IService service = FindService(aServiceName);
C#语言:
protected IService FindService(string aServiceName)
{
lock (this.m_Services)
{
IService service = (IService)m_Services[aServiceName];
if (service != null)
{
return service;
}
else
{
IService tmpService = GetService(aServiceName);
AddService(aServiceName,tmpService);
return tmpService;
}
}
}
{
lock (this.m_Services)
{
IService service = (IService)m_Services[aServiceName];
if (service != null)
{
return service;
}
else
{
IService tmpService = GetService(aServiceName);
AddService(aServiceName,tmpService);
return tmpService;
}
}
}
C#语言:
private IService GetService(string aServiceName)
{
IService service = (IService)Activator.GetObject(typeof(RequestListener),
"tcp://localhost:9090/" + aServiceName + ".RequestListener");
return service;
}
{
IService service = (IService)Activator.GetObject(typeof(RequestListener),
"tcp://localhost:9090/" + aServiceName + ".RequestListener");
return service;
}
C#语言:
public class MyService:Service
{
public MyService(string aServiceName):base(aServiceName)
{}
}
{
public MyService(string aServiceName):base(aServiceName)
{}
}
C#语言:
public delegate void RequestHandler(string aMessageName,IMessageItemSequence aMessageBody,ref IMessageItemSequence aReplyMessageBody);
C#语言:
protected abstract void AddRequestHandlers();
protected void AddRequestHandler(string aMessageName,RequestHandler handler)
{
lock (this.m_EventHandlers)
{
if (!this.m_EventHandlers.Contains(aMessageName))
{
this.m_EventHandlers.Add(aMessageName,handler);
}
}
}
protected RequestHandler FindRequestHandler(string aMessageName)
{
lock (this.m_EventHandlers)
{
RequestHandler handler = (RequestHandler)m_EventHandlers[aMessageName];
return handler;
}
}
protected void AddRequestHandler(string aMessageName,RequestHandler handler)
{
lock (this.m_EventHandlers)
{
if (!this.m_EventHandlers.Contains(aMessageName))
{
this.m_EventHandlers.Add(aMessageName,handler);
}
}
}
protected RequestHandler FindRequestHandler(string aMessageName)
{
lock (this.m_EventHandlers)
{
RequestHandler handler = (RequestHandler)m_EventHandlers[aMessageName];
return handler;
}
}
C#语言:
public class MyService:Service
{
public MyService(string aServiceName):base(aServiceName)
{}
protected override void AddRequestHandlers()
{
this.AddRequestHandler("Test1",new RequestHandler(Test1));
this.AddRequestHandler("Test2",new RequestHandler(Test2));
}
private void Test1(string aMessageName,IMessageItemSequence aMessageBody,ref IMessageItemSequence aReplyMessageBody)
{
Console.WriteLine("MessageName:{0}\n",aMessageName);
Console.WriteLine("MessageBody:{0}\n",aMessageBody);
aReplyMessageBody.SetValue("result","Success");
}
private void Test2(string aMessageName,IMessageItemSequence aMessageBody,ref IMessageItemSequence aReplyMessageBody)
{
Console.WriteLine("Test2" + aMessageBody.ToString());
}
}
{
public MyService(string aServiceName):base(aServiceName)
{}
protected override void AddRequestHandlers()
{
this.AddRequestHandler("Test1",new RequestHandler(Test1));
this.AddRequestHandler("Test2",new RequestHandler(Test2));
}
private void Test1(string aMessageName,IMessageItemSequence aMessageBody,ref IMessageItemSequence aReplyMessageBody)
{
Console.WriteLine("MessageName:{0}\n",aMessageName);
Console.WriteLine("MessageBody:{0}\n",aMessageBody);
aReplyMessageBody.SetValue("result","Success");
}
private void Test2(string aMessageName,IMessageItemSequence aMessageBody,ref IMessageItemSequence aReplyMessageBody)
{
Console.WriteLine("Test2" + aMessageBody.ToString());
}
}
C#语言:
public IMessage OnRequest(IMessage aMessage)
{
string messageName = aMessage.GetMessageName();
string messageID = aMessage.GetMessageID();
IMessage message = m_Factory.CreateMessage();
IMessageItemSequence replyMessage = m_Factory.CreateMessageItemSequence();
RequestHandler handler = FindRequestHandler(messageName);
handler(messageName,aMessage.GetMessageBody(),ref replyMessage);
message.SetMessageName(messageName);
message.SetMessageID(messageID);
message.SetMessageBody(replyMessage);
return message;
}
{
string messageName = aMessage.GetMessageName();
string messageID = aMessage.GetMessageID();
IMessage message = m_Factory.CreateMessage();
IMessageItemSequence replyMessage = m_Factory.CreateMessageItemSequence();
RequestHandler handler = FindRequestHandler(messageName);
handler(messageName,aMessage.GetMessageBody(),ref replyMessage);
message.SetMessageName(messageName);
message.SetMessageID(messageID);
message.SetMessageBody(replyMessage);
return message;
}
C#语言:
public class TestService:Service
{
public TestService(string aServiceName):base(aServiceName)
{}
protected override void AddRequestHandlers()
{
this.AddRequestHandler("Test1",new RequestHandler(Test1));
}
private void Test1(string aMessageName,IMessageItemSequence aMessageBody,ref IMessageItemSequence aReplyMessageBody)
{
aReplyMessageBody = SendRequest("MyService",aMessageName,aMessageBody);
aReplyMessageBody.SetValue("result2","Success");
}
}
{
public TestService(string aServiceName):base(aServiceName)
{}
protected override void AddRequestHandlers()
{
this.AddRequestHandler("Test1",new RequestHandler(Test1));
}
private void Test1(string aMessageName,IMessageItemSequence aMessageBody,ref IMessageItemSequence aReplyMessageBody)
{
aReplyMessageBody = SendRequest("MyService",aMessageName,aMessageBody);
aReplyMessageBody.SetValue("result2","Success");
}
}
C#语言:
public class MyServiceClient:Service
{
public MyServiceClient(string aServiceName):base(aServiceName)
{}
protected override void AddRequestHandlers()
{}
}
{
public MyServiceClient(string aServiceName):base(aServiceName)
{}
protected override void AddRequestHandlers()
{}
}
C#语言:
IMessageFactory factory = new MessageFactory();
IMessageItemSequence body = factory.CreateMessageItemSequence();
//……
MyServiceClient service = new MyServiceClient("Client");
IMessageItemSequence reply = service.SendRequest("TestService","Test1",body);
IMessageItemSequence body = factory.CreateMessageItemSequence();
//……
MyServiceClient service = new MyServiceClient("Client");
IMessageItemSequence reply = service.SendRequest("TestService","Test1",body);
C#语言:
public class Server
{
public Server()
{
m_Services = new ArrayList();
}
private ArrayList m_Services;
public void AddService(IListenService service)
{
this.m_Services.Add(service);
}
public void Initialize()
{
IDictionary tcpProp = new Hashtable();
tcpProp["name"] = "tcp9090";
tcpProp["port"] = 9090;
TcpChannel channel = new TcpChannel(tcpProp,newBinaryClientFormatterSinkProvider(),
newBinaryServerFormatterSinkProvider());
ChannelServices.RegisterChannel(channel);
foreach (Service service in m_Services)
{
service.Initialize();
}
}
}
{
public Server()
{
m_Services = new ArrayList();
}
private ArrayList m_Services;
public void AddService(IListenService service)
{
this.m_Services.Add(service);
}
public void Initialize()
{
IDictionary tcpProp = new Hashtable();
tcpProp["name"] = "tcp9090";
tcpProp["port"] = 9090;
TcpChannel channel = new TcpChannel(tcpProp,newBinaryClientFormatterSinkProvider(),
newBinaryServerFormatterSinkProvider());
ChannelServices.RegisterChannel(channel);
foreach (Service service in m_Services)
{
service.Initialize();
}
}
}
C#语言:
static void Main(string[] args)
{
MyService service = new MyService("MyService");
TestService service1 = new TestService("TestService");
Server server = new Server();
server.AddService(service);
server.AddService(service1);
server.Initialize();
Console.ReadLine();
}
{
MyService service = new MyService("MyService");
TestService service1 = new TestService("TestService");
Server server = new Server();
server.AddService(service);
server.AddService(service1);
server.Initialize();
Console.ReadLine();
}
0 0
- 基于消息与.Net Remoting的分布式处理架构
- 基于消息与.Net Remoting的分布式处理架构
- 基于消息与.Net Remoting的分布式处理架构
- 消息与.NET Remoting分布式处理架构
- 消息与.Net Remoting的分布式处理架构
- 基于消息的分布式架构
- 基于消息的分布式架构
- 基于消息的分布式架构
- 基于消息的分布式架构
- 基于消息的分布式架构
- 基于消息的分布式架构
- 基于消息的分布式架构
- 基于消息的分布式架构设计
- 案例分析:基于消息的分布式架构
- 案例分析:基于消息的分布式架构
- 案例分析:基于消息的分布式架构
- 案例分析:基于消息的分布式架构
- 案例分析:基于消息的分布式架构
- C++考试——指针
- cache paramters
- C++开发者都应该使用的10个C++11特性
- 除掉脸上的一个肉粒突起新方法
- 兼容不同的屏幕大小(推荐,最官方的适应屏幕大小的经验)
- 基于消息与.Net Remoting的分布式处理架构
- AVAudioSessionPortOverrideSpeaker 和 AVAudioSessionCategoryOptionDefaultToSpeaker区别
- C#版万年历源码、农历、节日、节气齐全
- 2015年工作中遇到的问题:71-80,Tomcat-Redis-浮点数-HTTPS
- ios8UIWebView中嵌入百度地图黑屏解决方案
- JSON 解析
- PL/SQL的if语句的执行顺序
- 开始学java1 小小内存
- armeabi与armeabi-v7a