139 Stimmen

Service-Referenzfehler: Code für die Dienstreferenz konnte nicht generiert werden

Ich habe eine Windows Service Solution und versuche, einen Dienstverweis auf einen Hermes (Opensource ebms Message Server) Web Service in VS2010 hinzuzufügen.

Ich kann den Webdienst über seine URL finden, aber wenn ich versuche, die Dienstreferenz zu füllen, erhalte ich in Visual Studio die folgenden Fehler:

Error 8 Custom tool error: Failed to generate code for the service reference 'testService'.  Please check other error and warning messages for details. C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 6 Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 7 Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:service[@name='EbmsMessageStatusQuery']/wsdl:port[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 5 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter
Error: Schema with target namespace 'http://service.ebms.edi.cecid.hku.hk/' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Nachforschungen ergaben, dass es daran liegt, dass svcutil.exe die Proxys nicht erstellen konnte, weil es keine Berechtigungen für ein Verzeichnis hat (möglicherweise c: \windows\temp ). Ich habe versucht, verschiedene Zugriffsberechtigungen zu vergeben, aber ich bin mir nicht sicher, welcher Benutzer die Berechtigung benötigt, oder ob es sich nur um ein Ablenkungsmanöver handelt.

Jede Idee wäre sehr willkommen.

感謝

314voto

Mohan Punkte 5860

Deaktivieren Sie die Option Reuse types in all referenced assemblies in Configure service reference

Für Details siehe hier

129voto

Darren Punkte 66744

Klicken Sie mit der rechten Maustaste auf Ihre Dienstreferenz und wählen Sie Configure Service Reference...

Configure Service Reference

Dann deaktivieren Sie Reuse types in referenced assemblies

Reuse Types

Klicken Sie auf OK Reinigen Sie Ihre Lösung und bauen Sie sie neu auf.

20voto

Florin Dumitrescu Punkte 8034

Ich bin auch auf einen ähnlichen Fehler gestoßen, als ich versuchte, den Client für einen Webdienst aus einem ASP.Net MVC 4.0-Projekt mit Visual Studio 2012 zu generieren.

Die Ursache des Problems scheint darin zu liegen, dass das Projekt, aus dem ich den Client zu generieren versuchte, auf eine Baugruppe verwies, die wiederum von einer anderen Baugruppe abhängig war, auf die ebenfalls nicht verwiesen wurde.

Wenn "Reuse types in referenced assemblies" in der Dienstkonfiguration aktiviert ist, prüft der Dienstgenerator wahrscheinlich alle referenzierten Baugruppen, um eine Liste der Typen zu erhalten, die wiederverwendet werden können. Die Tatsache, dass eine der referenzierten Baugruppen auf eine andere Baugruppe verweist, die nicht verfügbar ist, führt wahrscheinlich zu einem Fehlschlag des Generators.

Deaktivieren der Option "Typen in referenzierten Baugruppen wiederverwenden" in den Dienstkonfigurationen wird das obige Problem lösen Aber es gibt eine Nebenwirkung. Die Option zur Wiederverwendung von Typen gibt es aus einem bestimmten Grund und in einigen Fällen vermeidet es unnötiges Casting im Code, der den Dienst in Anspruch nimmt.

Wenn zum Beispiel der Dienst selbst mit WCF erstellt wurde und einige Methodenparameter darin vom Typ System.Guid sind, werden sie im generierten Client in Strings übersetzt, wenn die Option zur Wiederverwendung von Typen deaktiviert ist.

Eine Alternative, die ich bevorzuge zur Deaktivierung der Wiederverwendung von Typen ist das Hinzufügen der Dienstreferenz aus dem speziell für diesen Zweck erstellten Class Library-Projekt. Dabei ist zu beachten, dass alle dienstbezogenen Konfigurationen aus der app.config der Klassenbibliothek in die Konfigurationsdatei des Startprojekts kopiert werden.

Wenn es Typen gibt, die in lokalen Assemblies definiert sind und im Service-Client wiederverwendet werden sollen, müssen diese Assemblies einfach aus dem oben erwähnten Klassenbibliotheksprojekt referenziert werden, zusammen mit all ihren Abhängigkeiten.

3voto

user2144589 Punkte 31

http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647

Dank des obigen Artikels.

In meinem Fall, ich habe dieses Problem mit meinem WPF-Projekt in VS.Net 2008. Nachdem ich durch diesen Artikel ging, war ich erkennen, dass die Baugruppe in den Webdienst verwendet unterschiedliche Version der Baugruppe auf Client verwendet wird.

Nach der Aktualisierung der Baugruppe auf dem Client funktioniert es einwandfrei.

2voto

Aliostad Punkte 78595

Es wäre äußerst schwierig, das Problem zu erraten, da es auf einen Fehler in der WSDL und ohne die WSDL zu prüfen, kann ich nicht viel mehr sagen. Wenn Sie also Ihre WSDL zur Verfügung stellen können, tun Sie das bitte.

Ich kann nur sagen, dass in der WSDL ein Schema zu fehlen scheint (mit dem Ziel-Namensraum "http://service.ebms.edi.cecid.hku.hk/"). Ich weiß von Problemen und der unterschiedlichen Behandlung des Schemas, wenn die Include-Anweisungen ignoriert werden.

Im Allgemeinen finde ich die Microsoft-Implementierung von Webdiensten ziemlich gut, daher denke ich, dass der Webdienst eine fragwürdige WSDL zurücksendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X