我(再次,仍然)尝试在Monotouch中使用一些WCF服务。 第一种方法:在Monodevelop中添加Web引用失败。它无法创建参考文件。 然后我尝试了SVCUTIL.EXE并得到一个错误,即Monotouch中没有通用的ChannelFactory - 我想因为没有可用的反射。
接下来,我尝试了Silverlight 3 SDK中的SLSVCUTIL.EXE。这会生成与通过SVCUTIL.EXE创建的服务不同的各种服务的命名空间。由于我已经有很多包装代码,所以我必须改变很多。
出现这些问题:
答案 0 :(得分:5)
WCF是一个巨大的野兽,很难给出一般答案,太多取决于细节。一般规则是MonoTouch支持Silverlight附带的相同WCF子集(即使随着时间的推移做了一些添加)。
我想因为没有可用的反映。
可以使用反射并与MonoTouch配合使用。 Reflection.Emit 执行不,因为Apple不允许在iOS设备上使用JIT代码。这可能会限制某些需要在运行时生成代码的API(但如果代码生成可以在编译时完成,则不会出现问题)。
...这意味着修复SVCUTIL.EXE生成的代码。 ...
战斗/编辑生成的代码通常是一个坏主意(例如,未来的维护)。我建议您在投入太多时间自定义生成的代码之前尝试使用 slsvcutil.exe 。
...代码看起来必须用该方法编写?
如果您希望提供自己的频道(或自定义生成的代码),则可以使用Mono System.ServiceModel和System.ServiceModel.Web的完整源代码。
我完全不清楚:两个服务实用程序之间有什么区别?
SL 前缀位于 slsvcutil.exe 中,适用于Silverlight。 Microsoft制作此工具以生成仅使用Silverlight中可用的WCF子集的代码。由于这是MonoTouch支持的相同子集,因此这是最佳工具。
如果我解决了名称空间问题,那么通过Silverlight实用程序创建的存根是否会使我的项目工作,还是会受到通用渠道问题的影响?
应该工作。这就是人们今天使用MonoTouch的WCF(可用子集)的方式。如果存在此问题(子集/工具),您可以填写bug报告(带有测试用例),我们会看一下。