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.

感謝

0voto

FrankyHollywood Punkte 1199

Die "Wiederverwendung von Typen" ist nicht immer das Problem, wenn dieser Fehler auftritt.

Wenn Sie einen Verweis auf einen älteren Dienst hinzufügen, klicken Sie auf "Erweitert" und dort auf "Webverweis hinzufügen". Verknüpfen Sie nun mit Ihrer WSDL und alles sollte funktionieren.

0voto

popiandro Punkte 167

Wenn Sie dies korrigieren möchten, ohne das Kontrollkästchen für die Wiederverwendung der Baugruppe zu deaktivieren, hat dies bei mir funktioniert:

  • Entfernen Sie die referenzierte Baugruppe, die Sie wiederverwenden möchten
  • Löschen Sie den gesamten Bin-Ordner des Projekts
  • Dienstreferenz aktualisieren
    • Behalten Sie "Typen in angegebenen referenzierten Baugruppen wiederverwenden"
  • Fügen Sie den Verweis auf die Baugruppe erneut hinzu, um die Fehler zu beheben
  • Dienstreferenz erneut aktualisieren

-1voto

Shahin Dohan Punkte 5128

Ich hatte dieses Problem, als ich versuchte, meine Dienstreferenz zu aktualisieren (der Fehler tritt nur auf, wenn ich eine Dienstreferenz hinzufüge), aber ich wollte das Kontrollkästchen für die Wiederverwendung der Baugruppe nicht entfernen.

Bei mir hat das Folgende funktioniert:

  • Entfernen der referenzierten Baugruppe, die ich wiederverwenden möchte
  • Dienstreferenz aktualisieren
  • Behalten Sie "Typen in angegebenen referenzierten Baugruppen wiederverwenden"
  • Ignorieren Sie die Fehler, denn es fehlt der Verweis!
  • Fügen Sie den Verweis auf die Baugruppe erneut hinzu, um die Fehler zu beheben
  • Dienstreferenz erneut aktualisieren

Voilà, jetzt wird es tatsächlich aktualisiert und versucht nicht mehr, meinen gesamten generierten Code zu entfernen.

Ich war schon fast bereit, die Funktion der Wiederverwendung von Typen aufzugeben...

EDIT : Stellen Sie auch sicher, dass die Build-Konfiguration AnyCPU oder x86 ist, da svcutil mit x64 fehlerhaft ist.

An den Downvoter: Es tut mir leid, wenn es bei Ihnen nicht funktioniert hat, ich weiß nicht einmal, warum es bei mir funktioniert hat, aber es hat funktioniert. Vielleicht habe ich damals etwas anderes gemacht, das das Problem behoben hat, aber das kann ich jetzt nicht mehr wissen.

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