问题
I have a Windows Service Solution and am trying to add a service reference to a Hermes(Opensource ebms message server) Web Service in VS2010.
I can find the Web Service using it\'s URL, but when I try and populate the Service reference I get the following errors in Visual Studio:
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
Some investigation seemed to suggest it is due to svcutil.exe not been able to build the proxys due to not having permissions to a directory (possibly c:\\windows\\temp). I have tried assigning various access permissions, but I am not really sure which user needs the permission, or if it is just a red herring.
Any ideas would be greatly appreciated.
Thanks
回答1:
Have to uncheck the Reuse types in all referenced assemblies from Configure service reference option
Check this for details
回答2:
Right click on your service reference and choose Configure Service Reference...
Then uncheck Reuse types in referenced assemblies
Click OK
, clean and rebuild your solution.
回答3:
I also encountered a similar error when trying to generate the client for a web service from an ASP .Net MVC 4.0 project using Visual Studio 2012.
The root of the problem seems to be that fact that the project from where I was trying to generate the client was referencing an assembly which in turn was dependent on another assembly that was not being referenced as well.
When "Reuse types in referenced assemblies" is enabled in the service configuration, the service generator is probably inspecting all the referenced assemblies to get a list of types that can be reused. The fact that one of the referenced assemblies is referencing another assembly which is not available is probably causing the generator to fail.
Unchecking "Reuse types in referenced assemblies" from the service configurations will solve the above problem, but there is a side effect to it. The reuse types option is there for a reason and in some cases it avoids unnecessary casting in the code consuming the service.
For example, if the service itself is built using WCF and some methods parameters inside it are of type System.Guid, they will be translated to strings in the generated client if the reuse types option is disabled.
An alternative that I prefer to disabling reusing types is to add the service reference from Class Library project specifically created for that purpose. The one thing to keep in mind is to copy all the service related configurations from the class library's app.config to the configuration file of the startup project.
If there are types defined in local assemblies that need to be reused in the service client, those assemblies simply need to be referenced from the above mentioned class library project, along with all their dependencies.
回答4:
http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647
Thanks to the article above.
In my case, i have this issue with my WPF project in VS.Net 2008. After going through this article, i was realizing that the assembly used in the web service is different version of assembly used on client.
It works just fine after updating the assembly on the client.
回答5:
It would be extremely difficult to guess the problem since it is due to a an error in the WSDL and without examining the WSDL, I cannot comment much more. So if you can share your WSDL, please do so.
All I can say is that there seems to be a missing schema in the WSDL (with the target namespace 'http://service.ebms.edi.cecid.hku.hk/'). I know about issues and different handling of the schema when include instructions are ignored.
Generally I have found Microsoft's implementation of web services pretty good so I think the web service is sending back dodgy WSDL.
回答6:
I get the same error in Silverlight 5 (VS2012)
You can also remove the references to:
- System.ServiceModel.DomainServices.Client
- System.ServiceModel.DomainServices.Client.Web
After you've updated the service references, be sure to add them back in.
回答7:
As stated above, there are a couple of different problems possible. What we found is that the .DLL for the WCF library had been added as a reference to the client project. This, in turn, created problems with resolving the objects and thus caused the files to be "emptied" by code generation steps. While unchecking the use "Reuse Types..." can seem like an answer, it creates extra definitions of object types, which are proxies to the real types, in a new name space, which then causes all kinds of "compatibility" issues with the use of those types. Only if you really want to "hide" a type should you check this option.
Hiding the type would be appropriate when you don't want a "DLL" type dependency to "leak" into a project that you are trying to keep segregated from another. If the DLL for the WCF library project creeps into the client project references, then you will have this problem with all kinds of strange side effects since the type definitions are also in the DLL.
回答8:
face same issue, resolved by running Visual Studio in Admin mode
回答9:
I have encountered this problem when upgrading a VS2010 WCF+Silverlight solution in VS2015 Professional. Besides automatically upgrading from Silverlight 4 to Silverlight 5, the service reference reuse checkbox value was changed and generation failed.
回答10:
"Reuse types" is not always the problem when this error occurs.
When adding a reference to an older service, click 'advanced' and there 'Add Web Reference'. Now link to your wsdl and everything should be working.
回答11:
I had this problem when trying to update my service reference (The error only shows up when adding a service reference though) but didn't want to remove the assembly reuse checkbox.
What worked for me was the following:
- Remove referenced assembly that I wanted to re-use
- Update service reference
- Keep "Reuse types in specified referenced assemblies"
- Ignore the errors, it's because the reference is missing!
- Add reference to assembly again to fix the errors
- Update service reference again
Voila, now it actually updates and doesn't try to remove all of my generated code anymore.
I was almost ready to give up on the re-use types feature...
回答12:
If you want to correct this without uncheking the assembly reuse checkbox this is what worked for me:
- Remove referenced assembly that you want to re-use
- Delete all the bin folder of the project
- Update service reference
- Keep "Reuse types in specified referenced assemblies"
- Add reference to assembly again to fix the errors
- Update service reference again
回答13:
Restarting Visual Studio did the trick for me. I am using VS 2015.
来源:https://stackoverflow.com/questions/3977560/service-reference-error-failed-to-generate-code-for-the-service-reference