【问题标题】:How was asp.Net mvc tightly coupled with IIS?asp.Net mvc 是如何与 IIS 紧密耦合的?
【发布时间】:2021-08-08 06:13:19
【问题描述】:

stackoverflow 上没有人敢回答这个问题 How is an ASP.NET MVC application heavily dependent on System.Web assembly?

有人评论说 System.web 与 Asp.Net 相关,而不是 IIS,那为什么我们不能在其他网络服务器上托管 asp.net mvc 应用程序呢?

【问题讨论】:

  • 在 system.web 中有用于 asp.net 和 mvc 管道的 http 处理程序,而我们也可以编写自己的自定义 http 处理程序,但是在 asp.net 和 mvc 中有一些约定system.web dll
  • 为什么你认为你不能在其他网络服务器上托管 asp.net MVC?
  • 我的意思是,Web 服务器就是一台计算机。如果您在 phyton 中为 hte 服务器代码编写了一些代码,而 Web 服务器不支持该语言,那么您将无法运行它。不存在只是将 Web 应用程序和系统扔到任何旧服务器上这样的事情。我的意思是,如果该站点运行 MySQL,而您使用 oracle 编写?那么你的应用程序就不能使用那个网络服务器了,不是吗?我的意思是,这与尝试在 Mac 计算机上运行 Windows 软件完全不同。您为任何 Web 服务器采用的任何代码库都意味着 Web 服务器必须具有该代码支持。这适用于所有 Web 服务器。
  • 如果你这样写c#代码并在后面使用.net代码?那么毫无疑问,该网站将需要那些外部库和系统。如前所述,这适用于任何台式计算机或任何 Web 服务器。因此,代码、库以及您用来编写该代码的内容意味着您必须在该系统上拥有该代码和库支持。正如其他人所说,现在有一些 .net 版本可以在 Linux 上运行,因此您可以基于 .net 编码方法运行此类站点。我的意思是,如果您使用 Apache Web 服务器,那么您将受限于它的功能。如果您使用 IIS,那么您将受限于它的功能。

标签: asp.net asp.net-mvc iis


【解决方案1】:

嗯,cmets 中的问题是问.net 是如何依赖 IIS 的?

没有! IIS依赖.net,部分是用.net创建的!!

所以.net不依赖IIS,IIS依赖.net运行!

使用 Apache 还是 IBM WebSphere Web 服务器?他们依赖什么?为什么当然是构建相关 Web 服务器的代码库和语言。

我的意思是,Excel 依赖于哪些语言和库? (答案:构建 Excel 的代码库)。这对于 Excel 或某些 Web 服务器的工作原理是相同的。

由于 IIS 是使用大量 .net 框架构建的,所以这就是它所需要的。

.net 对 IIS 没有依赖,反之亦然。

因此,构建 Web 服务器的代码库和系统并不一定意味着构建的网站需要使用这些库。

所有 3 个 Web 服务器(Apache、IBM WebSphere、IIS)都可以处理基本的 HTML 站点,并且可以接受标准的 Web 请求。

而且他们都必须输出 100% 的 HTML 标准页面供任何浏览器使用。

但是,我们将网站服务器系统的构建与开发人员构建网站的内容混淆了!!!

Web 服务器是用 C++ 编写的,还是部分由 .net 或 PHP for Apache 编写的?

我们并不在乎。

但是,如果我构建一个使用 MySQL 的站点,那么该站点将无法在没有 oracle 数据库系统的托管服务器上运行。

因此,必须:

use the developer tools and support of what the web server has

or

pick your web development tools and FIND a web server system that supports that choice.

除非 Web 服务器支持使用 python 或任何浮动开发语言?那么是的,Web 服务器必须支持与相关代码系统的交互。但这是所有 Web 服务器的相同要求。

因此,构建网站的内容比构建 Web 服务器的内容更重要。

我的意思是,可以用汇编程序、c++ 或 BASIC 创建一个 100% 兼容的 Web 服务器。

具体来说,Web 服务器支持哪些开发周期和系统?对于使用 .net 构建的网站?

没有真正要求使用 .net 框架构建 Web 服务器,但该服务器和相关站点肯定需要能够使用 .net 代码。

当您创建一个 .net 站点并发布时?所有 .net 源代码都被编译成 .net .dll 的。因此,至少,该 Web 服务器必须支持对这些 .dll 的调用,并且它们需要 .net 框架。这并不意味着 Web 服务器必须使用 .net 框架构建,但它确实意味着有问题的服务器必须支持将 .net 程序集作为 .dll 调用。

此外,所有 Web 服务器都有相当多的特定系统,安全和身份验证就是这样一个领域。因此,如果开发人员采用特定的安全模型,那么说 Apache 将支持与 IIS 相同的安全性和配置是非常值得怀疑的。

当然,Web 应用程序的某些部分通常会调用并使用这些 Web 服务器安全功能并与之交互,甚至是作为该 Web 服务器一部分包含的通用库。

因此,Windows 版本的 Excel 不再在 Mac 或 Andriod 手机上运行,​​任何网站都按照特定标准开发。

但是,在一天结束的时候?

Web 服务器依赖于 .net 代码,而不是 .net 框架依赖于 IIS。 IT 实际上完全相反。

这与建议 Excel 应该能够读取和使用 power-point 文件并没有太大的不同。这里有区别。

网站开发绝不允许任何旧网站被扔到某个网络服务器上,我们可以期待它运行。

在这方面,如果您要在桌面上使用 Excel,则需要安装 Excel。网络服务器只是一台计算机,因此您在该计算机上使用的任何代码和东西都必须在该计算机上安装和支持。

因此,例如,虽然您可以在 Linux 上运行 .net 代码,但为 IBM 的 WebSphere、Apache 或 ISS 开发的网站都将有所不同,而且这些网站当然不能互换或兼容互不相让,更何况 Excel 的 windows 版本与 Android 或 Mac 版本相同。

事实上,有多少桌面软件可以工作?那么该软件只能在支持该软件的台式计算机上运行和运行。在这方面,Web 服务器是相同的 - 它只能运行与给定服务器和设置 100% 兼容的软件。

总结一下? 从我们都参与的 PC 革命的第一天起,所有计算机的工作原理就是如此。

举一些例子,像Asp.net Framework的这个和那个组件是由IIS启动的,s

好吧,任何 .dll 的加载和调用方式在这里都大同小异。

新的 .net 核心?所有较新的框架都是不依赖于 windows api 和平台的 .net 运行时系统。从开发人员的角度来看,使用 .net 核心与旧的 .net 框架?您没有注意到差异,但 .net 运行时(核心)删除了对 windows 的依赖。

所以就像 Java 引擎可以在从手机到服务器的任何设备上运行一样? .net 核心也是如此。它应该能够在任何计算机上运行——甚至是安卓手机。因此,较新的 .net 核心很简单,是一个经过改进的 .net 运行时系统,它更加平台中立。

.net 框架的整体理念很像 Java 引擎。他们可以重新构建 .net 解释器以在任何平台上运行,因此理论上围绕 .net 构建的代码可以在任何计算机上运行——而不仅仅是 Windows。但当然,.net 框架非常依赖 Windows API 和平台。重新改造的 .net 核心消除了这些依赖关系。

因此,理论上,任何使用 .net 内核编写的软件在理论上都是多平台的,并且完全是“操作系统”中立的。当谈到桌面软件时,这有点令人怀疑,但是基于网络的呢?是的,这个目标很简单,因为渲染输出的另一端是基于行业标准(HTML - 现在是 Web 组装)。

【讨论】:

    【解决方案2】:

    “为什么我们不能在其他 Web 服务器上托管 ASP.NET MVC”是一个无效的陈述,因为在 Mono 的帮助下,您绝对可以在其他 Web 服务器上运行此类 Web 应用程序,例如 Apache/nginx/Jexus 等等,它提供了,

    • 一个开源的System.Web 实现。
    • FastCGI 守护程序可与所有兼容的 Web 服务器集成。

    但是,如果您想托管您的生产 Web 应用程序,与使用 Microsoft 的 .NET Framework/IIS/Windows 相比,这种方法是不现实的,因为您需要在 Mono 问题上为自己提供支持,因为它不如 . NET Framework(其System.Web 已完成)。

    目前,ASP.NET Core 是正确的选择。

    【讨论】:

    • 我的问题都是关于system.web的,它是否严重依赖IIS?
    • @AashimaKhatoon 如果可以用其他web服务器运行System.Web,那么答案也很明确,它不依赖IIS。
    • @Ashima 不,它没有。相反,您应该说“IIS 严重依赖 System.Web 以处理 ASP.NET(和 MVC)请求”。任何可以处理 ASP.NET(和 MVC)请求管道的 Web 服务器都可以托管 ASP.NET 应用程序,例如 NGINX+FastCGI (mono-project.com/docs/web/fastcgi/nginx)
    猜你喜欢
    • 2011-05-24
    • 2017-12-28
    • 2018-11-19
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多