我(一次又一次)尝试在Monotouch中使用一些WCF服务。第一种方法:在中添加一个web引用。它无法创建引用文件。然后我尝试了SVCUTIL.EXE,得到了一个错误,即通用ChannelFactory在Monotouch中不可用--我想是因为没有可用的反射。
接下来,我尝试了Silverlight 3 SDK中的SLSVCUTIL.EXE。这会为不同的服务生成名称空间,这些服务不同于通过SVCUTIL.EXE创建的服务。由于我已经有了大量的包装代码,所以我必须进行大量的更改。
这些问题产生:
发布于 2011-11-26 01:55:29
WCF是一个巨大的猛兽,很难给出一般的答案,太多的依赖于细节。一般规则是,MonoTouch支持与Silverlight附带的WCF的相同子集(即使随着时间的推移添加了一些新功能)。
我想是因为没有反射。
反射是可用的,并且可以使用MonoTouch。Reflection.Emit不允许,而不是,因为苹果不允许在iOS设备上使用JIT‘’ing代码。这可以限制一些需要在运行时生成代码的API (但如果代码生成可以在编译时完成,则不是问题)。
..。这意味着修复SVCUTIL.EXE生成的代码。
战斗/编辑生成的代码通常是个坏主意(例如,未来的维护)。我建议您在花费太多时间定制生成的代码之前尝试使用slsvcutil.exe。
..。用该方法编写的代码是什么样子的?
如果希望提供自己的通道(或自定义生成的代码),Mono的System.ServiceModel和System.ServiceModel.Web的完整源代码是可用的。
我完全不清楚:这两种服务的区别是什么?
slsvcutil.exe,中的SL前缀用于Silverlight。Microsoft使用此工具生成只使用Silverlight中可用的WCF子集的代码。由于这是MonoTouch支持的同一个子集,所以这是最好的工具。
如果我解决了命名空间问题,通过Silverlight实用程序创建的存根将使我的项目工作,还是也会受到通用通道问题的影响?
应该管用的。这就是现在人们在MonoTouch中使用( WCF的可用子集)的方式。如果这个(子集/工具)有问题,您可以填写一个关于它的错误报告(用一个测试用例),我们将看看它。
https://stackoverflow.com/questions/8274848
复制相似问题