2013-12-13 27 views
25

我并不是在寻求最佳实践方面的建议,因为在整个互联网上都有关于该主题的大量博客文章和教程。自承载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分钟内,但仍然没有答案。不能真正说出我是否在这里做了很好的咖啡,或者这只是一个令人难以置信的愚蠢问题。

+0

评论编辑:我猜这是因为你在这里踩到了新的领域。 OWIN作为MS的首选方法并不是那么长时间,对吧?我也不确定你所说的“非常简单的任务”其实就是这样。这个问题的答案可能是“它不能完成,使用IIS”。 – Nilzor

+0

@Nilzor是的,这可能也是如此。我已经考虑过使用IIS来公开Web API,但问题是我需要一个持续运行的服务来完成CPU密集型任务。我可以通过实现一个WCF主机来将服务从api分离出来,并通过它来访问它。一个MVC Web应用程序(它也提供API),但是MVC中的WCF客户端对我的经验也是一个真正的痛苦。 – Acrotygma

回答

5

的HttpSelfHostServer现在被标记为上的NuGet遗产。但是,Owin HTTPListener现在只能在相当短的时间内完成RTM。

而且,Owin的意图的一部分,以确保无论你如何主机如何设置中间件是相同的。所以你不可能直接看到很多针对Owin HttpListener托管的文章,因为它应该与你使用的主机无关。

的OwinHttpListener目前使用的封面,这在现实中是所使用的HttpSelfHostServer同样的事情在标准的.NET HttpListener。因此,像SSL这样的东西应该以几乎相同的方式进行配置。

至于认证而言,你看着Microsoft.Owin.Security,你需要最有可能一切都在那里。

相关问题