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

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

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

在研究这个问题时,我发现了一些相关的post,这些post在这里和这里都有一定的帮助。 我对一些主要差异的理解如下:

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

但是,基于这些概念,我的问题如下:

  1. 支持不同协议的能力在未来validation和兼容性方面是一个很好的特性,但是如果我们目前使用它通过HTTP进行交互,我们看到了什么真正的好处?
  2. 根据我之前的观点,如果我们只是通过网络与服务进行交互,那么这些点中的任何一点真的有什么不同吗? 只要它所称的方法“正常工作”,http请求就不关心任何更精细的细节或合同保证。

有什么我想念的吗? 使用服务的任何关键好处? 就个人而言,我支持Web服务架构。 我喜欢拥有一个可以支持未来发展的灵活且定义明确的系统的想法。 我基本上想要摆脱这个是一种方式去同事说“这应该是一个服务的xyz原因,我们可以看到abc改进这样做”。

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

可以用一个网页来做这件事(我打赌那里有大量的PHP“网络服务”),但是你必须自己完成所有这些工作。

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

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

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

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

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

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

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

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

另请参阅WCF与ASPX webmethods与ASMX webmethods的相关问题

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

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

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