从流中转换SOAP消息
在手持设备上有一个Windows Mobile .NET 3.5紧凑框架应用程序,该应用程序连接到消息头中需要WS-Security的SOAP服务器。
由于WSE不能在紧凑框架上工作,我设法创建了一个自定义绑定来与服务器通信并接收消息。
在自定义绑定编码器(一个MessageEncoder)中,我需要重写一些方法来读取收到的消息:
public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
{
bufferManager.ReturnBuffer(buffer.Array);
MemoryStream memoryStream = new MemoryStream(buffer.Array, buffer.Offset, buffer.Count);
// to quickly see the content of the message
string s = Encoding.Default.GetString(buffer.Array, 0, buffer.Array.Count());
Console.WriteLine("gna " + s);
Message message = this.ReadMessage(memoryStream, buffer.Array.Length, null);
return message;
}
public override Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentType)
{
XmlReader reader = XmlReader.Create(stream);
return Message.CreateMessage(reader, maxSizeOfHeaders, this.MessageVersion);
}
第二种方法不能在紧凑框架中编译! 根据CreateMessage
方法的定义,紧凑框架只允许几种可能性:使用BodyWriter
或XmlObjectSerializer
而不是简单地使用上述标准代码中提供的XmlReader
。 问题在于,这两个对象是抽象的,需要实例化才能被该函数使用。
那么是否有一种方法可以在紧凑框架中从Stream创建消息? 有人有同样的问题吗? 是否有任何预构建对象可以用来替换这些BodyWriter
或XmlObjectSerializer
?