使用IIS 10.0和WebAPI进行IIS应用程序初始化

时间:2019-05-17 16:28:05

标签: c# iis asp.net-web-api iis-8 iis-10

大家好,早上好

我遇到了一个问题,即服务一旦启动,就不再订阅服务发现。在测试中,它们在IIS Express下运行。但是,一旦我将其切换到IIS并验证了一切仍在运行,就可以了。该服务不再在Global.asax.cs中点击Application_Start()。

进行一些研究,似乎IIS需要一些配置才能在启动应用程序池后进行一些初始化工作。我在带有IIS 10.0.17763.1的Windows 10专业版环境中运行此程序

目标:如果服务在IIS Express下运行,请启动该服务以订阅服务发现。

我首先在MSDN上找到了用于设置所有文件的文档,包括此处的前提条件IIS 8.0 Application Initialization

在完成所有步骤并更新了所需的配置条目之后,似乎在启动应用程序池时我仍未初始化Web服务。

我已经在控制器上创建了一个新的端点以进行测试,以使其正常工作。

AccountController:

[System.Web.Http.HttpGet]
public IHttpActionResult Init()
{
    // here is where I am registering the service thats coming up
}

路由定义文件:

{"Name": "Account - Init",
"RouteTemplate": "api/{controller}/init",
"Defaults": "controller = AccountController, action = Init"}

Web.config

<applicationInitialization skipManagedModules="false" doAppInitAfterRestart="true" remapManagedRequestsTo="/api/account/init">
  <add initializationPage="/api/account/init" />
</applicationInitialization>

我假设初始化仅会发生一次,并且会在应用程序池首次启动或回收时发生。 IIS内部将针对在应用程序的web.config文件中找到的映射资源对Web应用程序进行“托管”调用。我对它应该如何工作的理解不正确吗?如果是这样,有人可以澄清原因吗?

我不是简单地试图“使它起作用”。我想了解为什么其“无效”目前对我有用。

感谢所有愿意花时间在这里回复的高级人员。

2 个答案:

答案 0 :(得分:0)

是正确的,当应用程序启动时,您的web.config只会被读取一次。 您可以添加一些日志消息以查看它的发生。

如果您设法将Visual Studio及时连接到IIS进程的应用程序池,则实际上可以击中调试器点。有一个将调试器附加到进程的选项,因此您可以使用它。

在AppSettings位于单独文件而非web.config中的系统中,这非常痛苦。如果进行更改,则只有在触摸web.config触发应用程序重新启动之前,什么都不会发生。

答案 1 :(得分:0)

跟进,

我解决了自己的问题。看起来该代码运行正常,它应按一下Global.asax.cs Application_Start。进行更改后,我抛出了一个与IIS不相关的异常,导致似乎“不起作用”。

按照MSDN上的说明进行操作。