Я использовал некоторый код для создания MTOM с помощью кода от MSDN.Создание MTOM и десериализация его
Похоже, что есть ошибка, и я не могу понять, где проблема, поскольку один из пользователей форума отметил, что есть ошибка.
Данные файла (JPEG) повреждаются после де-сериализации. Полный код приведен ниже.
public class Post_7cb0ff86_5fe1_4266_afac_bcb91eaca5ec
{
[DataContract()]
public partial class TestAttachment
{
private byte[] fileField;
private string filenameField;
[DataMember()]
public byte[] File
{
get
{
return this.fileField;
}
set
{
this.fileField = value;
}
}
[DataMember()]
public string Filename
{
get
{
return this.filenameField;
}
set
{
this.filenameField = value;
}
}
}
public static void Test()
{
string Filename = "Image.jpg";
byte[] file = File.ReadAllBytes(Filename);
TestAttachment Attachment = new TestAttachment();
Attachment.Filename = Filename;
Attachment.File = file;
MemoryStream MTOMInMemory = new MemoryStream();
XmlDictionaryWriter TW = XmlDictionaryWriter.CreateMtomWriter(MTOMInMemory, Encoding.UTF8, Int32.MaxValue, "");
DataContractSerializer DCS = new DataContractSerializer(Attachment.GetType());
DCS.WriteObject(TW, Attachment);
TW.Flush();
Console.WriteLine(Encoding.UTF8.GetString(MTOMInMemory.ToArray()));
var v = DeserializeMTOMMessage(Encoding.UTF8.GetString(MTOMInMemory.ToArray()));
File.WriteAllBytes(v.Filename,v.File);
}
public static TestAttachment DeserializeMTOMMessage(string MTOMMessage)
{
try
{
MemoryStream MTOMMessageInMemory = new MemoryStream(UTF8Encoding.UTF8.GetBytes(MTOMMessage));
XmlDictionaryReader TR = XmlDictionaryReader.CreateMtomReader(MTOMMessageInMemory, Encoding.UTF8, XmlDictionaryReaderQuotas.Max);
DataContractSerializer DCS = new DataContractSerializer(typeof(TestAttachment));
return (TestAttachment)DCS.ReadObject(TR);
}
catch
{
return null;
}
}
}
Я был бы признателен, если кто-то может помочь мне в указании, где проблема. Я новичок в XOP/MTOM, и мне сложно отслеживать, где может быть ошибка. Сериализация или де-сериализация.
Спасибо
Какова ваша точная ошибка получают? –
Неверный тип содержимого MIME. Ну прямо сейчас не могу вспомнить настоящие слова. Но говорит, что тип контента mime недопустим. –
Кажется, что тип содержимого MIME не является сериализуемым. Попробуйте [this] (http://stackoverflow.com/questions/2795588/how-to-serialize-an-object-of-type-system-net-mime-contenttype), и если он будет работать, я добавлю его в качестве ответа , –