gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:40:30 25 4
gpt4 key购买 nike

考虑以下网络安全设置:

       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

我在许多客户场所都看到过上述网络设置。 IT 基础架构团队不允许 DMZ 中的 Web 服务器通过端口 1433 与内部网络中托管的 SQL Server 建立直接连接。具有讽刺意味的是,我已经看到 web.config 位于 Web 服务器上,带有纯文本数据库密码,它们是好的。

通常,我见过并研究过将 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 更好的解决方案,我真的很想听听社区的意见。

最佳答案

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

我们选择采用的方法是一个 Mvc 前端和一个托管在 App Server 上的 Web Api 后端。

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

关于c# - 如果 ASP.NET MVC Web 应用程序要托管在 DMZ 中且无法直接访问数据库(tcp 端口 1433 被防火墙阻止),如何设计层级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48457794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com