如果要在DMZ中托管而不能直接访问数据库(tcp端口1433被防火墙阻止),如何设计ASP.NET MVC Web应用程序层?

Rav*_*tel 8 c# asp.net asp.net-mvc wcf asp.net-web-api

请考虑以下网络安全设置:

       Users         Internet
         |        
  ====Firewall==== Port 80, 443 only
         |              
     Web Server      DMZ - ASP.NET MVC + Web API
         |          
  ====Firewall==== Port 80, 443 only
         |         
     "App" Server   WCF or ASP.NET Web API ??
         |           
      Database      Internal network
Run Code Online (Sandbox Code Playgroud)

我在很多客户端看到了上面的网络设置.IT基础架构团队不允许DMZ中的Web服务器通过端口1433建立与内部网络中托管的SQL Server的直接连接.反讽我看到web.config位于Web服务器上,带有纯文本数据库密码,他们是好的.

通常我已经看过并研究了在"App"服务器上托管WCF的解决方案(因为它可以在HTTP端口上使用),如图所示.WCF成为Web前端与DB交互的唯一方式.使用WCF的一个"好处"是它返回强类型对象,这些对象很容易从ASP.NET MVC前端消耗.

问题:

  1. 使用WCF是因为它允许在80或443上进行数据传输并返回强类型对象.这是一个不错的选择吗?
  2. 应该使用ASP.NET Web API吗?如果是这样,如何使用复杂的对象图实现强类型?JSON.net和内置序列化程序是否足以完成这项工作?
  3. 有更好的解决方案吗?

请注意,我们目前无法使用ASP.NET Core.

由于这是一个反复出现的问题,我真的很想听听社区是否有比使用WCF更好的解决方案.

Sli*_*sim 4

我刚刚做了一个有同样问题的系统,数据库访问仅限于应用程序服务器。

我们选择采用的方法是 Mvc 前端和托管在应用程序服务器上的 Web Api 后端。

为了获得通常通过 WCF 获得的强类型,我们选择了一个名为 Refit 的工具:https: //github.com/paulcbetts/refit。它允许您将带有预配置 url 模板的接口转换为可以通过普通 DI 容器注入的对象,使其非常易于测试并删除大量样板 HttpClient 代码。这与 WebApi 后端配合得非常好。