WCF生成的代理崩溃Monodroid和Monotouch

WCF生成的代理崩溃Monodroid和Monotouch,wcf,xamarin.ios,xamarin.android,Wcf,Xamarin.ios,Xamarin.android,我已经通过slsvcutil.exe为我的WCF RIA服务类生成了一个代理客户端,如Xamarin“Web服务简介”文档中所述,但是当我尝试调用其中一个异步方法时,我的“已完成”事件处理程序从未被调用——几分钟后,应用程序就从Android仿真器终止(它在Monotouch中也做同样的事情) 经过几天的故障排除,我终于找到了崩溃的根源,但不知道如何修复。我怀疑这是Mono中的一个bug,但不知道如何进一步排除故障 我生成的代理具有如下定义的类: [System.Diagnostics.Debu

我已经通过slsvcutil.exe为我的WCF RIA服务类生成了一个代理客户端,如Xamarin“Web服务简介”文档中所述,但是当我尝试调用其中一个异步方法时,我的“已完成”事件处理程序从未被调用——几分钟后,应用程序就从Android仿真器终止(它在Monotouch中也做同样的事情)

经过几天的故障排除,我终于找到了崩溃的根源,但不知道如何修复。我怀疑这是Mono中的一个bug,但不知道如何进一步排除故障

我生成的代理具有如下定义的类:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name = "ChangeSetEntry", Namespace = "DomainServices")]
[System.Runtime.Serialization.KnownTypeAttribute(typeof(SL5Proxy.ChangeSetEntry[]))]
public partial class ChangeSetEntry : object
{
...
}
(上面的代码大大简化了-大约有十几行
KnownTypeAttribute()
行,但我已经确定上面显示的那一行是问题的根源。需要注意的是,
ChangeSetEntry
对象没有对
ChangeSetEntry[]
数组的任何引用。)

我发现如果我只是简单地注释掉

[System.Runtime.Serialization.KnownTypeAttribute(typeof(SL5Proxy.ChangeSetEntry[]))]
从代理代码的第行开始,所有操作都100%正确,我的异步“已完成”处理程序的调用与预期完全一致。我不知道slsvcutil.exe为什么生成有问题的KnownTypeAttribute()行,但它确实生成了

我的猜测是,当
ChangeSetEntry
类告诉运行时序列化程序
ChangeSetEntry[]
是一个已知类型时,会创建某种无限递归——运行时尝试解析已知类型,返回到
ChangeSetEntry
并再次执行


因此,我很好奇是否有其他人看到过这个问题,这是否是一个已知的问题,是否有一个解决方法——也许有某种方法可以阻止从slsvcutil.exe生成
KnownTypeAttribute()
行,我听说[KnownType]或[xmlclude](它们做类似的事情),在MonoTouch中不起作用。WCF中的所有功能都没有完全实现(这是一个非常大的框架)。我认为您通过使用解决方案走上了正确的道路,但您可能会考虑更改服务端以将其删除。