MessageBuffer.CreateMessage является абстрактным, поэтому нет смысла спрашивать, является ли он потокобезопасным или нет. Все подклассы MessageBuffer в WCF являются внутренними, поэтому их можно изменить. Как сказал Чандермани, вы должны предположить, что он не является потокобезопасным.
Обновление: не является потокобезопасным. Созданное сообщение может зависеть от других компонентов, таких как сериализация тела сообщения. Если эти компоненты не являются поточно-ориентированными, то вызов 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());
}
}