none
Exceção: Service has zero application (non-infrastructure) endpoints RRS feed

  • Pergunta

  • Boa tarde,

    Estou desenvolvendo meu primeiro serviço WCF e recebi a seguinte exceção ao iniciar o serviço de forma declarativa:

    "Service 'WCF.Servicos.ServicosAGSPe' has zero application (non-infrastructure) endpoints. This might be because no configuration file was found for your application, or because no service element matching the service name could be found in the configuration file, or because no endpoints were defined in the service element."

    Ao pesquisar na internet, obtive algumas dicas como:

    • Na instancia do ServiceHost, retirar o segundo parâmetro  new Uri[] {}.
    • No arquivo de configuração, atribuir o fullname de Serviço e Contrato
    • Renomear o arquivo App.config para Web.config

    Tentei esses passos porem o erro persiste.

    Abaixo as estruturas de minhas classes:

    namespace ObjTransferencia

    {

        [DataContract]

        public class Usuario

        {

            [DataMember]

            public int IDUsuario { get; set; }

            [DataMember]

            public string Nome { get; set; }

            [DataMember]

            public string Login { get; set; }

            [DataMember]

            public string Senha { get; set; }

            [DataMember]

            public bool Ativo { get; set; }

        }

    }

    namespace WCF.Contratos

    {

        [ServiceContract]

        public interface IAgsPe

        {

            [OperationContract]

            string InserirUsuario(Usuario usuario);

            [OperationContract]

            string AlterarUsuario(Usuario usuario);

            [OperationContract]

            string ExcluirUsuario(Usuario usuario);

            [OperationContract]

            List<Usuario> ConsultarUsuario(string strNome, string strLogin);

            [OperationContract]

            Usuario EfetuarLogin(Usuario usuario);

        }

    }

    namespace WCF.Servicos

    {

        public class ServicosAGSPe : IAgsPe

        {

            NegUsuario negUsuario = new NegUsuario();

            public string InserirUsuario(Usuario usuario)

            {

                return negUsuario.Inserir(usuario);

            }

            public string AlterarUsuario(Usuario usuario)

            {

                return negUsuario.Alterar(usuario);

            }

            public string ExcluirUsuario(Usuario usuario)

            {

                return negUsuario.Excluir(usuario);

            }

            public List<Usuario> ConsultarUsuario(string strNome, string strLogin)

            {

                return negUsuario.Consultar(strNome, strLogin);

            }

        }

    }

    Abaixo meu arquivo de configuração:

    <?xml version="1.0" encoding="utf-8" ?>

    <configuration>

      <system.serviceModel>

        <services>

          <service behaviorConfiguration="ServiceConfig" name="WCF.Servicos.ServicosAGSPe">

            <endpoint address="srv" binding="netTcpBinding" contract="WCF.Contratos.IAgsPe"/>

            <endpoint address="srv" binding="basicHttpBinding" contract="WCF.Contratos.IAgsPe" />

            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchenge" />

            <host>

              <baseAddresses>

                <add baseAddress="net.tcp://localhost:9876" />

                <add baseAddress="http://localhost:8766" />

              </baseAddresses>

            </host>

          </service>

        </services>

        <behaviors>

          <serviceBehaviors>

            <behavior name="ServiceConfig">

              <serviceMetadata httpGetEnabled="true"/>

            </behavior>

          </serviceBehaviors>

        </behaviors>

      </system.serviceModel>

    </configuration>

    Instancia do serviço:

    using (ServiceHost objHost = new ServiceHost(typeof(ServicosAGSPe)))

                {

                    objHost.Open();

                }

    Alguém saberia o que posso estar fazendo de errado? :/

    Até mais pessoal ;) Obrigado.

    domingo, 7 de julho de 2013 18:14

Todas as Respostas

  • Olá Adner,

    Realmente muito estranho, rodei o seu código acima e funcionou 100%.

    Notei alguns erros no código citado acima:

    O contrato do endpoint necessário para expor o wsdl esta com o nome errado, mude de IMetadataExchenge para IMetadataExchange.

    Faltou implementar uma das assinaturas do contrato, em especifico "EfetuarLogin".

    Faça um teste (debug) e veja qual o FullName que retorna para a classe que implementa o contrato e valide se é a mesma utilizada como nome dos serviço <service name="?" />

    typeof(ServicosAGSPe).FullName
    E por ultimo, de uma olhada no arquivo .config gerado na sua aplicação dentro da pasta \bin (geralmente é *.exe.config) e se as informações do mesmo estão idênticas ao configurado.

    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)


    • Editado Vitor Mendes segunda-feira, 8 de julho de 2013 01:15 português
    segunda-feira, 8 de julho de 2013 01:15
  • Boa noite Vitor,

    Primeiramente gostaria de agradecer o apoio, em questão do contrato alterei para IMetadataExchange conforme alertado, a assinatura  do contrato referente a "EfetuarLogin" é que apaguei aqui na pergunta para reduzir o tamanho e esqueci de excluir também da classe de implementações (rsr). O FullName retornado é exatamente o mesmo da tag <service name="?" />.  E o arquivo da pasta \bin é idêntico ao configurado.

    O problema aqui persiste, mas continuarei pesquisando. Caso descubra informarei o motivo =)

    Obrigado,

    Até mais, abraços


    segunda-feira, 8 de julho de 2013 01:51
  • Olá Adner,

    Teve algum progresso quanto a esta questão, até eu fiquei curioso quanto ao erro.

    Tentei simular este erro, porem só consegui quando o name da seção service estiva diferente do qual eu queria realmente, acarretando neste problema.

    Fica aqui um link que talvez te ajuda:
    http://blogs.msdn.com/b/endpoint/archive/2009/11/09/common-user-mistake-in-net-4-mistyping-the-service-configuration-name.aspx?Redirected=true

    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    quinta-feira, 11 de julho de 2013 14:15