我并不是在寻求最佳实践方面的建议,因为在整个互联网上都有关于该主题的大量博客文章和教程。自承载Web API的正确方法是什么?
我问走出困惑,因为微软做了很大的改变整个自我托管的程序和每一个教程,我发现采取不同的,过时或不熟悉的方式。
我的目标是建立一个自我托管的Web API在传统的Windows服务,以控制从非Windows客户端,不同的长时间运行的任务,比如一个Android应用程序,其中整合WCF/SOAP客户可以真正成为PITA。
我知道WCF能够提供RESTful服务,但由于Web API非常适合这样的任务,因此我认为我给了它一个镜头。
这是怎样我现在开始使用我的API托管OWIN(卡塔纳):
public class ApiBootstrap {
var httpConfiguration = new HttpConfiguration();
// ... configure routes etc.
appBuilder.UseWebApi(httpConfiguration); // appBuilder = IAppBuilder
var disposable = WebApp.Start<ApiBootstrapper>(_myBaseUri);
}
但大多数教程在不同的方法去:
var config = new HttpSelfHostConfiguration("http://localhost:999");
// ... configure routes etc..
var server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
现在,我明白了HttpSelfHostServer
类是从System.Web.Http.SelfHost
而不是使用OWIN,并且都工作正常。
但我挣扎了好几天达到了非常简单的任务,如确保使用SSL连接,建立授权等等,仅仅因为每个教程中,我发现关于这些议题referr自托管方法不使用OWIN到。但据我所知,OWIN(武士刀)是微软的做法者优先实现自我托管。
作为一个初学者,我完全困惑和无奈!
编辑:4 upvotes,1 fav和30意见只在6分钟内,但仍然没有答案。不能真正说出我是否在这里做了很好的咖啡,或者这只是一个令人难以置信的愚蠢问题。
评论编辑:我猜这是因为你在这里踩到了新的领域。 OWIN作为MS的首选方法并不是那么长时间,对吧?我也不确定你所说的“非常简单的任务”其实就是这样。这个问题的答案可能是“它不能完成,使用IIS”。 – Nilzor
@Nilzor是的,这可能也是如此。我已经考虑过使用IIS来公开Web API,但问题是我需要一个持续运行的服务来完成CPU密集型任务。我可以通过实现一个WCF主机来将服务从api分离出来,并通过它来访问它。一个MVC Web应用程序(它也提供API),但是MVC中的WCF客户端对我的经验也是一个真正的痛苦。 – Acrotygma