HFSoft.Net之XmlMessageAdapter对象
HFSoft.Net组件提供对象发送和接收功能,但由于MessageAdapter最终是通过二进制序列化的方式来进行对象和字节数据之间的转换.实际上并不是所有平台都提供对象序化这个功能,不同平台的序列化方式也有所不同,这样导致其他平台请求服务非常困难,
为了更好地和其他平台进行通信, HFSoft.Net提供一个基于XML格式的消息适配器XmlMessageAdapter,开发人员可以从XmlMessageAdapter派生下来实现基于XML格式的消息对象。XmlMessageAdapter是基于IMessage接口的实现,也就是说它同样能被IMessageChannel处理。组件还提供IXmlStateManager接口用于管理消息内部分对象的数据转换。
当继承XmlMessageAdapter后开发人员可以重写protected override void SaveXml(System.Xml.XmlDocument doc, System.Xml.XmlNode parent)和protected override void LoadXml(System.Xml.XmlNode node)方法进行对象的信息的保存和加载。
基于XML格式的验证消息:
public class Login:HFSoft.Net.Message.XmlMessageAdapter
{
private string mName;
public string UserName
{
get
{
return mName;
}
set
{
mName = value;
}
}
private string mUserPWD;
public string UserPWD
{
get
{
return mUserPWD;
}
set
{
mUserPWD = value;
}
}
protected override void LoadXml(System.Xml.XmlNode node)
{
base.LoadXml(node);
System.Xml.XmlNode subnode = node.SelectSingleNode("UserName");
if(subnode != null)
{
if(subnode.FirstChild != null)
UserName = subnode.FirstChild.Value;
}
subnode = node.SelectSingleNode("UserPWD");
if(subnode != null)
{
if(subnode.FirstChild != null)
UserPWD = subnode.FirstChild.Value;
}
}
protected override void SaveXml(System.Xml.XmlDocument doc, System.Xml.XmlNode parent)
{
base.SaveXml(doc, parent);
System.Xml.XmlElement node = doc.CreateElement("UserName");
node.InnerText = UserName;
parent.AppendChild(node);
node = doc.CreateElement("UserPWD");
node.InnerText= UserPWD;
parent.AppendChild(node);
}
}
定义使用消息:
Login log = new Login();
log.UserName ="Henry";
log.UserPWD ="BBQ";
消息对应的XML数据:
<Message>
<ID>a90e738b-b6b1-4fd0-a8bc-c613611ec539</ID>
<Time>2006-7-6
<UserName>Henry</UserName>
<UserPWD>BBQ</UserPWD>
</Message>
基于XML的数据格可以更好地和其他平台进行数据交换处理。