Recentemente, criei um serviço WCF (dll) e um host de serviço (exe). Sei que meu serviço WCF está funcionando corretamente, pois consigo adicionar o serviço ao WcfTestClient com êxito.
No entanto, pareço estar tendo um problema ao usar meu WCF de um host de serviço (exe). Posso adicionar uma referência ao WCF (dll) ao meu host de serviço (exe) e criar os componentes necessários para o exe; como o instalador do serviço, o host do serviço e o app.config, compile e, por fim, instale o exe usando o InstallUtil. Mas, quando tentei iniciar o serviço no Console de Gerenciamento Microsoft, o serviço parou imediatamente após ser iniciado.
Então, comecei a investigar o que exatamente poderia estar causando esse problema e encontrei esse erro no Log do aplicativo no Visualizador de eventos.
Descrição:
O serviço não pode ser iniciado. System.InvalidOperationException: Service 'Service' tem nenhum ponto de extremidade de aplicativo (não infra-estrutura). Isso pode ser porque nenhum arquivo de configuração foi localizado para seu aplicativo, ou porque nenhum elemento de serviço correspondente ao nome do serviço pôde ser localizado no arquivo de configuração, ou porque nenhum terminal foi definido no elemento de serviço.
Na verdade, esse erro é gerado no OnStart
; do meu exe, quando faço esta chamada ServiceHost.Open()
. Já vi várias postagens em que outras pessoas se depararam com esse problema, porém a maioria, senão todos, afirmam que o nome do serviço ou contrato; namespace e nome de classe, não estão sendo especificados. Eu verifiquei essas duas entradas em meu arquivo de configuração; tanto no exe quanto no dll, e eles combinam PERFEITAMENTE. Pedi a outras pessoas no escritório que verificassem atrás de mim para ter certeza de que eu não estava ficando cego em algum momento, mas é claro que eles chegaram à mesma conclusão que eu de que tudo parecia estar especificado corretamente. Estou realmente perdido quanto ao que está acontecendo neste ponto. Alguém poderia me ajudar com esse problema?
Outra coisa que surgiu como uma possível razão para isso estar acontecendo é que o app.config nunca está sendo lido; pelo menos não aquele que eu acho que deveria ser lido. Seria este o problema? Em caso afirmativo, como posso resolver esse problema. Novamente, qualquer ajuda seria apreciada.
fonte
Respostas:
Acabei de ter esse problema e resolvi-o adicionando o namespace ao nome do serviço, por exemplo
passou a ser
Eu também vi isso resolvido com um Web.config em vez de um App.config.
fonte
O endpoint também deve ter o namespace:
fonte
Uma coisa a se pensar é: você tem seu WCF completamente desacoplado do WindowsService (WS)? Um WS é doloroso porque você não tem muito controle ou visibilidade para eles. Tento mitigar isso tendo todas as minhas coisas não WS em suas próprias classes para que possam ser testadas independentemente do WS host. Usar essa abordagem pode ajudá-lo a eliminar qualquer coisa que esteja acontecendo com o tempo de execução do WS em comparação com seu serviço em particular.
John provavelmente está correto ao dizer que é um problema de arquivo .config. O WCF sempre procurará o contexto de execução .config . Portanto, se você estiver hospedando seu WCF em contextos de execução diferentes (ou seja, teste com um aplicativo de console e implante com um WS), você precisa ter certeza de que os dados de configuração do WCF foram movidos para o arquivo .config adequado. Mas a questão subjacente para mim é que você não sabe qual é o problema porque a gosma WS atrapalha. Se você ainda não refatorou para que possa executar seu serviço em qualquer contexto (ou seja, teste de unidade ou console), então eu sugiro fazer isso. Se você acelerou seu serviço em um teste de unidade, provavelmente falharia da mesma maneira que você está vendo com o WS, que é muito mais fácil de depurar do que tentar fazer com o encanamento WS nojento.
fonte
Basta copiar o arquivo App.config do projeto de serviço para o aplicativo host do console, colar aqui e excluí-lo do projeto de serviço.
fonte
Recebi uma exceção mais detalhada quando adicionei programaticamente -
AddServiceEndpoint
:fonte
Preparar a configuração para o WCF é difícil e, às vezes, uma definição de tipo de serviço passa despercebida.
Escrevi apenas o namespace na etiqueta de serviço, então recebi o mesmo erro.
Não se esqueça, a etiqueta de serviço precisa de um nome de classe de serviço totalmente qualificado.
Para as outras pessoas que são como eu.
fonte
TechResponse
), mas o meu é escrever apenas o namespace (ServiceNameSpace
).Hoje me deparei com o mesmo problema, postando aqui meu erro e correção dele para que possa ajudar alguém.
Durante a reestruturação do código, eu realmente mudei os nomes da classe Service e IService e mudei ServiceHost para apontar para este novo nome de classe Service (conforme mostrado no trecho de código), mas em meus aplicativos de host App.Config arquivo eu ainda estava usando o antigo nome de classe Service . (consulte o campo do nome da seção de configuração no snippet abaixo)
Aqui está o snippet de código,
e no arquivo App.config na seção services eu estava me referindo ao nome da classe de serviço antiga, alterando-o para New ServiceClassName corrigiu o problema para mim.
fonte
Eu tive o mesmo problema. Tudo funciona no VS2010, mas quando executo o mesmo projeto no VS2008 recebo a exceção mencionada.
O que fiz em meu projeto VS2008 para fazê-lo funcionar foi adicionar uma chamada ao
AddServiceEndpoint
membro do meu objeto ServiceHost.Aqui está meu snippet de código:
Eu não modifiquei o arquivo app.config. Mas acho que o ponto de extremidade do serviço também poderia ter sido adicionado ao arquivo .config.
fonte
Acabei de resolver esse problema no meu serviço. Aqui está o erro que estava recebendo:
Aqui estão as duas etapas que usei para corrigir isso:
Use o nome de classe totalmente qualificado correto:
Habilite um endpoint com mexHttpBinding e, o mais importante, use o contrato IMetadataExchange:
fonte
Esse erro ocorrerá se o arquivo de configuração do aplicativo de hospedagem de seu serviço WCF não tiver a configuração adequada.
Lembre-se deste comentário da configuração:
Se você tiver um serviço WCF hospedado no IIS, durante o tempo de execução via VS.NET, ele lerá o app.config do projeto de biblioteca de serviço, mas lerá o web.config do host uma vez implantado. Se o web.config não tiver a
<system.serviceModel>
configuração idêntica, você receberá este erro. Certifique-se de copiar a configuração do app.config assim que for aperfeiçoada.fonte
Acabei de encontrar esse problema e verifiquei todas as respostas acima para ter certeza de que não estava perdendo nada óbvio. Bem, eu tive um problema semi-óbvio. Minha capitalização de meu nome de classe no código e o nome de classe que usei no arquivo de configuração não correspondem.
Por exemplo: se o nome da classe for CalculatorService e o arquivo de configuração se referir a Calculatorservice ... você obterá este erro.
fonte
Executei o Visual Studio no modo Administrador e funcionou para mim :) Além disso, certifique-se de que o arquivo app.config que você está usando para escrever a configuração do WCF deve estar no projeto em que a classe "ServiceHost" é usada, e não no serviço WCF real projeto.
fonte
Meu problema foi quando renomei minha classe Service1 padrão para o arquivo .svc com um nome mais significativo, o que fazia com que web.config behaviorConfiguration e endpoint correspondessem à antiga convenção de nomenclatura. Tente corrigir seu web.config.
fonte
Algo crucial a ser lembrado para aqueles que trabalham com um aplicativo de console para hospedar o serviço WCF é que o arquivo Web.config no projeto WCF é completamente ignorado. Se sua
system.serviceModel
configuração estiver lá, você precisará mover essa seção de configuração para App.config de seu projeto de console.Isso é um acréscimo às respostas sobre como garantir que o namespace seja especificado nos lugares corretos.
fonte
Como outra pista, isso de fato resolveu esse problema no meu caso.
Estou migrando alguns serviços WCF de um aplicativo de console (que configura em código alguns serviços WCF) para um Azure WebRole para publicá-los no Azure. Cada vez que adiciono um novo serviço, o VS edita meu web.config e adiciona esta linha:
Bem, com todos os conselhos e respostas acima, não consegui fazer funcionar até que removesse todos os atributos no elemento serviceHostingEnvironment. Como você pode ver, não sou um rockstar WCF, mas fiz para funcionar com o primeiro serviço configurando-o como:
mas quando adicionei o segundo serviço ele parou de funcionar e percebi que aqueles atributos estavam lá novamente.
Espero que você economize tempo.
fonte
Eu tive este erro em um serviço do Windows quando minha biblioteca de serviços WCF que criei não estava conectada para hospedagem, mas estava conectada para conexão. Eu estava perdendo um ponto final. (Eu queria tanto a conexão quanto a hospedagem em meu serviço do Windows para poder servir o serviço WCF a outras conexões, bem como fazer com que o processo principal do meu serviço do Windows o usasse para realizar várias tarefas em um cronômetro / programação.)
A correção foi que eu cliquei com o botão direito em meu arquivo App.config e escolhi Editar configuração do WCF. Em seguida, executei as etapas de Criar serviço para que pudesse me conectar ao meu serviço WCF. Agora eu tinha dois pontos de extremidade em meu App.config, não apenas um. Um ponto de extremidade era para a conexão com a Biblioteca de Serviços WCF e outro para a hospedagem dela.
fonte