public interface IMessage:ICloneable
...{
IMessageItemSequence GetMessageBody();
string GetMessageID();
string GetMessageName();
void SetMessageBody(IMessageItemSequence aMessageBody);
void SetMessageID(string aID);
void SetMessageName(string aName);
}
public interface IMessageItemSequence:ICloneable
...{
IMessageItem GetItem(string aName);
void SetItem(string aName,IMessageItem aMessageItem);
string GetValue(string aName);
void SetValue(string aName,string aValue);
}

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);
public interface IService
...{
IMessage Execute(IMessage aMessage);
}
public interface IListenService
...{
IMessage OnRequest(IMessage aMessage);
}
public class RequestListener:MarshalByRefObject,IService
...{
public RequestListener(IListenService listenService)
...{
m_ListenService = listenService;
}
PRivate IListenService m_ListenService;
IService Members#region IService Members
public IMessage Execute(IMessage aMessage)
...{
return this.m_ListenService.OnRequest(aMessage);
}
#endregion
public override object InitializeLifetimeService()
...{
return null;
}
}
public abstract class Service:IListenService
...{
public Service(string serviceName)
...{
m_ServiceName = serviceName;
m_RequestListener = new RequestListener(this);
} 
IListenService Members#region IListenService Members
public IMessage OnRequest(IMessage aMessage)
...{
//……
}
#endregion
private string m_ServiceName;
private RequestListener m_RequestListener;
}
public IMessageItemSequence SendRequest(string aServiceName,
...{
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;
}
public void Initialize()
...{
RemotingServices.Marshal(this.m_RequestListener,
}
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;
}
}
}
private IService GetService(string aServiceName)
...{
新闻热点
疑难解答