WCF => MVC 作为 ASP.NET WebServices => ASP.NET Web 应用

Posted

技术标签:

【中文标题】WCF => MVC 作为 ASP.NET WebServices => ASP.NET Web 应用【英文标题】:WCF => MVC as ASP.NET WebServices => ASP.NET Web Apps 【发布时间】:2011-08-10 12:07:05 【问题描述】:

我从一开始就是一名 .NET 人员,但在我的工作经验中,我还没有涉足 WCF 或 MVC 的世界。我认为区别更多的是基于 WCF 和 MFC 的框架/约定,如果我错了,请纠正我。

但是,我真正想知道的是:说 WCF 之于 MVC 就像常规 ASP.NET WebServices 之于常规 ASP.NET Web 应用程序一样正确吗?如,WCF 和 MVC 应该一起使用,常规 ASP.NET WebServices 和常规 ASP.NET Web 应用程序应该一起使用吗?或者可以混合这4个组合吗?

另外,为什么不想升级到 WCF 和/或 MVC?

【问题讨论】:

我认为这个问题很糟糕,因为很多答案都是基于您正在开发的项目及其要求。我还认为您的个人问题可能是骗人的,例如 MVC 和 WCF 之间的差异以及您何时想要使用它们。 @jfar - 好吧,我不同意。不要做个混蛋。它可以是一般性的,也可以是具体的,就像人们需要的那样。谁不对自己的情况应用答案。这本身就是你的愚蠢逻辑。 叹息。有问题指南。去看一下。你的问题中有几个失败了,我认为它应该被关闭。 ***.com/faq你的问题也是一堆傻逼。如果你把这个问题分开,我想你问的 99% 都会被覆盖。 @jfar - 首先,你的例子是 3 岁。一个人几乎不能依赖甚至一年前的文章或问题。其次,我在发帖前确实看了几个问题,但我仍然觉得有必要以我自己的方式与知识渊博的人互动。我厌倦了你们这些精英分子阻碍了积极的反馈。如果您想四处游荡并持否定态度,那是您的特权。如果您想阻止人们提出问题,请坚持下去。 @jfar - 既然我说我还没有进入 WCF 或 MVC,我怎么知道这个问题在 MVC 1.0 和 3.0 之间不会有任何改变或改变。我的观点是,我应该可以重新访问一个主题,因为它是在 3 年前引入的,并且关于该主题可能会有新的或不同的意见。更不用说,它让我可以与知情人士直接互动。阅读 3 岁的问题并不能帮助我做到这一点。 【参考方案1】:

MVC 是一种基于约定的 ASP.NET Web 应用程序方法。我认为你是对的。

这种类比在 ASP.NET Web 服务和 WCF、IMO 之间不成立。

ASP.NET Web 服务和 WCF 都是基于约定的编程范例。例如这两个框架都会根据名称将您的 SOAP 调用与方法实现相匹配。两者都会根据结构和字段名称等将有效负载中的数据序列化到您的对象模型中。

WCF 为不同的传输类型(TCP、命名管道、MSMQ、HTTP 等)提供了统一的编程模型。它使您可以更好地控制服务的托管方式。它使您可以更好地控制有效负载的编码方式。

我觉得说 WCF 是 .NET Remoting 和 ASP.NET WebServices 的统一,在扩展点上有很大的改进。

希望这会有所帮助。

【讨论】:

@Nareen - 这真的很好地解释了我。当我恢复我的特权时,我会支持你。 =D @Scott。很高兴它有帮助。好的概念问题顺便说一句【参考方案2】:

这是错误的。

WCF 不仅仅是 Web 服务。 ASP.NET MVC 主要用于 Web。

【讨论】:

我同意布赖恩的观点,这确实无助于回答我的具体问题。【参考方案3】:

不,这个类比不正确,是的,您可以混合和匹配这些技术。

WCF 与 Web 服务

Windows Communication Foundation 是一个用于构建面向服务的应用程序的框架,它为您处理开箱即用的大量管道(安全性、事务、可靠性、互操作性等)。它不仅仅是 Web 服务,尽管它很好地完成了 Web 服务。因此,与 Web 服务相比确实很少,WCF 更胜一筹。

MVC 与 Web 表单

两者都是可行的选择,都有相对的优势和相对的弱点。它们也不是相互排斥的。如果您的应用程序在 Web 表单上运行良好,并且您的开发团队在该平台上工作效率很高,那么您不会想要“升级”(不是升级,而是更改)到 MVC。在这种情况下,改变对现实世界没有任何好处。

但是,如果您要开始一个新项目,那么您必须查看您的开发团队并根据他们的技能组合做出决定。就个人而言,如果我的开发团队有 MVC 经验,我会选择 MVC,但这并不意味着 webforms 有什么问题。

【讨论】:

@Brandon - 好点。有点像我在 MVC 方面的想法。真正的升级比横向移动更重要,它迫使开发人员采用基于约定的方法。 是的 - MVC 肯定比 webforms 有好处,但 RAD 并不是其中之一(无论如何)。您的团队在使用网络表单时可能会更有效率,至少在最初是这样。 MVC 的其他一些好处是关注点分离、TDD、没有 ViewState 和没有 PostBack 事件。 MVC != RAD 是一个神话,完全不真实。 @jfar - 所以你是说 MVC 是一种 RAD 方法? 另外,我不确定我是否理解这个答案的反对意见是什么?投反对票的人是否想就原因发表评论?【参考方案4】:

我真的不认为各自的技术对之间存在类比关系。

Windows Communication Foundation 是一个框架,用于通过支持多种传输和应用程序协议的网络通道发送和接收数据。将此与 ASP.NET Web 服务进行对比,后者实际上仅支持 RPC over HTTP(S)。

ASP.NET MVC 是一个 Web 应用程序框架,代表 Microsoft 对模型-视图-控制器设计模式的实现。因此,实际上,它是一种特殊类型的 ASP.NET Web 应用程序,而不是替代(或模拟)ASP.NET Web 应用程序。

【讨论】:

所以基本上,除了强制您进入分层系统的设计/约定模式之外,使用 MVC 没有任何好处? @Scott 这是一种表达方式。我想说的是,就像任何技术一样,你应该在合适的时候使用 ASP.NET MVC,而不是在不合适的时候使用它,然后把它留在那里。 MS 开发了这个框架,因为绝大多数基于网络的 n 层信息系统可以/应该遵循这种模式。 我只是在考虑我的公司,是否明智地转向 MVC。我们目前使用一种 n 层系统。我们使用 CodeSmith 将我们的数据对象从 SQL 2008 生成到数据项目中。我们有一个业务项目,其中包含我们所有的组织规则/逻辑/工作流程。在大多数情况下,我们的表示层是应有的,只是用于表示数据,尽管很难保持这种状态。我们有更多的层,但你明白了。 @Scott - 说因为获得层而使用 MVC 是唯一的原因是一个错误的答案。这里还有一些原因。 MVC 易于定制以处理新约定、各种 RAD DisplayFor 和 EditorFor 模板、固有的可测试性、您可以轻松支持 XML/JSON 和 html、改进的 Razor 视图引擎、DI 友好性和缺少 ViewState.. ……等等…… 同意 MVC 是 ASP.NET webapps 的专用框架,但我认为它被公众视为下一步或“升级”。正如 jfar 所说,固有的可测试性(视图和视图控制器逻辑的分离)是对普通 ASP.NET 的非常重要的改进。我还要指出,对于 ASP.NET 的新手来说,能够主要使用纯 HTML/JS 而不是 ASPX 标记也是一个优势。【参考方案5】:

不是真的,只是因为 WCF 和 MVC 是较新的技术。

WCF 是一个综合性的通信框架,它包含并取代了旧的 ASP.NET Web 服务。它与 MVC 没有直接关系。如果您明天要从头开始构建服务应用程序,那么您将使用 WCF。

ASP.NET MVC 和 ASP.NET Web 窗体是构建 Web 应用程序的两种不同方法。 MVC 与 Web 的“颗粒”相得益彰,面向 URI,而 Web Forms 试图通过创建有状态的、类似 WinForms 的编程模型来隐藏 Web 的本质。您选择使用哪个取决于您的应用程序的性质和开发人员的技能。

【讨论】:

以上是关于WCF => MVC 作为 ASP.NET WebServices => ASP.NET Web 应用的主要内容,如果未能解决你的问题,请参考以下文章

带有 asp.net mvc 应用程序的 WCF 服务

ASP.NET MVC 和 WCF

RESTful 服务:WCF 与 ASP.NET MVC

ASP.NET MVC - 服务层 - 业务层 - 数据层 (EF) - SQL DB :: 数据传输?

ASP.NET MVC 和 WCF 服务安全 - 身份验证、路由

在 .NET 中开发新的 RESTful Web 服务——我应该从哪里开始? ASP.NET-MVC,WCF?