Hey zusammen,

Ich habe heute einige Zeit damit verbracht für einen alten REST Service einen Wrapper zu schreiben, damit er seine Daten aus einem neueren Service bezieht. Leider stellte sich das als etwas schwerer raus, als ich dachte, denn als ich gerade mit dem Wrapper fertig war, erhielt ich folgende Fehlermeldung:

Huch? Protokoll-Fehler? Was hab ich denn da verbrochen? Das hat mich doch gewurmt und deswegen habe ich mich weiter damit beschäftigt. Ich dachte zuerst, dass es sich um einen Konfigurationsfehler handelt … aber dem war nicht so … nachdem ich eine Test-Solution im VisualStudio zusammengebaut hatte, bestätigte sich mein Verdacht. Die oben genannte “Method” in der Fehlermeldung, ist die Art der Übermittlung. Mein REST-Service erwartet einen GET-Request – aber seltsamerweise schickt mein Client ein POST:

image

Darum habe ich geschaut, ob ich einen Fehler in der Definition der Contracts gemacht habe. Doch dort schien alles richtig zu sein. Ursprünglich habe ich WebGet verwendet – aber auch WebInvoke mit Method=”GET” hat keine Abhilfe gebracht.

Nachdem ich jetzt einige Zeit davor saß und nicht ganz glauben konnte, dass es ein Fehler in WCF sein sollte, habe ich testweise eine Webform neben meine SVC Datei gelegt (also sogar ins selbe Verzeichnis) und habe den Aufruf des Services dorthin übernommen. Und oh Wunder … es klappte:

image

Also halten wir fest – wenn ich von einem REST-Service einen anderen REST-Service via REST-Client aufrufe, bekomme ich als Methode “POST” vorgesetzt … wenn ich mit dem selben Code und der selben Konfiguration aus einer Webform den Service aufrufe, erhalte ich ein “GET”-Request … das klingt jetzt erstmal nicht so, als wenn ich das ändern könnte.

Aber das Problem lässt sich dennoch leicht beheben: Man kann einfach statt der “GET”-Methode “POST” verwenden. Dann klappt der Aufruf sowohl über die Webform als auch über den Webservice … natürlich büßt man damit ein, dass man den Service gemütlich via direktem Aufruf im Browser testen kann … aber man kann halt nicht alles haben ;-)