【发布时间】:2016-10-02 08:32:33
【问题描述】:
在控制台应用程序中,您可以像这样启动 owin 主机:
string url = "http://localhost:8080";
using (WebApp.Start(url))
{
Console.WriteLine("Server running on {0}", url);
Console.ReadLine();
}
线
Console.ReadLine();
停止服务器停止。我将如何在一个类中启动服务器并阻止它停止?我会这样做吗?
public bool keepHosting;
public void Start()
{
using (WebApp.Start(serverUrl))
{
while (keepHosting)
{
}
}
}
【问题讨论】:
-
不太确定你想做什么 - 什么会触发这个(例如启动应用程序)?任何有能力开始某事的东西可能也应该有能力阻止它——这在上面是不可能的。您可能需要在整个应用程序的入口点调用“Start”,并保持该部分继续运行。
-
将代码更改为更清晰一些。我只是不知道如何让托管进程保持活力。
-
while循环和Console.ReadLine();是我通常自己做的事情。不明白为什么它不适合你。 -
托管进程将保持活动状态,无论您的应用程序存活多久。所以在控制台应用程序中,它是活动的,因为 ReadLine 正在等待输入(所以程序仍在运行)。如果你想启动 webapp 但不在这个类中管理它,你可能需要存储 WebApp.Start 方法的结果,并实现 IDisposable 模式以在你的类被释放时调用 dispose 。由调用者自己保持活动状态。
-
public IDisposable Start() { return WebApp.Start(serverUrl); }