Web 服务——WCF 与 ASMX(“标准”)

Posted

技术标签:

【中文标题】Web 服务——WCF 与 ASMX(“标准”)【英文标题】:Web Services -- WCF vs. ASMX ("Standard") 【发布时间】:2010-09-05 14:53:24 【问题描述】:

我正在做一个新项目。与常规的老式 Web 服务相比,使用 WCF Web 服务有什么好处吗?

Visual Studio 为两者提供模板。有什么区别?利弊?

【问题讨论】:

WCF 的学习曲线非常大,不要搞错。是的,您可以通过一些复制和粘贴并填补空白来让服务运行得不太好,但是大多数开发人员需要几个月的时间才能了解所有配置和设置的实际作用。 大多数开发人员不需要了解所有配置,此外,.NET 4.0 彻底改变了这一点。 我可以保证这是一个陡峭的学习曲线。 WCF 几乎是拜占庭式的。我已经研究了大约一个月,但我才刚刚开始了解它。围绕不同的安全方法、不同类型的数字证书和客户端/服务器验证存在许多复杂性。周围有很多非常好的视频教程。看看questpond.com。我不记得 ASMX 有多么令人痛心,但 WCF 看起来确实非常强大,而且值得付出努力。 【参考方案1】:

什么是“常规的老式网络服务”? ASMX 服务,还是您也在使用 WSE? ASMX 服务不是天生可互操作的,不支持 WS-* 规范,而且 ASMX 是一种很快老化的技术。 WSE(Web Service Enhancements)服务确实添加了对 WS-* 的支持,并且可以使其具有互操作性,但 WCF 旨在取代 WSE,因此您应该花时间学习它。我想说的是,除非您的应用程序是一个快速而肮脏的一次性应用程序,否则如果您选择 WCF,您将获得巨大的灵活性并最终获得更好的设计。 WCF 确实有一个超越 [WebMethod] 属性的学习曲线,但在我看来,学习曲线被夸大了,而且它比传统的 ASMX 服务更强大且面向未来。

除非您的时间线根本无法忍受学习曲线,否则您学习 WCF 而不是仅仅坚持使用 ASP.NET Web 服务对您自己有很大帮助。应用程序只会继续变得越来越分布式和互连,而 WCF 是 Microsoft 平台上分布式计算的未来。

Here is a comparison 介于两者之间。

【讨论】:

【参考方案2】:

自己做所有事情的优点是:

没有学习曲线 非常灵活

WCF 的优点是:

从长远来看花费更少的时间 无需编程即可切换协议

WCF 的一个缺点:一些静态属性名称can be pretty lengthy...

总结一下:WCF 让您专注于编程,但您需要先学习它;-)

【讨论】:

【参考方案3】:

WCF 专业版:您不需要 Web 服务器(即 IIS)。您实际上不需要服务器操作系统。

【讨论】:

【参考方案4】:

我喜欢编写 WCF 服务可以轻松地将服务与实现分开这一事实。您可以编写服务,然后将其托管在 IIS、控制台应用程序或 Windows 服务中;您也可以通过 HTTP、net TCP 等方式与它通信。

【讨论】:

【参考方案5】:

对您的服务实现和交互进行单元测试更容易!

【讨论】:

【参考方案6】:

如果你的项目使用的是framework 4.0,为什么不试试WebApi,它易于理解并且使用约定优于配置。

这是构建具有超快速接口的应用程序的好方法

看看 MS 的入门视频,它是从 WCF 数据服务演变而来的。

http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api

【讨论】:

【参考方案7】:

根据我的经验

WCF

使用它非常冗长,与其他微软产品不太兼容,当然,它在微软世界之外并没有被广泛接受。

但我的主要问题是它不稳定,它趋向于失败(在某些情况下)并且需要对其进行调整才能使用。

改为

SOAP(又名标准 Web 服务),它可以工作,工作简单,兼容广泛(Java-JAX 无需任何修改即可接受)。

在 SOAP 中添加身份验证可能有点棘手,但并非不可能。

【讨论】:

-1 表示错误信息和未经证实的意见。当您说 WCF 是“冗长的”时,我只能假设您在谈论配置,在这种情况下,您应该开始使用 .NET 4.0 或 4.5。如果您想认真对待,则应证实“与其他 Microsoft 产品不兼容”。但是如果将 WCF 与 SOAP 进行对比,就会失去所有可信度。 @John Saunders,所以你无缘无故地捉弄我。天哪的家伙。不,即使在 net 4.0 中,wcf 仍然是半生不熟。无论如何,WCF 是供应商锁定的。 你显然不知道你在说什么。 “供应商锁定”显然是无稽之谈。你可以通过陈述事实而不是咆哮来纠正我的观点。 您可以通过多种方式使用 WCF:使用 http/SOAP,您可以获得一个 wsdl 以使用大多数技术自动生成客户端代码,如果您的服务应该是公共的,这很简洁。对于内部服务,net.tcp 甚至 MSMQ 都是一种选择 - 如果您坚持这样做,您可以将自己锁定。 我可以用 WCF 做什么而我不能用 SOAP 做?

以上是关于Web 服务——WCF 与 ASMX(“标准”)的主要内容,如果未能解决你的问题,请参考以下文章

iOS 应用程序的 WCF 或 Web 服务 (.asmx)?

WCF 服务而不是 ASMX Web 服务?

不同的 WSDL ASMX、WCF Web 服务

asmx 到 WCF 或 Web API

选择啥? .net 3.5 中的 ASMX Web 服务或 WCF?

ASP.net Webservice *.asmx 访问与 WCF 服务参考