Standardprotokoll
Casablanca
- software
0 Rolf B0 Casablanca0 Rolf B
Hallo,
was ist das Standardprotokoll, das C#/WCF zur Datenübertragung einsetzen? REST oder SOAP? Kann man dieses in VS so einstellen, dass alle Kommunikationen via REST vonstatten gehen?
Gruß
Hallo Casablanca,
was ist „Standard“ - frage 10 Leute und du bekommst 12 Antworten. Für Intranet-Aufrufe ist bei uns im Haus net.tcp der Standard, weil es ein binäres Protokoll und damit schneller ist. Für Aufrufe in die wilde weite Welt was es mal SOAP, und mittlerweile rufen alle REST und in 3 Jahren ist es BATH oder JUNK oder sonstwas.
Was dein Service anbietet, hängt davon ab, welche Endpoints Du ihm konfigurierst. Das ist weniger eine Sache von VS als der web.config.
Ich habe vorletztes Jahr einer Webseite von mir ein WCF API für SOAP und REST angeflanscht. REST habe ich mit webHttpBinding gebaut, und mit endpointBehavior webHttp versehen. Das war Copy+Paste Programming aus Internet-Ergebnissen. WCF ist für mich eine Wunderkiste mit 1000 Knöpfen, von denen die meisten unvorhersehbare Ergebnisse erzielen und etliche nur mit Spezialschraubendreher verstellbar sind. Und die Kiste funktioniert nur, wenn alle Knöpfe zueinander passend eingestellt sind. Andernfalls bleibt sie ganz stumm oder bringt obskure Fehlermeldungen.
webHttp Behavior habe ich so eingestellt:
<service name="***.AjaxEndpoint">
<endpoint name="AJAX"
binding="webHttpBinding" bindingConfiguration="ajaxConfig"
behaviorConfiguration="restBehavior"
contract="***.IFooBar" />
</service>
<behaviors>
<endpointBehaviors>
<behavior name="restBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
Allerdings habe ich den Eindruck, dass die diversen Hühner, die im Microsofthaufen herumrennen, sich über die Richtung überhaupt nicht einig sind, und REST mit WCF nicht das ist, was man will. Für REST scheint serverseitig eher WebAPI Mittel der Wahl zu sein, und clientseitig der Autorest-Client.
Das ist aber eher eine Einsicht eines Multi-Fullstack-Entwicklers (= kann alles, aber nichts richtig). Ich finde es schwierig, festzustellen, ob die neueste Sau, die durch den Microstall getrieben wird, Core-spezifisch ist oder auch für das klassische Framework gelten soll.
Rolf
Hallo Rolf, danke für die Antwort. Ich meinte eigentlich, welches Protokoll wird genommen, wenn man nicht an dem web.config herumdoktert? Die Einstellungen deines configs hat glaube ich damit nichts zu tun, ob Rest oder Soap genommen werden soll. Viel mehr zeigt es, um welche Anwendung es geht, die auf der anderen Seite lauscht.
Gruß
Hallo Casablanca,
was heißt "nicht rumdoktern". Sprichst Du von einem WCF Client oder von einem Server? Beim Server dokterst Du zwangsläufig herum, um die erforderlichen Endpoints einzurichten. Da gibt's keinen Default. Da gibt's das, was Du konfigurierst.
Am Client generierst Du einen Proxy für den Service - und der basiert auf den Endpoints die der Service bereitstellt. Stellt er 3 Service-Endpoints bereit (z.B. für SOAP, REST und net.tcp), hast Du am Client auch 3 Client-Endpoints. Und Du musst dann beim Programmieren über den Endpoint-Namen auswählen, welchen Du verwenden willst. WCF baut dann basierend auf der app./web.config den Protokollstack zusammen (oder Du machst es im Code, wenn Du WCF zufällig kapiert hast). Je nach konfigurierter Authentication musst Du dann auch die ClientCredentials unterschiedlich setzen.
Mein Config-Auszug - sorry, der war nicht ganz vollständig - zeigt das konfigurierte Binding webHttpBinding und ein Endpoint-Behavior dazu. Die bindingConfiguration habe ich nicht gezeigt, da steht drin wie Puffergrößen sind und welche Transportsicherung gilt. Es gibt eine Menge Bindings, und jedes hat andere Verhaltensweisen. webHttpBinding ist nach meinem Verständnis der Doku für REST da, für SOAP nimmt man das basicHttpBinding.
Die Frage nach dem Default-Protokoll ist also in etwa die nach dem Default-Programm deines Fernsehers. Antwort: das, das Du gerade eingestellt hast.
Oder ich verstehe deine Frage komplett miss.
Rolf
Hallo Rolf,
vielen Dank. Deine Erklärung hat meine Meine Frage beantwortet.
Gruß