如何将基于ASP.NET Web API和基于浏览器的应用程序部署到生产环境

(请原谅,如果这是张贴在一个不正确的论坛,我们不知道到哪里发布。

我们有一个ASP.NET Web API单页面应用程序 – 一个在IIS中运行的基于浏览器的应用程序,用于提供HTML5 / CSS3 / JavaScript,与ASP.NET Web API端点进行通信,以访问数据库和传输JSON数据。 在我们的开发环境中,所有的工作都很好 – 也就是说,我们有一个带有ASP.NET Web API项目的Visual Studio解决scheme和两个用于数据访问的类库项目。 在开发框上进行开发和testing时,使用IIS Express到localhost:port来运行网站并访问Web API,一切都很好。

现在,我们需要将其转移到生产环境中(而且我们遇到了问题 – 或者只是不了解需要完成的工作)。

生产环境都是内部的(没有什么会暴露在公共的互联网上)。 有两个域。 一个域即企业域是所有用户正常login的地方。 另一个域(进程域)包含我们的应用程序和Web API将需要访问的SQL Server实例。

IT人员希望在这两个域之间放置一个DMZ以容纳IIS应用程序,并且防止企业域用户直接访问进程域。 所以,我猜他们想要的是:

corp域(最终用户)< – >防火墙(打开端口80)< – > DMZ(运行IIS的Web服务器)< – >防火墙(打开端口80或1433 ????)< – >进程域(IIS for Web API和SQL Server)

我们是开发人员,并没有真正理解所有的networking方面,所以我们想知道如何在这种情况下部署我们的浏览器/ Web API应用程序。

  1. 我们是否需要拆分我们的应用程序,以便所有客户端代码(HTML5 / CSS3 / JavaScript / images / etc)位于DMZ中的IIS服务器上,而Web API安装在进程域中的服务器上?
  2. 或者,整个应用程序(客户端代码和Web API)在DMZ中的IIS服务器上保持在一起,然后以某种方式访问​​SQL Server实例以获取数据?
  3. 从DMZ中的IIS服务器和应用程序,您是否可以通过转到“ http:// server / appname / api / getitmes ”来访问进程域中的服务器上的Web API?
  4. 在DMZ和进程域之间的第二个防火墙中,由于Web API是HTTP端点,您是否必须打开端口1433或端口80?
  5. 或者,有没有更好的部署方式(例如,如何将ASP.NET Web API单页面应用程序全部编写成HTML5和JavaScript应该部署到生产环境?)?

我相信还有其他问题,但我们将从这些开始。 谢谢!!!

(注意:服务器是Win2k8 R2,SQL Server 2k8 R2和IIS 7.5。)

我可以理解你的IT团队想要打破这一点,但似乎他们也没有完全理解这个设置是如何工作的。 我不会深究这一点,但实际上,您将与服务器交换process域的唯一stream量是标准的HTTPstream量(假设您正在使用Web API进行REST调用)

基本上你最终会得到以下结果:

  Initial Request SPA Web Server ---> Client (Running SPA) | | - REST Call Firewall -> | - Port 80 Only Web API Server | | - SQL (1433) .NET Connection/Data Source Firewall -> | - Port 1433 / 1434 Backend SQL Servers 

请记住,对SPA来说,客户端与SPA Web服务器的唯一通信是获取HTML,JS和CSS的初始请求。 之后(取决于你如何编写它)应该直接发送REST调用Web API服务器。

Web API服务器从那里直接发送SQL查询到数据库。

所以它的长短如下:

TL; DR :你应该在你的客户端和你的两个IIS实例(它们可以是同一个服务器btw)之间有一个防火墙来允许/或HTTP和HTTPSstream量。 然后在该Web服务器的另一个接口上,您可以连接到进程域,只允许SQL通信进入(1433和1434)。

希望有所帮助。