【问题标题】:System.Reflection.Emit to Implement a WebChannelFactory for Silverlight 4?System.Reflection.Emit 为 Silverlight 4 实现 WebChannelFactory?
【发布时间】:2011-06-05 17:10:32
【问题描述】:

这个问题是在别人的问题之后出现的,因为提问者从不接受或说出他的问题的解决方案,如果他找到了。

What's the most portable way to make a Silverlight & Regular .NET REST client

如果您熟悉 .NET 中的 WebChannelFactory,它提供了一种创建客户端以访问 WCF Web Http (REST) 服务的简洁方法。 Silverlight 4 中没有这样的类,因此可能值得创建一个类似的类。

您将如何开始创建这样的类,该类会创建一个实现您的服务合同 (TChannel) 的客户端?我不知道微软是如何做到的,但看起来他们以某种方式在运行时创建了一个新类型来实现接口。你会在 Silverilght 中这样做吗?也许通过查看 System.Reflection.Emit 和 TypeBuilder.AddInterfaceImplementation

我的一个更具体的 System.Reflection.Emit 问题是,如果您想使用现有的编译代码,使用 MethodBuilder 为您的 TypeBuilder 创建方法的最简单方法是什么?看起来您可以使用 MethodBuilder.CreateMethodBody,但是,在 Silverlight 4 中,这不存在。

【问题讨论】:

    标签: wcf rest reflection silverlight-4.0 reflection.emit


    【解决方案1】:

    首先,WebChannelFactory 不是构建 REST 客户端的干净方式 - 这是完全无 REST 的方法,因为它要求您在服务和客户端之间共享所有合同。 WebChannelFactory 的存在是为了提供与标准 WCF 服务客户端的兼容性,并以某种方式(错误地)简化了调用 .NET 编写的 REST 服务。这也是 MS 如何做到的答案 - 没有运行时创建该类型。类型是在设计时定义的。

    【讨论】:

    • 也许“干净”不是这个词。也许“简化”?因为在 WebChannelFactory.CreateClient 创建的 TChannel 上调用我的 OperationContract 方法之一似乎比每次我发出请求时都必须使用 WebClient 发出相同的请求并指定 URL 简单得多。我想我明白为什么不需要在运行时创建 TChannel...我正在努力在 Silverlight 中创建 WebChannelFactory 和 WebClient 的替代方案...
    • 如果对您有帮助,请查看:blogs.msdn.com/b/carlosfigueira/archive/2010/04/29/…
    【解决方案2】:

    这是一篇不错的文章。我决定创建一个类来简化调用 REST WCF 服务并更能满足我的需求。也许其他人会觉得它有用。

    WebHttpClient

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      相关资源
      最近更新 更多