大家好,早上好
我遇到了一个问题,即服务一旦启动,就不再订阅服务发现。在测试中,它们在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应用程序进行“托管”调用。我对它应该如何工作的理解不正确吗?如果是这样,有人可以澄清原因吗?
我不是简单地试图“使它起作用”。我想了解为什么其“无效”目前对我有用。
感谢所有愿意花时间在这里回复的高级人员。
答案 0 :(得分:0)
是正确的,当应用程序启动时,您的web.config只会被读取一次。 您可以添加一些日志消息以查看它的发生。
如果您设法将Visual Studio及时连接到IIS进程的应用程序池,则实际上可以击中调试器点。有一个将调试器附加到进程的选项,因此您可以使用它。
在AppSettings位于单独文件而非web.config中的系统中,这非常痛苦。如果进行更改,则只有在触摸web.config触发应用程序重新启动之前,什么都不会发生。
答案 1 :(得分:0)
跟进,
我解决了自己的问题。看起来该代码运行正常,它应按一下Global.asax.cs Application_Start。进行更改后,我抛出了一个与IIS不相关的异常,导致似乎“不起作用”。
按照MSDN上的说明进行操作。