Asp.net web api 如何从Owin WebApp停止WebApi项目

Asp.net web api 如何从Owin WebApp停止WebApi项目,asp.net-web-api,owin,self-hosting,Asp.net Web Api,Owin,Self Hosting,我有一个名为MyWebApi项目的WebApi,它以调试模式在42000端口上运行。 我使用Owin创建了一个控制台应用程序,以使用以下技术托管MyWebApi: static void Main(string[] args) { using (WebApp.Start<WebApi.Startup>("http://localhost:9000/")) { Console.WriteLine("Server is runn

我有一个名为MyWebApi项目的WebApi,它以调试模式在42000端口上运行。 我使用Owin创建了一个控制台应用程序,以使用以下技术托管MyWebApi:

 static void Main(string[] args)
 {            
    using (WebApp.Start<WebApi.Startup>("http://localhost:9000/"))
    {
        Console.WriteLine("Server is running...");
        Console.WriteLine("Press Enter key to stop it.");
        Console.ReadKey();
    }

    Console.WriteLine("Server is shutting down...");
}
static void Main(字符串[]args)
{            
使用(WebApp.Start(“http://localhost:9000/"))
{
WriteLine(“服务器正在运行…”);
Console.WriteLine(“按Enter键停止它”);
Console.ReadKey();
}
WriteLine(“服务器正在关闭…”);
}
一切正常。我可以从端口9000和42000获取和发布数据。 停止控制台后,我仍然可以从端口42000发布和获取数据。 有没有办法像停止直接从WepApi项目调试一样停止MyWebApi

谢谢


Austin

尝试处理您的Web应用程序:

 using (var _webApp=WebApp.Start<WebApi.Startup>("http://localhost:9000/"))
{
    Console.WriteLine("Server is running...");
    Console.WriteLine("Press Enter key to stop it.");
    Console.ReadKey();
    _webApp.Dispose();// Add this
}

Console.WriteLine("Server is shutting down...");
使用(var\u webApp=webApp.Start(“http://localhost:9000/"))
{
WriteLine(“服务器正在运行…”);
Console.WriteLine(“按Enter键停止它”);
Console.ReadKey();
_webApp.Dispose();//添加此
}
WriteLine(“服务器正在关闭…”);
公共类启动
{
私有静态只读IUnityContainer_container=UnityHelpers.GetConfiguredContainer();
公共静态void StartServer()
{
字符串基地址=”http://localhost:8081/";
var startup=_container.Resolve();
IDisposable webApplication=WebApp.Start(baseAddress,startup.Configuration);
尝试
{
Console.WriteLine(“已启动…”);
Console.ReadKey();
}
最后
{
webApplication.Dispose();
}
}        
}


webApplication.Dispose()-停止webapi服务器

我已尝试手动处理WebApp,端口42000上的webapi仍在运行。dispose方法停止仅在端口9000上运行的服务器。但是,当您托管此web应用时,它是否同时占用两个端口?我不知道怎么做。您确定这不是以前使用端口42000运行的旧应用程序吗?请澄清:console主机应用程序除了承载现有WebApi的主方法之外,没有其他代码。启动控制台应用程序后,我可以与这两个端口通话:==>Valid==>validafter关闭控制台==>Invalid==>ValidUsing语句将在用户按任意键后处理WebApp。在这种情况下,将只处理侦听端口9000的服务器。端口42000上列出的实际WebApi仍在运行。
 public class Startup
    {
        private static readonly IUnityContainer _container = UnityHelpers.GetConfiguredContainer();

        public static void StartServer()
        {
            string baseAddress = "http://localhost:8081/";
            var startup = _container.Resolve<Startup>();
            IDisposable webApplication = WebApp.Start(baseAddress, startup.Configuration);

            try
            {
                Console.WriteLine("Started...");

                Console.ReadKey();
            }
            finally
            {
                webApplication.Dispose();
            }
        }        
    }