WCF生成的代理崩溃了Monodroid和Monotouch

时间:2012-08-31 18:34:31

标签: wcf xamarin.ios xamarin.android

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

经过几天的故障排除后,我终于找到了崩溃的来源,但不知道如何解决它。我怀疑这是某个地方的Mono中的一个错误,但不知道如何进一步解决问题。

我生成的代理有一个类定义的类:

[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()行,但我已经确定上面显示的那一行是问题的根源。重要的是要注意{{1} } object没有对ChangeSetEntry数组的任何引用。)

我发现如果我只是注释掉

ChangeSetEntry[]

来自代理代码的行,一切正常100%正确,我的异步“完成”处理程序完全按预期调用。我不知道为什么slsvcutil.exe生成有问题的KnownTypeAttribute()行,但确实如此。

我的猜测是,当[System.Runtime.Serialization.KnownTypeAttribute(typeof(SL5Proxy.ChangeSetEntry[]))] 类告诉运行时序列化程序ChangeSetEntry是已知类型时,会创建某种无限递归 - 运行时尝试解析已知类型,来回到ChangeSetEntry[]然后再做一遍。

所以我很好奇是否有其他人看过这个问题,是否已知问题以及是否有解决方法 - 或许某种方法来抑制slsvcutil.exe生成ChangeSetEntry

0 个答案:

没有答案
相关问题