2014-11-26 2 views
0

Я сделал как клиент, так и службу с использованием C# и WCF. Они отлично работают на всех современных ОС, которые я мог бы попробовать, как x86, так и x64.Объект, который не является сериализуемым в Windows XP

Теперь, при попытке его на Windows XP оно не»работу из-за этой ошибки:

Type 'System.Threading.Tasks.Task`1[MyObject[]]' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute

На моем интерфейсе службы я использовал этот

[OperationContract()] 
List<MyObject> GetFileList(string randomString, string uniqueID); 

И MyObject выглядит эта

[Serializable()] 
public class MyObject 
{ 
    public string oneRandomWorld { get; set; } 
    public string helloImAVariable { get; set; } 

    public SingleVMFileInfo(string oneRandomWorld, string helloImAVariable) 
    { 
     this.oneRandomWorld = oneRandomWorld; 
     this.helloImAVariable = helloImAVariable; 
    } 
} 

только строки содержатся внутри. Я пытался расширить MyObject с этими двумя методами

//Deserializer 
public MyObject(SerializationInfo info, StreamingContext ctxt) 
{ 
    oneRandomWorld = (string)info.GetValue("oneRandomWorld", typeof(string)); 
    helloImAVariable = (string)info.GetValue("helloImAVariable", typeof(string)); 
} 

//Serializer 
public void GetObjectData(SerializationInfo info, StreamingContext ctxt) 
{ 
    info.AddValue("oneRandomWorld", oneRandomWorld); 
    info.AddValue("helloImAVariable", helloImAVariable); 
} 

без какой-либо другой результат. Это работает с Windows 7, 8, 8.1, Server 2008R2, Server 2012, Server 2012 R2 .. но дает эту ошибку в Windows XP и Windows Server 2003.

У меня мало идей, что я могу сделать пытаться?

+1

Есть ли у вас какие-либо теории о том, почему он пытается сериализовать «System.Threading.Tasks.Task », а не просто «MyObject» - иначе вы могли бы включить код, который выполняет сериализацию. Сериализация «Задача ' всегда будет терпеть неудачу, потому что она содержит «Исключение», которая, в свою очередь, содержит «Словарь», который является несериализуемым. –

+0

спасибо, я пытаюсь выяснить почему .. Кстати, я хотел бы знать, почему downvote тем, кто это сделал :) – HypeZ

+0

Не могли бы вы включить код, который сериализует ваш объект. есть хороший шанс, мы найдем там проблему. –

ответ

1

я, наконец, решить эту проблему редактированием generatedProxy.cs, который я создал с svcutil.exe

Этот файл включен, для каждой функции, как синхронизации и асинхронной версии. Даже если я никогда не использовал какую-либо асинхронную версию, программа по-прежнему пытается ее инициализировать и приводит к сбою.

Удаление Все версии aSync исправили мою проблему.

Я все еще не понимаю, почему только Windows XP и Windows Server 2003 это не нравится, но я так и сделал.

Спасибо Dead.Rabit за информацию, без нее я никогда не мог себе представить проблему!

ps: Я до сих пор не могу понять, почему у меня получилось downvote .. ну, я должен жить с ним! :)

+0

Очень полезно для меня +1, спасибо! – Caveman

Смежные вопросы