WCF: Svcutil erzeugt ungültige client-proxy, Apache AXIS Web-Service -, überlast-Operationen
Ich bin mit einem 3rd-party-web-service in Java geschrieben und unter Verwendung von Apache Axis 1.3. Der service hat viele überlast-Operationen. Wenn der WCF-Svcutil erzeugt den proxy, es benennt die überladene operation durch anfügen einer Zahl nach der operation den Namen. Zum Beispiel:
getDataResponse getData(getDataRequest request);
getDataResponse1 getData1(getDataRequest1 request);
Sich von sich ist nicht ein problem, aber wenn Svcutil erzeugt das request/response-Nachrichten, vernachlässigt Sie zum ändern der WrapperName Eigenschaft des MessageContracts.
[MessageContractAttribute(
WrapperName = "getData",
WrapperNamespace = "http://namespace.com",
IsWrapped = true)]
public partial class getDataRequest1 { .. }
Wenn die client-Anwendung versucht, öffnen Sie den proxy, wird die folgende Ausnahme ausgelöst:
InvalidOperationException: RPC
Nachricht getDataRequest1 in Betrieb
getData1 hat einen ungültigen Körper name
getData. Es muss getData1
Wenn ich WrapperName = "getData1" der proxy öffnen, jedoch...
- Ich bin nicht rufen Sie die operation, weil der Dienst nicht zu erkennen "getData1"
- Der service hat fast 1100 Operationen, von denen fast die Hälfte sind überlastungen
Gibt es eine Möglichkeit, zu erzeugen und/oder ändern Sie den proxy so, dass alle Operationen arbeiten mit den WCF?
Mark
- haben Sie jemals berichtet, das Microsoft an connect.microsoft.com/visualstudio?
- Nein habe ich nicht, aber ich werde. Danke!
- Vielleicht war das keine so schlechte Frage, nachdem alle? 🙂
- Ich habe genau das gleiche problem. Ebenso ein Java Axis2 web-service. Hast du jemals eine Lösung finden?
- Nicht gut... ich landete auskommentieren der überlastung, dass ich nicht brauchen. Dies wird komm zurück zu verfolgen mich, wenn (wenn) der Verkäufer macht wichtige änderungen zu Ihrem web-service.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für was es Wert ist (4 Jahre später), scheint es, dass durch den Aufruf
WSDL.exe
manuell und vorbei an der/protocol:SOAP
parameter, kann dieses problem vermieden werden. Generierung von service-client über die Benutzeroberfläche noch zu verursachen scheint das Problem wie von VS2012 für Dienstleistungen erzeugt, die von Apache Axis.Beispiel:
Edit: sphinxxx richtig bemerkt, dass das SOAP-Protokoll option ist ausgesetzt in der Benutzeroberfläche als "Add Web Reference", so die Ausführung
wsdl.exe
direkt ist nicht erforderlich.Ist die einzige Lösung, die ich finden konnte, haben, Bearbeiten Sie den generierten code von hand und entfernen Sie alle überladungen, die ich nicht brauchen.
Sah ich nicht, diese Frage vor, denn Sie hatte eine "java" - tag auf Sie, und ich Ignoriere Java-Fragen. Ihre Frage war nicht über Java, so sollte nicht haben eine "java" - tag.
svcutil ist keine Umbenennung der überladene Operationen. Das ist, weil es gibt keine solche Sache als überladene Operationen. WSDL hat kein Konzept von zwei Operationen mit demselben Namen, aber mit verschiedenen Nachrichten.
Wenn man sich die WSDL-aus Achse, ich glaube, du wirst finden, die Operationen mit zahlen Hinzugefügt.
Korrektur: In einem Kommentar, Daneben Gute richtig darauf hin, dass WSDL 1.1 erlaubt das überladen von Methoden. Ich glaube es macht nur Sinn im Kontext einer RPC-basierten Dienst, mit dem sich der message-name kann verwendet werden, zu unterscheiden zwischen einer überlastung und einem anderen.
Jedoch, kann er nicht bewusst sein, dass operator-überladung ist nicht gestattet,WS-I Basic Profile 1.1:
4.5.3 Unverwechselbaren Operationen
Betrieb namens die überbelastung in einer
wsdl:portType
ist verboten, durch das Profil.R2304 Eine
wsdl:portType
im BESCHREIBUNG MÜSSEN Operationen mit unterschiedlichen Werte für die name-Attribute.Beachten Sie, dass diese Anforderung gilt nur für die
wsdl:operations
innerhalb einer bestimmtenwsdl:portType
. Einwsdl:portType
haben kannwsdl:operations
mit Namen, die gleichen wie jene in der anderenwsdl:portTypes
.Wenn man liest mehr von WS-I-BP1.1, wird man erfahren, warum nicht alles, was in WSDL 1.1 ist eine gute Idee.
Schreiben Sie ein Skript, das tun werde, diesen text zu beheben und legen Sie es als post-build-script für den proxy-Bibliothek.
Habe ich festgestellt, dass bei der Verwendung von "old fashioned"
AddServiceReference
es richtig generiert Klassen, mit überlastungen, auch in VS2012.Keine der Lösungen hier für mich gearbeitet.
Generierung der Referenz in einem vs2010-Projekt gezielt für .NET2, und dann öffnen sich die Lösung in vs2012 oder vs2013 targeting .NET4, funktioniert aber.