【问题标题】:How to add an asp.net web api application to IIS (the proper way)如何将asp.net web api应用程序添加到IIS(正确方法)
【发布时间】:2017-05-23 11:00:26
【问题描述】:

我有一个 asp.et web api 应用程序,到目前为止,我已将其部署到 IIS 默认网站。我现在发现这是一种不好的做法,就像把它放在 C:\inetpub\wwwroot 下一样。

所以,我想 100% 了解如何在 IIS 中手动设置它,并在网站、应用程序、绑定和应用程序池之间建立适当的关系。除了网站与应用程序之外,大部分内容实际上都是有意义的。

我找到了很多教程,但我简直不敢相信有多少是行不通的(有些人甚至建议将端口 80 更改为 http 的其他内容!)。因此,暂时将 SSL 排除在外,我按照如下教程(没有用)。

  1. 我把应用程序放在 wwwroot 以外的地方,所以我把它放在C:\inetpub\myapp

  2. 教程现在说要创建一个网站并将其指向此处。所以我在 IIS 管理器中执行此操作

  3. 根据教程,我现在应该可以在浏览器中访问 site.com。这不起作用,它会超时。事实证明,我需要将此添加到 hosts 文件中,即添加条目

    127.0.0.1 site1.com

现在当我浏览到 site.com 时,我看到了默认的 IIS 页面,(不是我的应用程序的 default.html)

  1. 所以,我将其添加为应用程序...

  1. 我现在浏览到http://site1.com/myapp。我明白了

    Server Error in '/myapp' Application.
    
    Configuration Error
    
    Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately. 
    
    Parser Error Message: The configSource file 'config\throttlePolicy.config' is also used in a parent, this is not allowed. 
    
    Source Error: 
    
    
    Line 57:   </system.serviceModel>
    Line 58:  
    Line 59:   <throttlePolicy configSource="config\throttlePolicy.config" />
    Line 60:   <appSettings configSource="config\appSettings.config" />   
    Line 61:   <connectionStrings configSource="config\connectionStrings.config" />    
    
    Source File: C:\inetpub\myapp\web.config    Line: 59 
    
  2. 最后我将app文件夹嵌套在site文件夹中,即C:\inetpub\myapp\myapp

现在终于,如果我浏览到http://site1.com/myapp/,我可以看到我的应用程序!

问题

我这样做是否正确?

似乎没有地方提到您需要将应用程序嵌套在站点文件夹中?

提前致谢!

【问题讨论】:

    标签: asp.net iis asp.net-web-api


    【解决方案1】:

    您犯的主要错误是您需要在现有的默认网站下创建一个虚拟文件夹或应用程序,而不是创建一个全新的网站。您应该右键单击“默认网站”并在其中创建内容,而不是右键单击 Web 服务器根目录

    让我在遇到问题时解决它们。下面的所有内容都是一个简化的解释,还有更多内容,但希望能有所帮助。

    我现在发现这是不好的做法

    有关网站的不良做法通常与安全有关。即不要留下容易被破解的明显可猜测的默认值

    有些人甚至建议将 http 的 80 端口更改为其他端口

    这是一个可猜测默认值的示例。 80 是默认的网络端口。如果你把它改成别的东西,这意味着对 80 端口的 DOS 攻击会失败,因为没有 Web 服务器在监听它。

    我把应用程序放在 wwwroot 以外的地方

    好主意。

    通常在构建应用程序时,您会将所有应用程序代码放在不同的驱动器(即 D)上,这样 C 就纯粹是操作系统,理论上您可以重新安装它或在遇到问题时完全移动 D 驱动器。

    创建一个网站并将其指向此处

    这里的很多困惑都与术语有关 - 您实际上并不想在根目录中右键单击/创建网站。这将创建一个全新的“主机”级网站。您想右键单击“默认网站”并创建以下内容之一:

    • 如果您只有静态内容(html 页面、图像、javascript),则创建一个虚拟目录(没有应用程序池)

    • 如果您实际上有服务器端处理(即 ASP 应用程序),则添加一个 Application(它有一个应用程序池)

    以下是构成网站的一些内容(参考 IIS)

    1. 运行 IIS 的服务器
    2. 服务器又包含一个或多个“网站”,它们代表“根”响应某个主机名和端口。默认情况下,您拥有在 IIS 中看到的 默认网站。在这个阶段,您可能不应该在这个级别创建新的“网站”。
    3. “默认网站”又包含一个或多个虚拟文件夹或应用程序。这些是“默认网站”下的文件夹。这是您实际需要发布网站文件的地方

    你需要在这里专注于第 3 级,但看起来你在第 2 级做事

    这就是为什么您只获得一个 IIS 默认页面 - 您创建了一个全新的根网站,而不是一个实际的“应用程序”

    如果您在网络服务器上运行几个不同的网络应用程序,它们通常会位于各自单独的“网络应用程序”文件夹中,而不是为每个应用程序创建一个根网站。

    我现在应该可以在浏览器中访问 site.com。这不起作用

    site1.com 在 Internet 上不存在(这是您的浏览器正在查找的位置)。在您对主机文件进行更改之前,它也不存在于“局域网”上。这是我不会涉及的网络/DNS 问题。

    所以,我将其添加为应用程序。

    是的。您需要直接跳到这一步,但在默认网站下创建它

    我现在浏览到http://site1.com/myapp。我明白了……

    您收到的配置错误与在错误级别创建内容有关。删除 IIS 中的所有内容(默认网站除外),然后重新开始!

    似乎没有提到您需要将应用程序嵌套在站点文件夹中?

    我理解你的沮丧。任何地方都没有真正解释。 (我只是在谷歌上搜索了不同级别的解释,但找不到任何东西)。

    当您开始在 IIS 中使用 Web 应用程序时,您通常应该有一个“默认网站”,其中包含多个“应用程序”和“虚拟文件夹”。

    【讨论】:

    • 感谢您的详细解释。因此,据我了解,想要另一个“网站”的唯一原因是您想使用 完全不同的 URL 来寻址它,例如,如果您要在 DNS 上注册一个完全不同的URL.So,如果我有一个内部网络应用程序只是通过其内部 IP 寻址,我将把它放在一个单独的 网站 中,而不是另一个应用程序,该应用程序可能向外使用它自己的 DNS 注册 URL。那么,相同的基本 URL -> 相同的网站,不同的 URL,然后我需要使用“嵌套应用程序”做不同的网站?
    • 是的。或者,您可以使用它在具有不同端口的同一主机上运行网站。或者你可以做这个叫做绑定的事情,你的 URL 有不同的主机名,但它实际上去同一个主机,但 IIS 选择它
    猜你喜欢
    • 1970-01-01
    • 2019-09-24
    • 2019-09-05
    • 2013-12-30
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多