2010-07-01 5 views
9

Ich habe eine Server/Client-Anwendung in Delphi 2006 entwickelt. Der Client ist Win32 und der Server ist ein. Net 1.1 Webservice.WCF-Dienst ausgesetzt als ASMX wird keine Parameter akzeptieren

Wir sind dabei, dieses Projekt zu aktualisieren, aber es muss in kleinen Schritten durchgeführt werden. Ich begann mit dem Server und erstellte ein WCF-Projekt in VS2010 (C# .net 4.0). Der erste Schritt besteht darin, den Server in WCF auszuführen, ohne den Client zu ändern. Also habe ich das Fassadenmuster verwendet, eine ähnliche Schnittstelle zum alten Delphi-Webservice erstellt, einen Verweis auf die alte .net 1.1-DLL hinzugefügt und in meiner Implementierung den alten .net 1.1-Code aufgerufen.

Nächster Schritt Aktualisieren der Proxy-Klasse auf dem Client. Dies ist fehlgeschlagen. Das WSDL-Importer hat die basicHttpBinding-Anweisung nicht richtig verstanden, sodass die generierte Proxyklasse den vorhandenen Proxy nicht ersetzen konnte.

Nach ein wenig Recherche fand ich diesen Blogpost.

http://kjellsj.blogspot.com/2006/12/how-to-expose-wcf-service-also-as-asmx.html

Das funktionierte, war die ASMX WSDL nicht anders als das alte .net alles 1.1 so appered ok.

Aber es war nicht. Beim Testen des neuen Dienstes habe ich festgestellt, dass alle meine Parameter auf dem Server leer waren. Ich habe mit Fiddler auf dem Client versucht und die Parameter sind in der XML vorhanden, die an den Server gesendet wird.

So bin ich fest. Irgendwelche Gedanken darüber, wie man das lösen könnte, würden sehr geschätzt werden. Gibt es einen Code, der interessant sein könnte, dann lass es mich wissen.

+0

So ist die WSDL ist die gleiche, aber der Server ist jetzt 4.0 .Net statt 1.1? Wenn der Delphi-Client die gleiche WSDL wie zuvor verwendet, aber der Server die Parameter nicht mehr sieht, würde ich einen Client in .Net schreiben und sehen, ob das funktioniert. Wenn dies der Fall ist, vergleichen Sie die Soap-Anforderungen des Clients mit .Net und Delphi. – mjn

+5

Vergleichen Sie das XML. "Null-Parameter" bedeutet normalerweise, dass es einen Namensraumunterschied zwischen dem, was gesendet wird und was erwartet wird. –

Antwort

1

Ich stieß auf ein ähnliches Problem mit einem Web-Service asmx ... bestimmte Daten verloren ihre Werte. Wenn Sie hierarchische Daten verwenden, müssen Sie möglicherweise die internen oder vererbten Objekte mithilfe eines XmlInclude-Attributs deklarieren. Wenn Sie beispielsweise über eine Benutzerklasse verfügen, die in Ihrem Service verwendet wird, und eine Kundenunterklasse, müssen Sie möglicherweise die Customer-Klasse für den Service deklarieren, wenn sie nicht direkt in einer Webmethode verwendet wird. Sie würden dies folgendermaßen tun.

Natürlich kann es damit nichts zu tun haben, also viel Glück wenn das der Fall ist. :)

0

Bestätigen Sie, dass die Parameternamen im neuen Dienst mit den Namen im alten Dienst übereinstimmen. Wenn Sie die Parameternamen geändert haben, werden sie nicht aus dem XML-Code zugeordnet, sodass sie im ausführenden Code null sind.

0

hinzufügen Knowntype Attribut zu den Unterklassen

Verwandte Themen