让我们来学习如何使用owin host实现脱离iis运行web api的单元测试,并将owinselfhost自宿主打包成服务。以下是详细步骤和代码示例:
首先,我们需要安装必要的Nuget包来支持Owin自宿主和Topshelf服务。让我们从安装开始:
安装Nuget包:
我们需要安装以下Nuget包:
创建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服务,这样就可以保证后台运行。