【问题标题】:How to stop WebApi project from Owin WebApp如何从 Owin WebApp 停止 WebApi 项目
【发布时间】:2016-12-24 06:22:37
【问题描述】:

我有一个名为 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...");
}

一切正常。我可以从端口 9000 和 42000 获取和发布数据。 停止控制台后,我仍然可以从端口 42000 发布和获取数据。 有什么方法可以停止 MyWebApi,就像我们直接从 WepApi 项目停止调试一样?

谢谢,

奥斯汀

【问题讨论】:

    标签: asp.net-web-api owin self-hosting


    【解决方案1】:
     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();
                }
            }        
        }
    

    SELF HOST WEBAPI WITH OWIN AND UNITY

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

    【讨论】:

    • Using 语句将在用户按下任意键后处理 WebApp。在这种情况下,将释放唯一正在侦听端口 9000 的服务器。在端口 42000 上列出的实际 WebApi 仍在运行。
    【解决方案2】:

    尝试处置您的 webApp:

     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...");
    

    【讨论】:

    • 我已尝试手动处理 WebApp,并且端口 42000 上的 WebApi 仍在运行。 dispose 方法仅停止在 9000 端口上运行的服务器。
    • 但是当您托管这个网络应用程序时,它是否占用了两个端口?我不明白怎么做。您确定这不是您之前使用端口 42000 运行的旧应用程序吗?
    • 澄清一下:控制台宿主应用程序除了托管现有 WebApi 的 main 方法之外没有其他代码。启动控制台应用程序后,我可以与两个端口通话:localhost:9000/api/users/get/5 ==> 有效localhost:42000/api/users/get/5 ==> 有效关闭控制台后localhost:9000/api/users/get/5 ==> 无效localhost:42000/api/users/get/5 ==> 有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    相关资源
    最近更新 更多