【问题标题】:How significant is .NET 3.5 SP1 for WCF/REST?.NET 3.5 SP1 对 WCF/REST 有多重要?
【发布时间】:2009-01-21 05:09:18
【问题描述】:

我刚刚处理了一个 book on WCF 并惊讶于它根本没有提到 REST。

REST 是在 .NET 3.5 SP1 中添加的 WCF 的事后考虑,因此没有很好地融入或集成得很好?

我假设 Silverlight 和 XBAP 可以毫无问题地使用 WCF,还是由于它们的沙盒环境而存在一些限制?我一直在读到有些人有problems getting WCF to play well with XBAP,我认为 Silverlight 也有类似的问题。

【问题讨论】:

    标签: .net wcf rest


    【解决方案1】:

    应用到 REST 系统的许多约束即使不是不可能,也很难用 WCF REST 实现。编程模型有泄漏的抽象(json / xml 的不同方法),不支持多种媒体类型(仅 x​​ml 和 json),方法选择过于依赖 uri 参数等。它没有与 asp 集成。无论如何,在 WCF 处理的服务 /customer 和应该返回 html 的 /customer 之间存在差异。

    并不是说您不能自己实现所有这些,但您很快就会得到一个几乎可以取代 WCF Rest 开箱即用的所有东西的东西。

    【讨论】:

    • 您的 cmets 几乎完全反映了我的经验。在 WCF 上做了一年的 REST 之后,我几乎完全用 HttpListener 和大约 500 行我自己的代码取代了 WCF 堆栈为我做的事情。
    【解决方案2】:

    就 WCF 上的 REST 而言,我认为 Tim Ewald said it best

    “...我不确定我是否要在旨在将 HTTP 分解的层之上构建一个旨在将 HTTP 分解的层。”

    【讨论】:

      【解决方案3】:

      John Papa 在我们本地的 .Net 用户组中发言。他演示了 Silverlight -> Restful 服务调用。你可以get his book 和/或下载他的代码。

      在上面的链接中搜索“Silverlight 2 的数据驱动服务的源代码”。我没有直接链接它,因为 url 可能会改变(他会更新文件)。

      【讨论】:

      • 仅供参考,John 在他的书中涵盖的场景是关于 WCF ReST,而不是关于 ReST 本身,或者如何与 ReST 架构进行互操作。我应该知道,我回顾了他书中的章节。检查感谢页面...
      【解决方案4】:

      这是个人观点,但我不认为 3.5 SP 1 中的 RESTful 支持是事后的想法。使用 WCF 创建和使用是可能的,而 ADO.NET 数据服务等将它作为一个关键特性。

      Silverlight 和 XBAP 可以毫无问题地使用 WCF。他们最大的问题是

      • 安全。它们具有更高的安全性,这可能会导致在完全受信任的应用程序中看不到的问题。这是为了保护用户,所以我不认为这是一件坏事,只是需要处理的事情。
      • Silverlight 仅是异步的。

      我个人的经验是,Silverlight 使用 WCF 比使用 XBAP 更容易,因为安全模型比运行 XBAP 的愚蠢定义更好(为什么不只使用一次单击 + WPF,你会得到与 XBAP 完全相同而不会头痛 -我现在要离开我的肥皂盒)

      【讨论】:

      • 你如何定义 REST?是基于罗伊菲尔丁的定义吗?
      【解决方案5】:

      与分发有关的所有内容都将被纳入 WCF,但 WCF 作为一个框架将驻留。这意味着,当它的核心概念足够强大时,它就会存在。这个核心概念就是 WCF 提供的:一个用于实现新的分布式通信协议的框架。这些资产可以在项目之间共享。 WCF 是这些资产可以存在的运行时。每个 WCF 程序员都会立即知道如何集成新的 WCF 资产。 例如: Azure 中的 ServiceBus 组件作为 WCF 的新资产提供。已经启用 WCF 的项目可以立即切换到新的 ServiceBus。 REST 不是 WCF,但 WCF 已通过 REST 进行了扩展,而不会破坏其核心概念。 除此之外,WCF 还有很多其他协议:Streamed、Bidirection、WS-*、.... Silverlight 没有 WCF 集成。它支持 HTTP 和 TCP/Socket 通信。为什么 Silverlight 和 WCF 之间有密切的关系? Silverlight 正处于快速扩展的阶段。它也是通信堆栈。 WCF 也支持 Silverlight 中的每一种新的通信方式。它正在协同发展。 顺便说一句,Linq 也有进化的核心概念。

      【讨论】:

      • 您混淆了技术管道和建筑风格。您可以“只运行”代码并通过配置切换创建不同架构的想法与现实不符。
      【解决方案6】:

      在 3.5 之前使用 WCF 进行 REST 基本上意味着 做很多嵌入到 WCF 中的东西。但是在 3.5 之前使用 WCF 实现 REST 服务是非常可行的,它只是涉及更多代码。 您基本上必须忽略 SOAPy 的东西,并构建您自己的自定义通道堆栈。 (为此,您必须创建一个 CustomBindings 并告诉 TextMessageEncoder 不要使用 SOAP(通过使用 MessageVersion=None)) 使用 3.5 获得的东西是所有 REST 东西都是开箱即用的,您可以选择使用 WebHttpBinding 指定 REST 接口。 因此,在我看来,REST 实现非常适合现有的 WCF 堆栈,而不是添加到其中的 hack。但是他们简化了 3.5 中开箱即用的 REST 精简版而非 SOAPy 版本。

      【讨论】:

        【解决方案7】:

        为了完整起见,Effective REST Services via .NET: For .NET Framework 3.5 by Kenn Scribner and Scott Seely 存在。 DNR 或 HC 或 DFB 与 Scott 进行了交谈,我购买它是为了获得 WCF 的一般报道。我还没有阅读它(甚至翻阅它),如果/当我阅读它时会报告回来(尽管如果在运行到 OpenRasta 之前我什至不这样做,我不会感到惊讶)。

        【讨论】:

          猜你喜欢
          • 2015-05-16
          • 1970-01-01
          • 1970-01-01
          • 2010-11-23
          • 1970-01-01
          • 2012-03-27
          • 2010-09-19
          • 2015-10-25
          • 2010-09-18
          相关资源
          最近更新 更多