繁体   English   中英

Monotouch和WCF:SVCUTIL.EXE和SLSVCUTIL.EXE的区别以及如何避免不支持的通用ChannelFactory?

[英]Monotouch and WCF: difference of SVCUTIL.EXE and SLSVCUTIL.EXE and how to avoid unsupported generic ChannelFactory?

我(再次,仍然)尝试在Monotouch中使用一些WCF服务。 第一种方法:在Monodevelop中添加Web引用失败。 它无法创建参考文件。 然后我尝试了SVCUTIL.EXE并得到一个错误,通用的ChannelFactory在Monotouch中不可用 - 我想因为没有可用的反射。

接下来,我尝试了Silverlight 3 SDK中的SLSVCUTIL.EXE。 这会生成与通过SVCUTIL.EXE创建的服务不同的各种服务的命名空间。 由于我已经有很多包装代码,我必须改变很多。

这些问题出现了:

  • 我是否可以覆盖CreateChannel方法并返回每个服务的专用通道,而不是依赖于不存在的泛型版本,如抛出的异常所提议的那样? 这意味着修复SVCUTIL.EXE生成的代码。
  • 如何在重写方法中创建通道? 我只有我的服务接口。 我用谷歌搜索,找不到任何例子。 代码看起来像什么,必须用该方法编写?
  • 我完全不清楚:两个服务实用程序之间有什么区别?
  • 如果我解决了命名空间问题,那么通过Silverlight实用程序创建的存根是否会使我的项目工作,还是会受到通用通道问题的影响?
  • 为什么Silverlight工具可以在不动态发出代码的情况下工作? 输出代码有什么区别,动态版有什么优势?
  • MT支持哪个版本的Silverlight。 我可以使用v4的工具还是必须是版本3?
  • MT中的WCF是否支持流式传输,例如下载大型文件?

WCF是一个巨大的野兽,很难给出一般答案,太多取决于细节。 一般规则是MonoTouch支持Silverlight附带的相同WCF子集(即使随着时间的推移做了一些添加)。

我想因为没有可用的反映。

可以使用反射并与MonoTouch配合使用。 Reflection.Emit 没有,因为Apple不允许在iOS设备上使用JIT代码。 这可能会限制某些需要在运行时生成代码的API(但如果代码生成可以在编译时完成,则不会出现问题)。

...这意味着修复SVCUTIL.EXE生成的代码。 ...

战斗/编辑生成的代码通常是一个坏主意(例如,未来的维护)。 我建议您在投入太多时间自定义生成的代码之前尝试使用slsvcutil.exe

...代码看起来像是必须用该方法编写的?

如果您希望提供自己的频道(或自定义生成的代码),则可以使用Mono的System.ServiceModelSystem.ServiceModel.Web的完整源代码。

我完全不清楚:两个服务实用程序之间有什么区别?

slsvcutil.exe中SL前缀适用于Silverlight。 Microsoft制作此工具以生成仅使用Silverlight中可用的WCF子集的代码。 由于这是MonoTouch支持的相同子集,因此这是最好的工具。

如果我解决了命名空间问题,那么通过Silverlight实用程序创建的存根是否会使我的项目工作,还是会受到通用通道问题的影响?

应该工作。 这就是人们今天使用MonoTouch的WCF(可用子集)的方式。 如果存在此问题(子集/工具),您可以填写有关它的错误报告(带有测试用例),我们将查看它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM