Ich habe ein Problem beim Aufrufen eines Webdienstes auf einem SAP PI-Bus von meinem WCF-Client festgestellt. Die Operation ist als Einweg definiert, und die Methode auf meinem Proxy-Operationsvertrag ist entsprechend dekoriert, wenn der Servicereferenz hinzugefügt wird. Der Dienstclient erhält jedoch eine Ausnahme, wenn die entsprechende Operation aufgerufen wird:
Die Einweg-Operation hat eine Nachricht mit Action='' zurückgegeben
Unter Verwendung von SoapUI kann die Methode auf dem Bus erfolgreich aufgerufen werden, und sie gibt einen SOAP-Umschlag mit leerem Body zurück. Die Bus-Leute haben mir gesagt, dass dies den SOAP-Spezifikationen entspricht:
(SOAP-Spezifikationen, Kapitel 4.7.9, Einweg-Operationen):
Es gibt unterschiedliche Interpretationen darüber, wie HTTP bei der Durchführung von Einweg-Operationen verwendet werden soll.
R2714 Für Einweg-Operationen DARF eine INSTANZ KEINE HTTP-Antwort zurückgeben, die einen Umschlag enthält. Speziell muss der HTTP-Antwort-Entity-Body leer sein.
R2750 EIN VERBRAUCHER muss einen in einer HTTP-Antwortnachricht in einer Einweg-Operation transportierten Umschlag ignorieren.
R2727 Für Einweg-Operationen darF EIN VERBRAUCHER NICHT einen erfolgreichen HTTP-Antwortstatuscode (d.h. 2xx) interpretieren, um zu bedeuten, dass die Nachricht gültig ist oder dass der Empfänger sie verarbeiten würde.
Es scheint also, dass mein WCF-Client nicht mit R2750 übereinstimmt.
Ich habe herausgefunden, dass wenn ich den Betriebsvertrag auf dem Proxy erzwinge, IsOneWay = false zu sein, funktioniert alles.
Gibt es etwas falsch mit der Art und Weise, wie WCF Einweg-Operationen behandelt oder mache ich etwas falsch (wahrscheinlicher)? Sollte ich noch etwas anderes tun, es scheint einfach nicht richtig zu sein, den generierten WCF-Proxy-Client zu überschreiben.
Vielen Dank für alle Vorschläge.
2 Stimmen
Tolle Frage +1. Ich würde behaupten, dass ihre Seite auch nicht mit R2714 übereinstimmt. Bitte erwägen Sie, einen Vorfall bei Microsoft zu melden und uns mitzuteilen, was das Ergebnis ist.
0 Stimmen
Ähnliche Frage (und weitere Informationen): stackoverflow.com/q/4510484/46039
0 Stimmen
Link zur SOAP-Spezifikation 4.7.9 Einweg-Operationen: ws-i.org/profiles/basicprofile-1.1.html