Mono 2.10 / MonoTouch 4.0中的WCF KnownTypes

时间:2011-04-13 01:11:30

标签: wcf mono xamarin.ios serviceknowntype known-types

我有一个使用WCF的应用程序。它在Ubuntu上的Mono 2.8.2和Windows上的.NET 3.0上运行良好。

它使用'ServiceKnownType'属性修饰WCF服务契约,该属性指向返回使用服务器所需的派生类型的方法:

[ServiceKnownType("GetKnownTypes", typeof(KnownTypeProvider)]

我将我的应用移植到MonoTouch。我使用的最新4.0,基于Mono 2.10.1。这不再有效:我的WCF调用失败,因为客户端上的DataContractSerializer无法识别返回类型。

我在'GetKnownTypes'方法中设置了一个断点,看到它从未被调用过。我假设System.ServiceModel的这部分在MonoTouch中不存在/不起作用?

我尝试通过使用'KnownType'属性修饰基本返回类型来解决此问题。

[KnownType("GetKnownTypes")]

同样,它不起作用,我的'GetKnownTypes'方法永远不会被调用。查看DataContractSerializer的源代码,看起来如果使用方法名称而不是指定类型,它会被忽略?!

我将通过指定类型而不是使用方法再次尝试(查看DataContractSerializer的源代码,看起来就像这样可以工作),但是这对我来说在MonoTouch中很棘手,因为我会需要使用typeof而不是Type.GetType(“fully.qualified.typename”)。

还有其他解决方案吗?解决办法:

我确实看到了这个:How do you configure WCF known types programmatically?,但似乎MonoTouch缺少一些必需的接口......

提前致谢

1 个答案:

答案 0 :(得分:1)

它看起来很像MonoTouch中的错误或Mono中的回归(我现在没有在桌面上的Mono 2.10中测试的环境)

通过重组我的项目并使用

来解决这个问题
[KnownType(typeof(MyDerivedType))]

在基本类型上。这在MonoTouch 4.0上运行得很好。