Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Web Api und ASP.NET vnext?
Maruu
myCSharp.de - Member



Dabei seit:
Beiträge: 123

Themenstarter:

Web Api und ASP.NET vnext?

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MarsStein am .
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Maruu
myCSharp.de - Member



Dabei seit:
Beiträge: 123

Themenstarter:

beantworten | zitieren | melden

@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.
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 703
Herkunft: OWL

beantworten | zitieren | melden

@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).
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16145

beantworten | zitieren | melden

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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 703
Herkunft: OWL

beantworten | zitieren | melden

Zitat von Abt
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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16145

beantworten | zitieren | melden

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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Maruu
myCSharp.de - Member



Dabei seit:
Beiträge: 123

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16145

beantworten | zitieren | melden

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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Maruu
myCSharp.de - Member



Dabei seit:
Beiträge: 123

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Maruu am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16145

beantworten | zitieren | melden

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. ;-)
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
malignate
myCSharp.de - Member

Avatar #avatar-3206.png


Dabei seit:
Beiträge: 751

beantworten | zitieren | melden

Zitat von Abt
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( ... ));
    }
}
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16145

beantworten | zitieren | melden

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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3627
Herkunft: Hannover

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers