我使用C#和WCF创建了客户端和服务。它们完全适用于我可以尝试的所有现代操作系统,包括x86和x64。
现在,在Windows XP上尝试时,它并没有“因为这个错误而工作:
键入' System.Threading.Tasks.Task`1 [MyObject []]'无法序列化。 考虑使用DataContractAttribute属性标记它,并且 标记您想要序列化的所有成员 DataMemberAttribute属性
在我的服务界面上,我使用了这个
[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上出现该错误。
我有点缺乏想法,我能尝试什么?
答案 0 :(得分:1)
我终于解决了这个问题,编辑了generatedProxy.cs
,我使用svcutil.exe
创建的那个
对于每个功能,该文件都包含同步和异步版本。即使我没有使用任何异步版本,程序仍会尝试初始化它并导致失败。
删除所有aSync版本解决了我的问题。
我仍然无法理解为什么只有Windows XP和Windows Server 2003不喜欢这样,但这就是我的工作方式。
感谢Dead.Rabit的信息,没有它,我无法想象这个问题!
ps:我仍然无法理解为什么我会得到一个downvote ..好吧,我得忍受它! :)