Laden...

Web Api und ASP.NET vnext?

Erstellt von Maruu vor 9 Jahren Letzter Beitrag vor 9 Jahren 3.803 Views
M
Maruu Themenstarter:in
121 Beiträge seit 2006
vor 9 Jahren
Web Api und ASP.NET vnext?

Hallo zusammen,

ich google mich nun schon seit Stunden/Tagen kreuz und quer durchs Netzt und bin immer noch nicht schlau geworden.

Problemstellung: Es soll eine Client-Server Anwendung (im lokalen Netzwerk) erstellt werden bei der der Client mit dem Server via REST (JSON) kommuniziert. Aus verschiedenen Gründen (Zugriff auf lokals Dateisystem,...) läuft der Server als Windows-Dienst und nicht in einem IIS oder Azure (dies ist auch nicht geplant).

Nach kurzem googeln hätte ich für die Kommunikation beim Server Microsoft Web Api 2 als REST Framework vorgeschlagen das über OWIN Selfhost im Windows-Dienst gehostet wird. Fertig!

So und dann googelt man etwas genauer und findet Wald vor lauter Bäumen nicht mehr:

Mit dem in kürze kommenden ASP.NET vnext (man will ja immer mit der Zeit gehen) wird das bisher separate WebAPI ja in ASP.NET integriert. ASP.NET wird modular und kann nun auch unter anderem auf beliebigen Systemen gehostet werden (IIS, Selfhost, ...). Nun konnte ich niergends finden (und auch im Test mit Visual Studio 2015 CTP 6 und ASP.NET vnext erkennen) das man die WebAPI noch direkt in einer Executable (Consolen-/WPF-Applikation, Dienst,...) einbinden kann, sondern das ganze läuft stets in einer WebApp. Stimmt dies? Wenn ja, kann man mit ASP.NET vnext keine REST Service für normale Executables zur Verfügung stellen. Muss man in so einem Fall auf andere Frameworks wie Nancy oder ServiceStack zurückgreifen? Das fände ich sehr schade, weil man hier darauf hoffen muss dass diese Projekte in Zukunft noch weiterentwickelt werden.

Gruß

Maruu

3.170 Beiträge seit 2006
vor 9 Jahren

Hallo,

muss es denn ein WebAPI sein?
Das einfachste wäre IMO ein self-hosted WCF Webservice, der direkt JSON spricht.

Gruß, MarsStein

Edit: Gibts quasi out-of-the-box, ohne weitere Drittanbieterkomponenten

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

849 Beiträge seit 2006
vor 9 Jahren

Hallo,

kann ich mir nicht vorstellen. Habs zwar nur überflogen aber hilft Dir ASP.NET Web Api 2.2: Create a Self-Hosted OWIN-Based Web Api from Scratch weiter?

M
Maruu Themenstarter:in
121 Beiträge seit 2006
vor 9 Jahren

@MarsStein: WebAPI muss es nicht zwingend sein, REST/JSON aber schon. Ich sehe halt das die Zukunft immer mehr in Richtung REST geht und sobald ich zu Android/iOS schaue bleibt als Kommunikationskanal nur noch REST/JSON übrig. WCF im klassischen Sinne mit SOAP fällt gänzlich raus, mit JSON ggf. möglich.

@unconnected: Ich bin mir nicht 100% sicher, aber dein Artikel zeigt meiner Meinung nach das Selfhosting einer Web API 2.2 Anwendung (was bisher ja ging) und nicht von ASP.NET vnext Web API. Das sieht man daran das der Controller von ApiController ableitet anstatt wie bei vnext nur noch von Controller. Ein Beispiel dazu ist hier zu finden:
http://www.asp.net/vnext/overview/aspnet-vnext/create-a-web-api-with-mvc-6
Auf http://www.asp.net/vnext konnte ich eben leider bisher kein Beispiel finden bei dem die Web API in einer Executable gehostet ist.

3.170 Beiträge seit 2006
vor 9 Jahren

Hallo,

es wird alles direkt von WCF unterstützt, sowohl REST als auch JSON.

es ist ziemlich einfach, google doch mal "WCF self hosted rest json".

Wichtig ist das UriTemplate, über das Du den REST-Pfad angibst, über den eine Methode angesprungen wird.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

709 Beiträge seit 2008
vor 9 Jahren

@Maruu: In dem von dir verlinkten Beitrag wird ein Web API mit ASP.NET 5 MVC 6 erstellt, nicht mit ASP.NET 5 Web API 2.2.

MVC und Web API sind zwei paar Schuhe, wenn ich das richtig verstehe (obwohl man mit MVC ein Web API realisieren kann).

16.806 Beiträge seit 2008
vor 9 Jahren

WCF kann nicht nur SOAP, sondern auch JSON REST und ODATA (sogar 4.0).
Einfach mal komplett anschauen 😉

Ich würde aber auch zur self-hosted WebAPI tendieren bei dieser Anforderung.

ASP.NET vNext ist nicht fertig und NICHT für die produktive Umsetzung empfohlen.
Im Mai sieht das dann anders aus. Stand heute nur eine Preview.

MVC und WebAPI sind keine zwei paar Schuhe denn WebAPI rennt in einem MVC Kern.
MVC gibts ohne WebAPI - umgekehrt nicht.

709 Beiträge seit 2008
vor 9 Jahren

MVC und WebAPI sind keine zwei paar Schuhe denn WebAPI rennt in einem MVC Kern.
MVC gibts ohne WebAPI - umgekehrt nicht.

Danke für die Klarstellung. Ich hatte das bisher immer anders verstanden.

16.806 Beiträge seit 2008
vor 9 Jahren

Versuch mal im VS -> Neues Projekt ein WebAPI-Projekt ohne MVC zu erstellen: geht nicht.
VS wird Dir im Wizard immer den Haken bei MVC rein machen. Die Controller und Co sind alle von MVC abhängig.

M
Maruu Themenstarter:in
121 Beiträge seit 2006
vor 9 Jahren

Hallo,

@MarsStein: Ich kenne die Möglichkeit mit WCF REST/JSON zu machen, allerdings war es ursprünglich nicht dafür ausgelegt (DataContract, DataMember,...) sondern eher für SOAP. Dennoch bleibt es eine Alternative, da hast Du recht!
@pinki: Mit vnext verschmilzt MVC mit Web Api, das ist ja das verwirrende 😉
@Abt: Mir ist klar das vnext noch nicht produktiv eingesetzt werden darf. Aber ich vermute das dies dann spätestens mit der BUILD Konferenz möglich ist. Es fühlt sich halt so an jetzt auf Web API 2 zu setzen wie wenn man jetzt noch ein Silverlight-Projekt startet. Man weiß es funktioniert, aber die neue technik ist da(steht vor der Türe) und meine eingesetzte Technik läuft aus.

Hier auch noch ein Link zu den Folien von der letzten Basta von Holger Schwichtenberg über die "Das ist neu und anders in ASP.NET 5.0 mit MVC & WebAPI 6.0":
http://it-visions.de/produkte/vortragsdetails.aspx?v=7925
Leider finde ich da auch nicht das passende. Evtl. schreib ich Ihm mal und frage konkret nach.

16.806 Beiträge seit 2008
vor 9 Jahren

Also über den Inhalt von solchen Präsentationen will ich ungern urteilen; einfach weil es 99% hergeleitete UseCases sind (ohne diese jetzt im speziellen zu kennen).

Inhaltlich wird sich für den Konsumenten (fast) nichts an der WebAPI ändern.
Ändern wird sich vor allem eben die Konfiguration und die internen Callings. Aber brauchst Du diese direkt?

Zudem bleibt es Updatefähig.

M
Maruu Themenstarter:in
121 Beiträge seit 2006
vor 9 Jahren

Die Änderungen sind nicht groß, das sehe ich ebenso. Ich konnte nur die Web API in meinen Tests nicht mehr direkt in einem Executable (Console, WPF,...) Projekt einbinden bzw. hab dies auch nirgends als Beispiel gefunden. Das einzige was geht ist in einer WebApp, die will ich aber nicht in jedem Projekt haben. Sollte das weiterhin gehen wäre für mich alles in Ordnung, die Umsetellung von WebAPI 2 auf vnext ist denke ich nicht all zu schwer was den Code angeht, falls es eben geht.

Edit:

Nur nochmal als Zusammenfassung, bisher sah Selfhosting der Web Api in einer Executable (hier Console) so aus:
http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

Das würde ich auch gern mit ASP.NET vnext Web API machen.

Diese beiden Stackoverflow-Threads fragen vermutlich das gleiche:
http://stackoverflow.com/questions/25403746/self-hosted-vnext-application
http://stackoverflow.com/questions/27787636/owin-hosting-asp-net-mvc-6-vnext

Und in einem steht es geht so nicht mehr, man muss sich eine WebApp basteln die dann wiederum ge-Selfhostet werden kann. Das ist aber nicht mein gewünschtes Ziel.

16.806 Beiträge seit 2008
vor 9 Jahren

Tja, dann treffen hier eben zwei Welten aufeinander.
Du musst Dich leider damit wohl abfinden, dass vNext ein Preview-Stand darstellt und es daher sehr gut sein kann, dass stand heute es nicht anders geht als eine WebApp zu basteln.
Es kann gut sein, dass die Pakete nach dem Release aktualisiert werden und wieder eine echte self-hosted Anwendung erstellt werden kann - status quo eben nur mit der WebApi 2.2.
Aber genau deswegen verwendet man keine Preview für nahe stable Projekte. 😉

742 Beiträge seit 2005
vor 9 Jahren

MVC und WebAPI sind keine zwei paar Schuhe denn WebAPI rennt in einem MVC Kern.
MVC gibts ohne WebAPI - umgekehrt nicht.

Dask ann aber nicht stimmen. MVC ist dank Owin auf Self-Host fähig, hat also keine Abhängigkeiten mehr zu System.Web und damit kann es eigentlich keine nicht mehr direkt von MVC abhängig sein. Man sieht ja an vielen doppelten Strukturen, z.B. Filter, dass die 2 Projekte doch relativ unabhängig sind.

Ich habe auch schon APIs nur mit Owin/Katana geschrieben. Das geht auch sehr gut. Das was man meistens braucht, ist echt recht wenig.

Dazu habe ich einfach eine eigene Middleware geschrieben, die dann ungefährt so funktioniert:


class UsersMiddleware : RouterMiddleware
{
    UsersMiddleware()
    {
        GET["/api/users/"] = GetUsers;
    }

    private async Task GetUsers(IDictionary<string, string> parameters, IOwinContext context)
    {
         context.Response.Json(new UsersDto( ... ));
    }
}

16.806 Beiträge seit 2008
vor 9 Jahren

Ok, das ist die Ausnahme, dass der Owin Host die Rolle von MVC übernimmt. Das hab ich vergessen.
Bis zur 3.0 war hier aber teilweise der Code einfach gedoppelt.

3.511 Beiträge seit 2005
vor 9 Jahren

Hallo,

habe hier ein Artikel gefunden in dem beschrieben wird, wie man vNext als Self Host ausführen kann: vSelf-Hosting mit Kestrel in ASP.NET 5 bzw. ASP.NET MVC 6 .

Habe ich selber nicht getestet.

Gruß
Khalid

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)