网络服务VS. Aspx页面:优点和缺点

时间:2011-01-14 16:26:28

标签: c# asp.net wcf web-services

我们开发了一个托管在内部网络上的ASP.Net Web应用程序。目前,我们有一些ASPX页面可以处理来自客户端的Web请求并与我们的服务器进行交互。我们正在开始开发下一个主要应用程序版本,我们正在决定架构。

与使用完整的Web服务(很可能是WCF服务)相比,使用ASPX页面处理http请求有什么区别?

在研究此问题时,我发现了一些相关的帖子,这些帖子有中等帮助,见herehere。我对一些主要差异的理解如下:

  1. ASPX页面受限于他们可以接收的请求类型。它们是严格的HTTP,而WCF服务可以有多个端点来服务各种协议(HTTP,TCP等)。
  2. 由于ServiceContracts,更具体地定义了WCF服务。这意味着如果项目引用了该服务,他们就会确切地知道在方法,用法和文档方面会有什么期望。在包含的方法和接受的请求方面,ASPX页面对所有人来说都是免费的。
  3. 但是,基于这些概念,我的问题如下:

    1. 支持不同协议的能力是未来验证和兼容性方面的一个很好的功能,但是如果我们目前使用它通过HTTP进行交互,我们会看到真正的好处吗?
    2. 与我之前的论点一致,如果我们只是通过网络与服务进行交互,那么这些点中的任何一点真的会有所不同吗?只要它所称的方法“正常工作”,http请求就不关心任何更精细的细节或合同保证。
    3. 我有什么遗漏的吗?使用服务的任何关键好处?就个人而言,我支持Web服务架构。我喜欢拥有一个可以支持未来发展的灵活且定义明确的系统的想法。我基本上想要摆脱这种情况是一种方式去找同事并说“这应该是x y z原因的服务,我们可以看到这样做的b c改进”。

5 个答案:

答案 0 :(得分:4)

WCF(以及较旧的基于asmx的Web服务)为您执行了许多序列化任务。您可以从方法返回对象,框架会将这些对象序列化为正确的格式XML,并为客户端提供wsdl,以便他们可以调用您的Web服务方法并了解他们正在返回的内容。

可以使用网页页面(我打赌那里有大量的PHP“网络服务”),但是你必须做所有这些自己管道。

请求的类型是WCF-magic。 WCF具有“端点”的概念,允许您将调用服务的方法与服务的方法分开。它只是一个更好的(虽然很多很复杂的)架构,可以更好地区分这两个问题。

我怀疑任何web服务的性能瓶颈都是使用asmx而不是WCF的选择。 Web服务体系结构中的性能损失几乎总是由于繁琐的接口和/或非常大的对象/对象图。事实上,您正在远程调用Web服务,这使得在大多数情况下WCF与asmx的速度差异无关紧要。 WCF在设计上更灵活,这是选择它的正当理由。 WCF确实使用较新的DataContractSerializer而不是轴中使用的旧方法,并且据说它更快一些。我认为你必须扩展到相当多的用户才能看到有意义的差异 - 你最好先寻找繁琐的接口和糟糕的数据库查询。

当然,如果有疑问 - 先测量,然后针对性能不佳的特定区域。

答案 1 :(得分:3)

您不应该将ASPX页面用作临时服务端点,如PHP世界中常见的那样。 ASPX页面的请求通过相当多的HttpModule进行过滤,这对于简单的服务端点来说是不必要的开销,并且每个请求都无缘无故地创建了Page类的实例。

如果您需要的是一个非常简单的以XML或JSON响应的端点,ASMX仍然是一个很好的选择。

如果您需要更多灵活性并愿意处理配置负担,WCF非常强大。

经常被忽视的另一个选择是使用HttpHandler。将ASHX HttpHandler放在一起相对简单/容易,它使您能够非常“接近金属”访问请求/响应,而且开销比ASPX页面少得多。

答案 2 :(得分:2)

我可能误解了这个问题,但我不确定你的比较是完全有效的。您正在使用纯服务技术(WCF和ASMX)将页面和服务交付技术与相对较高的开销(ASPX )进行比较,对吧?我认为ASMX Web服务与WCF Web服务的比较可能更有效,在这种情况下,WCF可以轻松获得可配置性,更不用说性能:http://msdn.microsoft.com/en-us/library/bb310550.aspx

另请参阅WCF vs ASPX webmethods vs ASMX webmethods了解相关问题

答案 3 :(得分:0)

Webservices可以通过代理序列化您的类,您不能使用aspx页面(AFAIK)来执行此操作。

答案 4 :(得分:0)

使用ASP.NET页面执行此操作的一种方法是页面方法:http://aspalliance.com/1922_PageMethods_In_ASPNET_AJAX.all,它与ASMX Web服务路由非常相似。我所说的一切都是我同意的,但问题是你需要一个专门的服务来向外界提供数据,还是这些服务只是为了向应用程序内部的客户提供流数据?

我在链接中采用了页面方法方法,因为大多数服务都是为了方便页面中的AJAX,并且它将代码保存在一起。此外,即使使用页面方法,也可以通过JQuery检索数据,并且它确实支持序列化和代理生成。