Eu tenho uma solução de serviço do Windows e estou tentando adicionar uma referência de serviço a um serviço da Web Hermes (servidor de mensagens de fonte aberta ebms) no VS2010.
Posso encontrar o serviço Web usando sua URL, mas quando tento preencher a referência de serviço, obtenho os seguintes erros no 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
Alguma investigação pareceu sugerir que o svcutil.exe não foi capaz de criar os proxys por não ter permissões para um diretório (possivelmente c: \ windows \ temp). Tentei atribuir várias permissões de acesso, mas não tenho certeza de qual usuário precisa da permissão ou se é apenas um arenque vermelho.
Qualquer idéia seria muito apreciada.
obrigado
fonte
Clique com o botão direito do mouse na referência de serviço e escolha
Configure Service Reference...
Em seguida, desmarque
Reuse types in referenced assemblies
Clique
OK
, limpe e reconstrua sua solução.fonte
Também encontrei um erro semelhante ao tentar gerar o cliente para um serviço da Web a partir de um projeto ASP .Net MVC 4.0 usando o Visual Studio 2012.
A raiz do problema parece ser o fato de que o projeto de onde eu estava tentando gerar o cliente fazia referência a um assembly, que por sua vez dependia de outro assembly que não estava sendo referenciado também.
Quando "Reutilizar tipos em montagens referenciadas" está ativado na configuração do serviço, o gerador de serviços provavelmente está inspecionando todas as montagens referenciadas para obter uma lista dos tipos que podem ser reutilizados. O fato de um dos conjuntos referenciados referenciar outro conjunto que não está disponível provavelmente está causando uma falha no gerador.
Desmarcar "Reutilizar tipos em montagens referenciadas" nas configurações de serviço resolverá o problema acima , mas há um efeito colateral nele. A opção de tipos de reutilização existe por um motivo e, em alguns casos, evita a transmissão desnecessária no código que consome o serviço.
Por exemplo, se o serviço em si for criado usando o WCF e alguns parâmetros de métodos contidos nele forem do tipo System.Guid, eles serão convertidos em seqüências de caracteres no cliente gerado se a opção de tipos de reutilização estiver desabilitada.
Uma alternativa que eu prefiro desativar tipos de reutilização é adicionar a referência de serviço do projeto da Biblioteca de Classes criado especificamente para esse fim. O único aspecto a ter em mente é copiar todas as configurações relacionadas ao serviço do app.config da biblioteca de classes para o arquivo de configuração do projeto de inicialização.
Se houver tipos definidos em assemblies locais que precisam ser reutilizados no cliente de serviço, esses assemblies simplesmente precisam ser referenciados no projeto da biblioteca de classes acima mencionado, juntamente com todas as suas dependências.
fonte
http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647
Graças ao artigo acima.
No meu caso, eu tenho esse problema com meu projeto WPF no VS.Net 2008. Depois de ler este artigo, percebi que o assembly usado no serviço da Web é uma versão diferente do assembly usado no cliente.
Funciona muito bem depois de atualizar a montagem no cliente.
fonte
Seria extremamente difícil adivinhar o problema, pois é devido a um erro no WSDL e, sem examinar o WSDL, não posso comentar muito mais. Portanto, se você pode compartilhar seu WSDL, faça-o.
Tudo o que posso dizer é que parece haver um esquema ausente no WSDL (com o namespace de destino 'http://service.ebms.edi.cecid.hku.hk/'). Conheço problemas e manipulação diferente do esquema quando as instruções de inclusão são ignoradas.
Geralmente, eu acho a implementação de serviços da Web muito boa pela Microsoft, então acho que o serviço está enviando WSDL desonesto.
fonte
Eu recebo o mesmo erro no Silverlight 5 (VS2012)
Você também pode remover as referências a:
Depois de atualizar as referências de serviço, adicione-as novamente.
fonte
Como afirmado acima, existem alguns problemas diferentes possíveis. O que descobrimos é que o .DLL da biblioteca WCF foi adicionado como uma referência ao projeto do cliente. Isso, por sua vez, criou problemas com a resolução dos objetos e, assim, fez com que os arquivos fossem "esvaziados" pelas etapas de geração de código. Embora desmarcar o uso de "Reutilização de tipos ..." possa parecer uma resposta, ele cria definições extras de tipos de objetos, que são proxies dos tipos reais, em um novo espaço de nome, que causa todos os tipos de problemas de "compatibilidade" com o uso desses tipos. Somente se você realmente deseja "ocultar" um tipo deve marcar esta opção.
Ocultar o tipo seria apropriado quando você não deseja que uma dependência do tipo "DLL" seja "vazada" em um projeto que você está tentando manter segregado de outro. Se a DLL do projeto de biblioteca do WCF se infiltrar nas referências do projeto do cliente, você terá esse problema com todos os tipos de efeitos colaterais estranhos, pois as definições de tipo também estão na DLL.
fonte
enfrentar o mesmo problema, resolvido executando o Visual Studio no modo de administrador
fonte
Encontrei esse problema ao atualizar uma solução VS2010 WCF + Silverlight no VS2015 Professional . Além de atualizar automaticamente do Silverlight 4 para o Silverlight 5, o valor da caixa de seleção de reutilização de referência de serviço foi alterado e a geração falhou.
fonte
"Tipos de reutilização" nem sempre é o problema quando esse erro ocorre.
Ao adicionar uma referência a um serviço mais antigo, clique em 'avançado' e clique em 'Adicionar referência da Web'. Agora, link para seu wsdl e tudo deve estar funcionando.
fonte
Se você deseja corrigir isso sem desmarcar a caixa de seleção de reutilização de montagem, é isso que funcionou para mim:
fonte
Reiniciar o Visual Studio fez o truque para mim. Estou usando o VS 2015.
fonte
Eu tive esse problema ao tentar atualizar minha referência de serviço (o erro aparece apenas ao adicionar uma referência de serviço), mas não queria remover a caixa de seleção de reutilização de montagem.
O que funcionou para mim foi o seguinte:
Agora, ele atualiza e não tenta mais remover todo o meu código gerado.
Eu estava quase pronto para desistir do recurso de tipos de reutilização ...
EDIT: Certifique-se também de que a configuração da compilação seja AnyCPU ou x86, pois svcutil está com bugs com x64.
Para o downvoter: desculpe se não funcionou para você, eu nem sei por que funcionou para mim, mas funcionou. Eu posso ter feito outra coisa naquele tempo que resolveu o problema, mas não há como saber agora.
fonte