OWIN与Katana项目:.NET中的自托管Web API

在.NET开发中,开发者经常需要在应用程序中嵌入HTTP监听器,以便于配置或控制。然而,长期以来,实现这一功能的唯一方式是自行实现或使用第三方库,或者更糟糕的是,利用ASP.NET应用程序中提供的后台工作线程。OWIN(Open Web Interface for .NET)项目的出现,改变了这一现状。OWIN的目的是抽象整个ASP.NET堆栈,使其与Web服务器解耦,从而任何Web服务器都能够托管应用程序。

与OWIN项目相辅相成的是Katana项目,其目标是允许任何应用程序托管基于OWIN的应用程序。这非常酷,因为这意味着可以在应用程序中实现ASP.NETWeb API,从而快速获得一个功能完备的通信堆栈,同时使用标准协议。

实现监听器

在应用程序中实现监听器非常简单。首先,需要在项目中安装NuGet包:

Microsoft ASP.NETWeb API2.2 OWIN Self Host

然后,创建一个类,该类包含以下方法签名:

Configuration(Owin.IAppBuilder)

在上述类的相同命名空间中实现API代码(控制器、模型、扩展、处理器等)。

启动Web应用程序

如第2点所述,需要一个实现来配置Web应用程序。有许多在线示例,它们都有一个类似于以下的Configuration方法:

public void Configuration(IAppBuilder builder) { var config = new HttpConfiguration(); config.MapHttpAttributeRoutes(); builder.UseWebApi(config); }

可以像在任何ASP.NET应用程序中一样使用HttpConfiguration。在MVC项目中更喜欢基于属性的路由,但完全可以选择标准的基于约定的属性路由方案。此外,还可以使用配置来绑定格式化程序、处理器等,以适应监听器。对于应用程序来说,安全层并非必要,但完全可以轻松实现任何可用的授权和认证提供程序。

监听器是通过Microsoft.Owin.Hosting.WebApp类启动的。例如:

IDisposable reference = Microsoft.Owin.Hosting.WebApp.Start<TConfigType>(string uri);

TConfigType代表包含Configuration方法的类型。它将使用该类型来配置并启动监听器。uri的值是希望路由到监听器的地址和端口(例如:http://localhost:80)。

控制监听器

完全可以将实现的HTTP监听器作为应用程序的唯一部分,但本文的目的是要展示API作为状态应用程序中的一个端点的使用。用途范围从为Windows服务提供控制机制,到提供应用程序运行状态的信息。正在构建的应用程序的特定用例是一个工作器,它收集数据并进行转换,并通过API接口检索转换并启动新的收集过程(是的,知道这个描述有点泛泛)。通过自托管OWIN应用程序,可以运行状态操作并在与API相同的上下文中共享数据。

以非常简单的方式解决了这个问题。创建了一个名为IHostApp的接口,具有以下实现合同:

string Url { get; } void Start(); void Stop();

具体实现还有一个泛型参数,其值是包含Configuration方法的类型。在内存中保持这个实例,服务器将继续运行。在Start方法中执行WebApp.Start<T>(url),将返回的IDisposable存储为成员,并在Stop方法中释放该成员。通常使用Microsoft Unity来解析这些IHostApp实例,为每个希望监听的地址使用一个。

需要考虑的事情

应该仔细考虑是否在公共地址上公开自托管OWIN应用程序。成熟的Web服务器中经常发现安全漏洞,并且有专门的团队全职致力于加强他们的软件以抵御恶意攻击。因此,认为或能够以兼职的方式做得更好将是天真的。

需要设置正确的URL ACL,以便在除localhost之外的任何地址上监听。

这通常应该用于简单的情况,比如为应用程序提供轻量级的接口。请记住,OWIN Self-Hosted是一个相对年轻的项目,因此可能有很多未知的制约因素影响良好的性能。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485