让我们来学习如何使用owin host实现脱离iis运行web api的单元测试,并将owinselfhost自宿主打包成服务。以下是详细步骤和代码示例:
首先,我们需要安装必要的Nuget包来支持Owin自宿主和Topshelf服务。让我们从安装开始:
-
安装Nuget包:
我们需要安装以下Nuget包:
- Microsoft.Owin.Host.HttpListener
- Microsoft.Owin.Hosting
- Topshelf

-
创建Topshelf所需的类:
我们需要创建一个类来处理服务的启动和停止。这里我们使用
Bootstrap
类来实现ServiceControl
接口。
///
/// OWIN host /// public class Bootstrap : ServiceControl { private IDisposable webApp; public string Address { get; set; } public bool Start(HostControl hostControl) { try { webApp = WebApp.Start(Address); return true; } catch (Exception ex) { Console.WriteLine("Topshelf starting occurred errors.", ex); return false; } } public bool Stop(HostControl hostControl) { try { webApp?.Dispose(); return true; } catch (Exception ex) { Console.WriteLine($"Topshelf stopping occurred errors.", ex); return false; } } } -
创建主程序入口:
我们需要一个主程序来运行Topshelf服务。这里我们使用
Program
类来实现。class Program { static void Main(string[] args) { HostFactory.Run(x => { x.RunAsLocalSystem(); x.SetServiceName("HangfireSettings.Instance.ServiceName"); x.SetDisplayName("HangfireSettings.Instance.ServiceDisplayName"); x.SetDescription("HangfireSettings.Instance.ServiceDescription"); x.Service(() => new Bootstrap { Address = "http://localhost:9005/" }); }); Console.Read(); } } -
运行程序:
程序运行后,只需在浏览器地址栏输入
http://localhost:9005/
,即可访问网站。如果输入http://localhost:9005/blogposts/1/comments
,可以得到如下图所示的内容:

通过上述步骤,我们成功地使用OwinSelfHost自宿主打包了服务,不需要新建一个Web项目,只需通过控制台程序,安装OWIN自宿主包,对各内容进行配置后,启动程序,即可通过地址栏访问网络服务请求。进一步地,我们将当前控制台打包成Topshelf服务,这样就可以保证后台运行。











