我们开发了一个托管在内部网络上的ASP.Net Web应用程序。目前,我们有一些ASPX页面可以处理来自客户端的Web请求并与我们的服务器进行交互。我们正在开始开发下一个主要应用程序版本,我们正在决定架构。
与使用完整的Web服务(很可能是WCF服务)相比,使用ASPX页面处理http请求有什么区别?
在研究此问题时,我发现了一些相关的帖子,这些帖子有中等帮助,见here和here。我对一些主要差异的理解如下:
但是,基于这些概念,我的问题如下:
我有什么遗漏的吗?使用服务的任何关键好处?就个人而言,我支持Web服务架构。我喜欢拥有一个可以支持未来发展的灵活且定义明确的系统的想法。我基本上想要摆脱这种情况是一种方式去找同事并说“这应该是x y z原因的服务,我们可以看到这样做的b c改进”。
答案 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
答案 3 :(得分:0)
Webservices可以通过代理序列化您的类,您不能使用aspx页面(AFAIK)来执行此操作。
答案 4 :(得分:0)
使用ASP.NET页面执行此操作的一种方法是页面方法:http://aspalliance.com/1922_PageMethods_In_ASPNET_AJAX.all,它与ASMX Web服务路由非常相似。我所说的一切都是我同意的,但问题是你需要一个专门的服务来向外界提供数据,还是这些服务只是为了向应用程序内部的客户提供流数据?
我在链接中采用了页面方法方法,因为大多数服务都是为了方便页面中的AJAX,并且它将代码保存在一起。此外,即使使用页面方法,也可以通过JQuery检索数据,并且它确实支持序列化和代理生成。