2013-12-13 4 views
25

Ich bitte nicht um einen Best-Practice-Tipp, da es im Internet zahlreiche Blog-Posts und Tutorials zum Thema gibt.Was ist der richtige Weg, um eine Web-API selbst zu hosten?

Ich frage aus der Verwirrung, seit Microsoft eine Menge Änderungen an der gesamten Selbsthosting-Prozedur vorgenommen hat und jedes Tutorial, das ich finde, einen anderen, veralteten oder unbekannten Ansatz nimmt.

Mein Ziel ist es ein selbst gehosteten Web API in einem Legacy-Windows-Dienst einrichten, um verschiedene lange laufende Aufgaben von einem Nicht-Windows-Client, wie zum Beispiel einer Android-Anwendung zu steuern, wo ein WCF Integration/SOAP Klient kann wirklich ein PITA sein.

Ich bin mir bewusst darüber, dass WCF Lage ist, einen RESTful Service anbieten zu können, aber da Web API wirklich für eine solche Aufgabe geeignet ist, ich dachte, dass ich ihm einen Schuss gab.

Dies ist, wie ich meine API derzeit gehostet beginnen OWIN (Katana):

public class ApiBootstrap { 

    var httpConfiguration = new HttpConfiguration(); 
    // ... configure routes etc. 

    appBuilder.UseWebApi(httpConfiguration);  // appBuilder = IAppBuilder 
    var disposable = WebApp.Start<ApiBootstrapper>(_myBaseUri); 

} 

Aber die meisten Tutorials gehen auf einen anderen Ansatz:

var config = new HttpSelfHostConfiguration("http://localhost:999"); 
// ... configure routes etc.. 

var server = new HttpSelfHostServer(config); 
server.OpenAsync().Wait(); 

Jetzt verstehe ich, Die HttpSelfHostServer Klasse ist von System.Web.Http.SelfHost und nicht mit OWIN, und beide funktionieren gut.

Aber ich bin zu kämpfen für Tage sehr einfache Aufgaben zu erreichen, wie die Sicherung der Verbindung mit SSL, Autorisierung zu schaffen usw., nur weil jedes Tutorial ich zu diesen Themen finden referr auf die selbst gehosteten Methode nicht mit OWIN. Aber AFAIK, OWIN (Katana) ist Microsofts bevorzugter Ansatz, um selbst zu hosten.

Als Anfänger bin ich völlig verwirrt und hilflos!

bearbeiten: 4 upvotes, 1 fav und 30 Ansichten in nur 6 Minuten, aber immer noch keine Antwort. Ich kann nicht wirklich sagen, ob ich genialen Kaffee hier mache oder ob es nur eine unglaublich dumme Frage ist.

+0

Kommentar zum Bearbeiten: Ich schätze, es liegt daran, dass Sie hier ziemlich neue Wege gehen. OWIN als bevorzugter Ansatz von MS war das nicht für eine sehr lange Zeit, habe ich recht? Ich bin mir auch nicht sicher, ob das, was du sagst, "sehr einfache Aufgaben" sind. Es kann sein, dass die Antwort auf diese Frage ist "es kann nicht getan werden. Verwenden Sie IIS". – Nilzor

+0

@Nilzor Ja, das könnte auch der Fall sein. Ich habe bereits über die Verwendung von IIS zur Bereitstellung einer Web-API nachgedacht, aber das Problem ist, dass ich einen ständig laufenden Dienst für CPU-intensive Aufgaben benötige. Ich könnte den Dienst von der API trennen, indem ich einen WCF-Host implementiere und über z. eine MVC-Webanwendung (die auch die API anbietet), aber ein WCF-Client in MVC ist auch ein echter Schmerz in meiner Erfahrung. – Acrotygma

Antwort

5

Der HttpSelfHostServer wird jetzt auf Nuget als veraltet markiert. Der OWIN HTTPListener ist jedoch erst seit relativ kurzer Zeit RTM.

Auch ein Teil der Absicht von Owin zu gewährleisten, dass, wie Sie Middleware einrichten, unabhängig davon ist, wie Sie hosten. Daher werden Sie wahrscheinlich nicht viele Artikel sehen, die direkt auf das Hosting von Owin HttpListener abzielen, da es irrelevant sein sollte, welchen Host Sie verwenden.

Der OwinHttpListener verwendet derzeit den standardmäßigen .net HttpListener unter den Abdeckungen, der in Wirklichkeit dasselbe ist wie der HttpSelfHostServer. Daher sollten Dinge wie SSL in etwa so konfiguriert werden.

Was die Authentifizierung betrifft, haben Sie sich Microsoft.Owin.Security angesehen, wahrscheinlich ist alles, was Sie brauchen, dort drin.