WCF的替代品[关闭]

Posted

技术标签:

【中文标题】WCF的替代品[关闭]【英文标题】:Alternatives to WCF [closed] 【发布时间】:2010-11-18 17:52:04 【问题描述】:

我目前正在使用 WCF 实现一个 Silverlight 应用程序,用于客户端和服务器之间的通信。我听说使用 WCF,我们必然会在客户端使用一些 Microsoft 技术,并且不能轻易地将其替换为“任何东西”——至少使用 WPF 的默认 SOAP 实现。

所以我的问题是:

这是真的吗? Restful WCF 服务怎么样?我描绘了一个普通的 REST 实现,任何客户端都可以通过 REST 与这个服务器端通信。是的?不? 有哪些(好的)替代方案可以替代 WCF?我为什么要这样做?

【问题讨论】:

【参考方案1】:

我是维护ServiceStack 的核心团队的一员 - 一个成熟的 WCF 开源替代方案:现代、代码优先、模型驱动、WCF 替代 Web 服务框架 encouraging code and remote best-practices 用于创建简洁、干燥、@ 987654323@.

它自动支持 JSON、JSONP、CORS 标头以及 form-urlencoded/multipart-formdata。在线演示是一个很好的开始,因为它们都使用 Ajax。

此外,没有 XML 配置或代码生成,您的“一次性编写”C# Web 服务提供所有开箱即用启用的 JSON, XML, SOAP, JSV, CSV, html 端点,并自动使用挂钩插入您自己的 @987654326 @如果需要。

它还包括generic sync/async service clients,提供了一个快速、有类型的客户端/服务器端对端通信网关。

这是创建简单 Web 服务所需的所有代码的完整示例,无需任何配置即可自动注册并在所有 web data formats on pre-defined and custom REST-ful routes 上提供:

public class Hello : IReturn<HelloResponse> 

    public string Name  get; set; 


public class HelloResponse 

    public string Result  get; set; 


public class HelloService : Service 

    public object Get(Hello request)
    
        return new HelloResponse  Result = "Hello, " + request.Name ;
    

可以在 C# 中调用以上服务(无需任何构建步骤/代码生成),使用以下行:

HelloResponse response = client.Get(new Hello  Name = "World!" );
response.Result.Print(); // => Hello, World

在 jQuery 中使用:

$.getJSON('hello/World!', function(r) 
    alert(r.Result); 
);

【讨论】:

您已经将其称为“开源”。这看起来像是一个商业产品(即使你免费提供“精简”版本)。Github 中是否有源代码? 这是“Openware”,代码本身是开源的,但如果不支付“专业版”就很难使用。例如,本教程需要安装付费的 Visual Studio 扩展。 @Daniel ServiceStackVS VS.NET 扩展是免费使用的,它安装了最新版本的 ServiceStack v4,可以在 free quotas 中免费使用。 ServiceStack 的 BSD/免费 v3 的所有文档都可以在以下位置获得:github.com/servicestackv3/servicestackv3/wiki @mythz 所以 v4 不是开源的。也许你应该修改这个答案。 @Daniel v4 在 OSS AGPL/FOSS Exception 和适用于闭源/商业项目的商业许可证下获得双重许可。【参考方案2】:

我听说使用 WCF 我们会绑定 使用一些 Microsoft 技术 客户端

好吧,那你被骗了!

许多供应商和开源库都支持 SOAP - 这是 W3C 标准,而不是 Microsoft 特定的想法。

RESTful 服务的一个很好的替代方案是 ASP.NET MVC,我发现了一种将方法直接公开为 URL 的非常简单的方法。

【讨论】:

哦,好吧 - 那是件好事。我知道 SOAP 不是特定于 MS 的,所以我真的不明白为什么带有 SOAP 的 WCF 会将我们绑定到 Microsoft。谢谢你把它清理干净!而且创建WCF服务的时候默认使用SOAP吧? 从名称“ASP .NET MVC”听起来像是您通常在 ASP .NET 应用程序中使用的东西。当然 - 我的 Silverlight 是用 ASP 封装的,但它会像适合 ASP 应用程序一样适合我的 Silverlight 应用程序吗? 不,是的;)。您必须明确指定绑定。所以 - 你必须选择,因此,“默认”这个词不适合这里,另一方面,你不必在某个地方打开任何魔法选项,这是你的选择。 @bambushka - 您应用的 Silverlight 部分在客户端运行。您是否正在想办法让其他地方的客户直接连接到该应用程序?我认为不会(无论如何它基本上不会工作。)任何类型的可联系 Web 服务都必须在服务器上运行。因此,根据定义,我们不是在谈论与 Silverlight 直接相关的任何事情。我们正在谈论服务器端。这就是您使用 ASP.NET MVC 的地方。这只是一种非常简单的方法来创建一个可以通过 HTTP 返回数据的自定义服务器;您只需编写一两个方法,然后让它们返回 JSON 或其他什么。 否 - 什么都不会连接到 Silverlight 客户端。是的 - 对这个问题感兴趣的是服务器端。哦,我明白了。但是您在服务器端没有任何 ASP - 这个名称是不是有点令人困惑?将研究 ASP .NET MVC。谢谢!【参考方案3】:

WCF 基于 SOAP(默认情况下 - 也支持 REST)并且可以轻松地与任何能够理解和使用 SOAP 的客户端进行互操作。

其中包括 Java、php 等语言和系统。

WCF 是 Microsoft 的实现 - 但标准都是国际和可互操作的标准。标准中没有任何内容是 Mircosoft 特有的。

马克

【讨论】:

每个人都说 WCF 不会将我绑定到 Microsoft :-) 很高兴听到 - 显然我被错误地告知了......谢谢! 虽然“纸上谈兵”在现实中听起来非常好,但互操作性仍然存在许多小而烦人的问题...... 请详细说明“小而烦人的互操作性问题”。否则,你和那些告诉 OP WCF 会将他绑定到 Microsoft 的人一样糟糕。【参考方案4】:

WCF 为您提供了一个抽象层次,让您了解您现在/想要的交流方式。因此,您可以选择 Microsoft 特定的绑定,但也可以使用 SOAP 协议,或者两者都使用,这样非 Microsoft 客户端将能够通过 fe 进行通信。 SOAP 等客户端可以使用更健壮的方式。 至于 REST,你可能想看看 Hanselman 在 NDC here 上的演讲。它可能不会直接回答您的问题,但可能会为您指出一些问题。 至于替代方案,除了 Web 服务之外,我看不到任何可以在 .NET 上运行的东西(但是,因为 WCF 为您提供了所有这些以及更多功能,我宁愿将其视为一种较旧的方式,而不是真正的替代方案)。

【讨论】:

谢谢!将查看 Hanselman 的演讲(正确链接:media01.smartcom.no/microsite/asx.aspx?eventid=4499)。好吧 - 如果 WCF 没有将我绑定到 Microsoft,我会很高兴。不过我会考虑改用 REST。我觉得现在这通常比 SOAP 更受欢迎——但我可能错了吗? 现在REST比较流行。 SOAP 对于大多数应用程序来说是多余的。 XML 无论如何都不适合表示分层数据。 SOAP/WSDL 是一个非常混乱的标准,它结合了 XML Schema 标准(它结合了来自 Unicode 联盟的正则表达式标准)。与这一切相比,REST 几乎什么都不是,基本上只是 HTTP。并且比基本 SOAP 更强大(例如,您可以将图像作为二进制流返回)。 我在这个领域没有足够的能力来回答这个问题,但我知道 Hanselman 在那里提到的一件事 - 这些技术非常适合客户端应用程序等,但有时,整个想法获取(通常)二进制数据并将它们作为文本放在括号内可能会产生过多的开销。在 WCF 中,我喜欢这样一个事实,即我可以编写一次逻辑(合约的实现),然后使用多种方式轻松访问它们。 @Ravadre - 你有那个 Hanselman 评论的链接吗?我要说的一点是,HTTP 本身可以返回二进制而不需要将其编码为文本,因此,如果您(例如)想要返回 PDF 或 JPEG 或 ZIP 下载作为该方法的结果,您可以这样做, 通过返回 ContentResult 或 FileResult 等。看看派生自 msdn.microsoft.com/en-us/library/… 的类 - 因此,如果您只想返回一个内容流作为结果,它是零编码工作并且实现最佳。 @Earwicker - 你是对的,这个“评论”实际上是视频末尾的答案,我评论的重点是(我认为 - 也是 Hanselman 的),使用这些格式像 JSON 一样会产生开销,因此它并不总是使用它们的最佳方式(即返回大量数据时)。我的最后一条评论可能不准确(主要是因为它必须很短;))-我并没有忽略可能性,我只是指出,使用“文本”协议(soap,json)返回数据很容易方便(fe. 便于用 js 解析),但并不总是实现目标的最佳方式。【参考方案5】:

对于 java - wcf 互操作性检查 Sun 的 Project Tango link

【讨论】:

链接已断开

以上是关于WCF的替代品[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

WCF 是提高标准还是仅仅提高了复杂性水平? [关闭]

为啥从 WCF 服务返回数据集或数据表不是一个好习惯?啥是替代品?

WCF - 使用 NetHttpBinding(WebSockets) 或替代双工绑定发送 JSON

通过 WCF 双工通道长期运行的回调合同 - 替代设计模式?

vb.net express 中客户端-服务器应用程序的 WCF 替代方案?

如何让 gzip 压缩在 WCF 4.5 中工作