Web 服务与 WCF 服务

Posted

技术标签:

【中文标题】Web 服务与 WCF 服务【英文标题】:Web Service vs WCF Service 【发布时间】:2010-09-25 23:10:11 【问题描述】:

它们之间有什么区别?

我什么时候会选择其中之一?

【问题讨论】:

查看其他讨论以获取更多信息...***.com/questions/50114/… 【参考方案1】:

此答案基于不再存在的文章:

文章摘要:

“基本上,WCF 是一个服务层,它允许您构建可以使用各种通信机制进行通信的应用程序。有了它,您可以使用对等、命名管道、Web 服务等进行通信。

您无法比较它们,因为 WCF 是用于构建可互操作应用程序的框架。如果您愿意,可以将其视为 SOA 推动者。这是什么意思?

WCF 符合 ABC,其中 A 是您要与之通信的服务的地址,B 代表绑定,C 代表合同。这很重要,因为可以更改绑定而不必更改代码。合约更强大,因为它强制将合约与实现分离。这意味着合约是在一个接口中定义的,并且有一个具体的实现,由消费者使用相同的合约思想来绑定。数据模型被抽象出来。”

...稍后...

“当我们需要与其他通信技术(例如点对点、命名管道)而不是 Web 服务进行通信时,应该使用 WCF”

【讨论】:

对于任何基于 SOA 方法的新项目,开发人员应该选择 WCF 而不是 webservices。因为它为将来的使用提供了灵活性和可扩展性。只有一个例外:如果客户端不支持与 wcf 服务(即 Flash AS2)的通信。 WCF 1) 它是一个多层架构 2) 它提供一个统一的平台(可互操作)或框架来构建面向服务的应用程序,以使用各种网络协议进行通信。 3) 与 Web 服务或 ASMX 服务相比,WCF 提供更好的安全性和可靠性 4) 支持普通 XML、Ajax 和 REST Web 服务 1) 简单 2) 编写一个函数并将其与 [WebMethod] 属性挂钩,它是准备提供服务 Joe 的回答 -> 文章复制于 codeproject.com/Articles/139787/…【参考方案2】:

来自What's the Difference between WCF and Web Services?

WCF 是 Microsoft 早期所有 Web 服务技术的替代品。它还比传统上被视为“Web 服务”的功能要多得多。

WCF“Web 服务”是通过 WCF 实现的更广泛远程通信的一部分。您将在 WCF 中获得比通过传统 ASMX 更高程度的灵活性和可移植性,因为 WCF 从头开始​​设计,总结了 Microsoft 提供的所有不同的分布式编程基础结构。 WCF 中的端点可以通过 SOAP/XML 与通过 TCP/二进制文件进行通信一样容易,并且更改此介质只需一个配置文件 mod。理论上,这可以减少移植或更改业务需求、目标等时所需的新代码量。

ASMX 比 WCF 更老,ASMX 可以做到的任何事情都可以 WCF(以及更多)。基本上,您可以将 WCF 视为试图将在 Microsoft 世界中让两个应用程序进行通信的所有不同方式逻辑地组合在一起; ASMX 只是众多方式中的一种,因此现在归入 WCF 功能的保护伞下。

Web 服务只能通过 HTTP 访问,它可以在无状态环境中工作,其中 WCF 很灵活,因为它的服务可以托管在不同类型的应用程序中。托管 WCF 服务的常见方案是 IIS、WAS、自托管、托管 Windows 服务。

主要区别在于 Web 服务使用 XmlSerializer。但是 WCF 使用 DataContractSerializer,与 XmlSerializer 相比,它的性能更好。

【讨论】:

随机说明:DataContractSerializer 和 XmlSerializer 的一大区别是 DCS 需要 字段排序——这就是为什么我不使用 DCS 进行非瞬态序列化或合同的原因!因此,在移动到 DCS 时(或移动到 DCS 但以与以前使用的顺序不同的顺序),可能会破坏客户端使用的服务而不使用固定顺序。当然,这应该在 Schema 中表达,但是 .. 另外,请引用/链接来源并注明摘录和/或获取原始信息并用它写一些新的东西。偷东西是不礼貌的。我已经为您添加了链接,但请确保在应有的地方给予信任! (如果我可以投反对票的话,我会在此基础上投反对票。)【参考方案3】:

网络服务 基于 SOAP 并以 XML 形式返回数据。 它只支持 HTTP 协议。 它不是开源的,但可以被任何理解 xml 的客户端使用。 它只能托管在 IIS 上。

WCF 也是基于 SOAP 并以 XML 形式返回数据。 它是 Web 服务 (ASMX) 的演变,支持 TCP、HTTP、HTTPS、命名管道、MSMQ 等各种协议。 WCF 的主要问题是其繁琐且广泛的配置。 它不是开源的,但可以被任何理解 xml 的客户端使用。 它可以托管在应用程序中,也可以托管在 IIS 上或使用窗口服务。

【讨论】:

WCF 还可以接收/发送 JSON 格式的 http 请求/响应,而无需使用 SOAP/模式(现在?)。 细节点:SOAP 支持 HTTPS。编码发生在传输层,因此客户端对它是不可知的——客户端发出 XML 请求并获得 XML 响应,它既不知道也不关心它是plain-ol-http 还是 encrypted-https。 【参考方案4】:

基本和主要区别在于,ASP.NET Web 服务旨在仅通过 HTTP 交换 SOAP 消息,而 WCF 服务可以通过任何传输协议(即 HTTP、TCP、MSMQ 或 NamedPipes 等)使用任何格式(默认为 SOAP)交换消息.

【讨论】:

【参考方案5】:

Web 服务和 WCF 有什么区别?

    Web 服务在将数据从一个应用程序传输到另一个应用程序时仅使用 HTTP 协议。

    但是 WCF 支持比 ASP.NET Web 服务更多的消息传输协议。 WCF 支持使用 HTTP 以及传输控制协议 (TCP)、命名管道和 Microsoft 消息队列 (MSMQ) 发送消息。

    要在Web Service中开发一个服务,我们将编写如下代码

    [WebService]
    public class Service : System.Web.Services.WebService
    
      [WebMethod]
      public string Test(string strMsg)
      
        return strMsg;
      
    
    

    要在 WCF 中开发服务,我们将编写以下代码

    [ServiceContract]
    public interface ITest
    
      [OperationContract]
      string ShowMessage(string strMsg);
    
    public class Service : ITest
    
      public string ShowMessage(string strMsg)
      
         return strMsg;
      
    
    

    Web 服务在架构上并不更加健壮。但是 WCF 在架构上是 更强大并推广最佳实践。

    Web 服务使用 XmlSerializer,但 WCF 使用 DataContractSerializer。哪个是 与 XmlSerializer 相比性能更好?

    对于内部(防火墙后)服务到服务调用,我们使用 net:tcp 绑定,比 SOAP 快得多。

    WCF 比 ASP.NET Web 服务快 25% — 50%,大约快 25% 比 .NET Remoting 更快。

我什么时候会选择其中一个?

WCF 用于在其他平台上开发并使用其他技术的其他应用程序之间进行通信。

例如,如果我必须将数据从 .net 平台传输到在其他操作系统(如 Unix 或 Linux)上运行的其他应用程序,并且它们使用其他传输协议(如 WAS 或 TCP),那么只有可能使用 WCF 传输数据。

在一个应用程序之间传输数据到另一个应用程序时,这里不受平台、应用程序传输协议的限制。

与 Web 服务相比,安全性非常高

【讨论】:

【参考方案6】:

主要区别在于超时,WCF Service在没有响应的时候已经超时,但是web-service没有这个属性。

【讨论】:

以上是关于Web 服务与 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

WCF 服务与 ASP.NET Web Api

ASP.Net Web API 与 WCF - Web API 能否用于向单例 WCF 服务提供基于 REST 的通信?

使 WCF Web 服务与 GET 请求一起工作

从类库调用 WCF 服务:App.Config 与 Web.Config?

如何创建更新数据库日志表的 wcf 服务或 Web 服务?

如何从 Azure Web 应用程序与 IIS 中本地托管的 WCF 服务进行通信?