我在手持设备上安装了Windows移动.NET 3.5紧凑框架应用程序,该应用程序连接到消息头中需要WS-Security的SOAP服务器。
由于WSE不能在紧凑框架上运行,我设法创建了一个自定义绑定来与服务器通信并接收消息。
在Custom Binding Encoder(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);
}
第二种方法不能在紧凑的框架中编译!根据the definition of the CreateMessage
方法,紧凑框架只允许几种可能:使用BodyWriter
或{{1而不是简单地使用上面标准代码中提供的XmlObjectSerializer
。问题是这两个对象是抽象的,需要实例化才能被函数使用。
那么有一些方法可以在紧凑的框架中从Stream创建消息吗?有人有同样的问题吗?是否有任何预构建对象可用于替换这些XmlReader
或BodyWriter
?