Можете ли вы создать такой же контракт данных на клиенте и вместо чтения из xml-файла создать объект, преобразовать его в байтовый массив и отправить в поток и посмотреть, успешно ли выполнен ваш запрос.
Обязательно следите за своим запросом с помощью Fiddler.
Я предполагаю, что причина ошибки заключается в вашем файле XML.Вам просто нужно убедиться, что XML при десериализации с использованием DataContractSerializer возвращается в том же формате, что и ваш объект.
Некоторый код для публикации с использованием объекта HttpWebRequest:
byte[] requestBodyBytes = ToByteArrayUsingDataContractSer(requestBody);
request.ContentLength = requestBodyBytes.Length;
using (Stream postStream = request.GetRequestStream())
postStream.Write(requestBodyBytes, 0, requestBodyBytes.Length);
private static byte[] ToByteArrayUsingDataContractSer<T>(T requestBody)
{
byte[] bytes = null;
var serializer1 = new DataContractSerializer(typeof(T));
var ms1 = new MemoryStream();
serializer1.WriteObject(ms1, requestBody);
ms1.Position = 0;
var reader = new StreamReader(ms1);
bytes = ms1.ToArray();
return bytes;
}
Я полагаю из вашегоклиент, вы не передаете сообщение как часть тела сообщения, в котором оно нуждается.Надеюсь, что приведенная выше информация поможет вам.