MessageBuffer.CreateMessage 是抽象的,因此询问它是否是线程安全的没有意义。WCF 中 MessageBuffer 的子类都是内部的,因此它们可能会被更改。正如 Chandermani 所说,您应该假设它不是线程安全的。
更新:它不是线程安全的。创建的消息可能依赖于其他组件,例如消息体的序列化。如果这些组件不是线程安全的,那么CreateMessage
调用也不能被认为是线程安全的。
在下面的示例中,对象的序列化版本是时间相关的(它也可能有一些额外的依赖关系),因此CreateMessage
调用的顺序会影响结果。
public class StackOverflow_6209650_751090
{
[DataContract]
public class MyDC
{
[DataMember]
public DateTime SerializedTime
{
get { return DateTime.Now; }
set { }
}
}
public static void Test()
{
Message message = Message.CreateMessage(MessageVersion.None, "foo", new MyDC());
var buffer = message.CreateBufferedCopy(int.MaxValue);
Console.WriteLine(buffer.CreateMessage());
Console.WriteLine();
Console.WriteLine(buffer.CreateMessage());
}
}