C# 根据HTTP请求更新配置并重新启动自托管ASP.NET Web API 2

C# 根据HTTP请求更新配置并重新启动自托管ASP.NET Web API 2,c#,asp.net-web-api,asp.net-web-api2,C#,Asp.net Web Api,Asp.net Web Api2,我有一个运行ASP.NET web API 2.2的自托管OWIN web应用程序,它作为windows服务执行。我想实现远程配置场景:从客户端,我想发出HTTP请求,在调用的Web API操作中,我想更新配置文件(例如更改DB连接字符串),然后重新启动服务(以便加载新配置)。然而,这里是棘手的部分: 如果我只是调用Environment.Exit,那么响应将不会完成,客户端也不会收到它工作的消息是否有任何方法可以写入响应流并在从Web API操作中重新启动服务之前完成它?或者我应该使用其他方法

我有一个运行ASP.NET web API 2.2的自托管OWIN web应用程序,它作为windows服务执行。我想实现远程配置场景:从客户端,我想发出HTTP请求,在调用的Web API操作中,我想更新配置文件(例如更改DB连接字符串),然后重新启动服务(以便加载新配置)。然而,这里是棘手的部分:

如果我只是调用
Environment.Exit
,那么响应将不会完成,客户端也不会收到它工作的消息是否有任何方法可以写入响应流并在从Web API操作中重新启动服务之前完成它?或者我应该使用其他方法,比如过滤器?或者您还有其他建议吗

我对任何安全性讨论都不感兴趣-该服务仅在intranet中可用,并且相应的Web API操作通过身份验证和授权进行保护


提前感谢您的帮助。

看起来像吸盘冲床,但它可以工作:

[HttpGet]
public async Task<IHttpActionResult> ActionMethod()
{
    var httpActionResult = Ok(); //some work instead it
    new Thread(() =>
    {
        Thread.Sleep(500);
        Environment.Exit(1);
    }).Start();
    return httpActionResult;
}
[HttpGet]
公共异步任务ActionMethod()
{
var httpActionResult=Ok();//一些工作代替了它
新线程(()=>
{
睡眠(500);
环境。出口(1);
}).Start();
返回httpActionResult;
}

我不是舒尔,但如果您退出exitCode!=0,则服务子系统会认为您的服务崩溃,并尝试重新启动它(如果您在“服务设置”中设置它)

看起来像吸盘穿孔,但它可以工作:

[HttpGet]
public async Task<IHttpActionResult> ActionMethod()
{
    var httpActionResult = Ok(); //some work instead it
    new Thread(() =>
    {
        Thread.Sleep(500);
        Environment.Exit(1);
    }).Start();
    return httpActionResult;
}
[HttpGet]
公共异步任务ActionMethod()
{
var httpActionResult=Ok();//一些工作代替了它
新线程(()=>
{
睡眠(500);
环境。出口(1);
}).Start();
返回httpActionResult;
}

我不是舒尔,但如果您退出exitCode!=0,则服务子系统会认为您的服务崩溃,并尝试重新启动它(如果您在“服务设置”中进行了设置)

重新启动服务是解决此问题的一种非常繁重的方法。您是否考虑过让您的组件能够响应配置更改?@PaulTurner感谢您的响应-我知道您的解决方案会更好(在组合根目录中重新初始化应用程序),但不幸的是,我无法在剩余的时间内完成此操作。重新启动服务是解决此问题的一种非常繁重的方法。您是否考虑过让您的组件能够响应配置更改?@PaulTurner感谢您的回答-我知道您的解决方案会更好(在组合根目录中重新初始化应用程序),但不幸的是,我在剩下的时间内无法做到这一点。