C# 从Web服务或数据库体系结构模式获取数据的Web门户

C# 从Web服务或数据库体系结构模式获取数据的Web门户,c#,asp.net-mvc-3,asp.net-web-api,n-tier-architecture,C#,Asp.net Mvc 3,Asp.net Web Api,N Tier Architecture,我正在从事目前基于以下体系结构构建的项目: 1) 第一种解决方案 具有基于实体框架5的所有数据库逻辑(DAL)的项目 WebAPI项目负责向客户门户网站和智能手机应用程序提供数据 2) 第二种解决方案 充当客户Web门户的MVC4项目 客户Web门户和WebAPI位于同一台服务器上。WebAPI直接访问数据库,而客户Web门户通过WebAPI访问数据库。选择这种架构的原因是为了缩短开发时间,因为门户网站和智能手机应用程序调用了85%的相同Web服务。然而,我非常担心这种体系结构的性能有多

我正在从事目前基于以下体系结构构建的项目:

1) 第一种解决方案

  • 具有基于实体框架5的所有数据库逻辑(DAL)的项目
  • WebAPI项目负责向客户门户网站和智能手机应用程序提供数据
2) 第二种解决方案

  • 充当客户Web门户的MVC4项目
客户Web门户和WebAPI位于同一台服务器上。WebAPI直接访问数据库,而客户Web门户通过WebAPI访问数据库。选择这种架构的原因是为了缩短开发时间,因为门户网站和智能手机应用程序调用了85%的相同Web服务。然而,我非常担心这种体系结构的性能有多好。我认为客户门户网站应该直接访问数据库,这将是一种更有效的方式


对此有何想法?

体系结构总是很棘手的,它总是在不同因素之间进行折衷,如开发速度、可维护性、性能和可伸缩性。所以,你需要权衡所有的利弊

通过WebAPI访问数据库 一,。在性能上肯定会引入一些开销。但是多少钱?假设通过附加包装器(WebAPI)传递调用,每次调用将额外花费大约2-3毫秒的时间,以及总共大约200MB的额外RAM。我认为,这不是一个真正的问题,但你更了解所有细节,这取决于你

二,。该解决方案可以从使用缓存中获得一些好处。如果将IIS配置为缓存对WebAPI的请求,则WebAPI客户端和门户都将提高性能

直接通过DAL访问数据库 一,。从理论上讲,您需要为数据库引入两个入口点。如果您需要添加WebAPI客户端和门户必须使用的逻辑,并且该逻辑是特定于web的(例如,与用户会话相关的逻辑),该怎么办?您不应该将其添加到DAL中,而是需要添加另一层和另一个库,这将由WebAPI和您的门户使用。如果您的唯一访问点是WebAPI,那么您可以只修改WebAPI来获得结果

总结如下:
这些只是一些赞成和反对意见。但是,如果你的项目并不庞大,如果它没有计划在一个非常高的负载,那么唯一的因素,我会考虑的是开发成本。如果使用WebAPI作为单一入口点更快,那么就直接使用它。

直接访问数据库是什么意思?你仍然想使用你的DAL库,只是不想使用WebAPI,对吗?我基本上希望Web Portal以Web API使用DAL库的方式直接使用DAL库。我最担心的是WebAPI端的IIS线程。假设有10.000个用户正在访问门户,每个用户都将获得可用的IIS线程来处理请求。在这种情况下,WebAPI会发生什么情况?考虑到它还必须为智能手机应用程序使用一些IIS线程,它是否能够为来自Web Portal的多个请求提供快速服务。IIS会为每个请求创建单独的线程。但这里的限制因素是并发请求的数量。如果您每小时有10000次点击,那么您大约只有3次并发请求/秒(以及相应的3个线程)。但假设你有大量的请求。那么是的,您的WebAPI将无法处理所有客户端和门户的请求。对于IIS,客户端和门户是平等的,它们将平等地接收拒绝响应。如果门户更重要,您可以在同一IIS上创建另一个WebAPI实例,并将客户端和门户请求路由到不同的实例,不要忘记缓存。如果它适合你的情况,它可以大大覆盖你