2010-01-12 16 views
15

Ich habe den ganzen Tag mit SvcUtil gerungen und versucht, nützlichen Code für einige IMS Enterprise Services (hauptsächlich den Group Management Service) zu generieren, aber es gibt andere, für die wir auch arbeiten müssen.) Sie finden den IMS-Service WSDL ist hier http://www.imsglobal.org/es/index.html.Alternative zu SvcUtil.exe?

Ich bin zu der Schlussfolgerung gekommen, dass SvcUtil ein nutzloser nachträglicher Einfall von Microsoft ist, der die WSDL- und XSD-Standards nicht einmal halbwegs unterstützt. Es ist nicht in Lage, einen WCF-Dienst zu generieren, der den Standard-WSDL-Verträgen entspricht, die IMS UND-Funktionen gleichzeitig verwendet. Obwohl generierbarer Code aus der folgenden WSDL (http://www.imsglobal.org/services/gms/wsdl/imsGroupManServiceSync_v1p0.wsdl) generiert wird, zeigt die Beobachtung der generierten WSDL aus dem WCF-Dienst (? Wsdl,? Wsdl = wsdl0,? Xsd = xsd0 usw.), dass keine der Operationen existiert und nur ein Bruchteil von Die Typen, die im Code generiert wurden, werden von WCF tatsächlich erkannt. Wenn wir uns mit dem generierten Code herumschlagen, können wir etwas dieser Art von Funktionen bekommen (wir benutzen SoapUI zum Testen), aber dann entspricht es nicht mehr dem Vertrag, also ist es für die Leute nutzlos, die wirklich diese Dienste aufrufen müssen.

Gibt es Alternativen zu SvcUtil? (Bitte schlagen Sie nicht das eingebaute "Add Service Reference" -Tool von Visual Studio vor, das genauso nutzlos ist wie es den gleichen Code wie SvcUtil verwendet.) Wir brauchen etwas, das uns einen gewissen Grad an Kontrolle über den Code gibt Aus dem WSDL-Vertrag wird generiert, in welche Dateien die einzelnen Teile gelangen, in welchen Namespaces jedes Codeelement endet usw. Der IMS-Vertrag importiert sowohl XSD-Typen, die für die in der WSDL definierten Dienste spezifisch sind, als auch XSD-Typen, die häufig vorkommen an alle IMS-Dienste. Wir müssen in der Lage sein, verschiedene Assemblies für diese Typen zu generieren und sie im generierten Code zu referenzieren (ähnlich wie SvcUtil es anscheinend tun soll ... aber es scheint nicht zu tun, was es in seiner Dokumentation sagt überhaupt.)

Ich war bis jetzt ein großer Fan von WCF. Es funktioniert natürlich, wenn Sie nur .NET/WCF-Dienste verwenden, aber jedes Mal, wenn Sie versuchen, es in einer standardkonformen, plattformübergreifenden Umgebung zu verwenden, geht alles schief.

+1

"Jedes Mal, wenn Sie versuchen, es in einer standardkonformen, plattformübergreifenden Umgebung zu verwenden, geht alles kaputt" .... das sollte wirklich nicht überraschen .... – skaffman

+0

@skaffman: Außer das war angeblich der ganze Punkt der von WCF gelobten neuen und verbesserten WSDL-, SOAP-, XSD- und WS-* -Standards. – jrista

+0

Um ein Dienstverhalten zu erstellen, das Ihre WSDL-Generation "anpasst", ist dies eine Option? Sie können ein Beispiel hier sehen: http://www.codeproject.com/KB/WCF/ExportAnnotationFromWCF.aspx –

Antwort

8

Entschuldigung, dass ich keine Zeit habe, auf diese Frage zu antworten, aber es gibt eine Antwort auf Ihre Frage. . Es ist eine Schnittstelle, die Sie IWsdlImportExtension genannt implementieren können, die zwei Methoden, die Sie interessieren werden Sie sind:

GenerateContract() und GenerateOperation()

Wenn Sie diese Methoden implementieren, können Sie tatsächlich die Kontrolle Weg SvcUtil pumpt Code durch Hinzufügen oder Entfernen von CustomAttributes und so weiter. Sie müssen eine DLL mit der darin enthaltenen Schnittstelle kompilieren und dann die SvcUtil-Konfiguration auf die DLL und die Schnittstelle verweisen.

Mit dieser Methode können Sie zum Beispiel Xml-Dokumentation zu Ihren ausgegebenen Proxys hinzufügen und so weiter. Es gibt einige interessante Artikel darüber.

+0

Vielen Dank für die Info! Dies wird hilfreich sein. – jrista

10

Haben Sie sich die WCF Proxy Generator auf Codeplex angesehen? Basierend auf dem, wer dahinter steckt (Kate Gregory und Michele Leroux Bustamante), gibt es Hoffnung, dass es nützlich sein könnte - und Sie erhalten die Quellen, so dass Sie nach Herzenslust anpassen können!

(haben nicht die Zeit hatte, mich an ihm einen ernsten Blick nehmen - noch - es ist auf der endlosen Liste „To-Do, wenn ich um um es zu bekommen“ ....)

Plus-Check-out Diese blog post here by Pedram Rezaei zeigt, wie Sie den Schritt "Add Service Reference" von Visual Studio mit Ihrem eigenen benutzerdefinierten Code beeinflussen.

+1

Vielen Dank für den Link! Sieht sehr nützlich aus. Michele Bustamante ist die Göttin der WCF, und ich mag die meisten ihrer Arbeit. – jrista

+1

Schlechte Wortwahl. Wie ist; "alles" klingen? ; P Ich habe noch eine Frage ... Sie haben erwähnt, dass Quelle verfügbar war, aber wenn ich auf der Codeplex-Site zur Registerkarte Quellcode gehe, zeigt dies, dass keine Quelle verfügbar ist, und es gibt nur einen Download für das MSI. Woher bekomme ich den Quellcode? – jrista

+1

Es gibt einen Link "Add-In Source" auf der Seite: Add-In Source * Hier finden Sie die Quelle für das Add-In und Setup-Programm: http://wcfproxygenerator.codeplex.com/Release/ProjectReleases. aspx? ReleaseId = 29584 –