c# - Monotouch 和 WCF : difference of SVCUTIL. EXE 和 SLSVCUTIL.EXE 以及如何避免不受支持的通用 ChannelFactory?

标签 c# wcf web-services xamarin.ios

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

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

出现这些问题:

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

最佳答案

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

I suppose because there is no reflection available.

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

... This means fixing the code generated by SVCUTIL.EXE. ...

修改/编辑生成的代码通常不是一个好主意(例如 future 的维护)。我建议您在花费太多时间自定义生成的代码之前尝试使用 slsvcutil.exe

... What does code look like that has to be written in that method?

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

Totally unclear to me: what is the difference between the two service utilities?

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

If I get the namespace issue sorted out, will the stubs created through the Silverlight utility make my project work, or will that also suffer from the generic channel issue?

应该 有效。这就是人们今天将 WCF(的可用子集)与 MonoTouch 结合使用的方式。如果此(子集/工具)有问题,您可以填写 bug报告它(带有测试用例),我们会看看它。

关于c# - Monotouch 和 WCF : difference of SVCUTIL. EXE 和 SLSVCUTIL.EXE 以及如何避免不受支持的通用 ChannelFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8274848/

相关文章:

c# - PowerCollections - MultiDictionary 'Remove' 在找不到值时删除所有值

c# - 使用变量名调用接口(interface)

没有 SSL 但具有 Windows 组身份验证的 WCF 服务

iphone - 如何将文件上传到webservice

c# - C# 中的基本多线程问题

c# - 如何使用 Azure.Storage v12 SDK 从 Azure Blob 中删除元数据?

c# - .Net Core MVC 中是否有类似 RouteConfig.cs 的东西?

asp.net - jQuery、WCF 和 ASP.NET

php - wsdl 中的 'any' 是什么以及我如何使用 php 调用 wsdl 函数?

c# - 相对 URI 不支持此操作,浏览 SVC 服务时出错