none
WCF Declarativo da erro mas o imperativo roda RRS feed

  • Pergunta

  • Prezados(a);

       Meu primeiro estudo de WCF e ao montar de forma imperativa rodou mas de forma declarativa não. O erro é :

     "Service 'FWData.DataService' 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."

     Veja como estou instanciando o host:

      using (ServiceHost host = new ServiceHost(typeof(DataService), new Uri[] {}))
                {
                    host.Open();
                    Console.ReadLine();
                }

    Meu aruivo .config esta assim:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="FWData.DataService" behaviorConfiguration="ServiceConfig">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:1012"/>
              </baseAddresses>
            </host>
            <endpoint address="fw"
                      binding="basicHttpBinding"
                      contract="FWData.IDataService"/>
            <endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange"/>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="ServiceConfig">
              <serviceMetadata httpGetBinding="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>

       A classe DataService (com meus DataMember) é onde meu serviço implementa a minha interface IDataService (ServiceContract, OperationContract)

       Já quebrei a cabeça e realmente não veja diferença para o meu mode imperativo .....???

    terça-feira, 7 de fevereiro de 2012 21:47

Respostas

  •  Haviam dois problemas:

      1- Estrutura do .config - Veja a estrutura correta:

      <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service name="FWData.DataService">
            <endpoint address="" binding="basicHttpBinding" contract="FWData.IDataService">
              <identity>
                <dns value="localhost" />
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8732/" />
              </baseAddresses>
            </host>
          </service>
        </services>
      </system.serviceModel>
    </configuration>

       2 - Instanciar o serviço - Vejo o correto:

      using (ServiceHost host = new ServiceHost(typeof(FWData.DataService)))
          {
                     host.Open();   .........

    quarta-feira, 15 de fevereiro de 2012 21:17

Todas as Respostas

  • Bom dia Marcos, tudo bem?

    Coisas que voce pode tentar.

    - Ao criar a instancia do ServiceHost, retire o segundo parametro  new Uri[] {}

    - Verifique o fullname do seu contrato do serviço. Ele deve ser o mesmo no atributo contract do endpoint

    Voce mencionou que a classe DataService(com data member) é onde esta implementado o contrato. Voce poderia postar como esta essa classe (pode omitir o corpo das operações, mostranto somente as assinaturas e atributos que voce usa para decorar)?

    Espero ter ajudado.


    Daniel Torres Coding is fun :)

    quinta-feira, 9 de fevereiro de 2012 11:26
  • Olá Daniel, antes de mais nada gostaria de agradecer sua atenção!

      Retirei o parâmetro como de sua sugestão e também verifiquei o full name, mas parece tudo correto. Segue a estrutura de minhas classes conforme solicitado:

    namespace FWData
    {
        public class DataService: Conexao , IDataService
        {
            [DataMember]
            public string sql { get; set; }

            [DataMember]
            public string nomeTabela { get; set; }

            [DataMember]
            public DataSet dataSet { get; set; }

                
            public void CarregarDados()
            {
                Carregar(dataSet, nomeTabela, sql);
            }

            public void AtualizarDados()
            {
                Atualiza(dataSet, nomeTabela);
            }
        }
    }


    namespace FWData
    {
        [ServiceContract]
        public interface IDataService
        {
            [OperationContract]
            void CarregarDados();

            [OperationContract]
            void AtualizarDados();
        }
    }

    sábado, 11 de fevereiro de 2012 13:05
  •  

       Gente, só para constar. Eu havia renomeado o arquivo .config, ao retornar com o nome dele para App.config a classe que instancia o serviço passou a reconhece-la, mas agora esta criticando minha estrutura do .config. Pelo que pude perceber é algo relacionado a parametrização de arquivos .config. Veja o erro atual:

       Configuration binding extension 'system.serviceModel/bindings/true' could not be found. Verify that this binding extension is properly registered in system.serviceModel/extensions/bindingExtensions and that it is spelled correctly.

    terça-feira, 14 de fevereiro de 2012 22:27
  •  Haviam dois problemas:

      1- Estrutura do .config - Veja a estrutura correta:

      <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service name="FWData.DataService">
            <endpoint address="" binding="basicHttpBinding" contract="FWData.IDataService">
              <identity>
                <dns value="localhost" />
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8732/" />
              </baseAddresses>
            </host>
          </service>
        </services>
      </system.serviceModel>
    </configuration>

       2 - Instanciar o serviço - Vejo o correto:

      using (ServiceHost host = new ServiceHost(typeof(FWData.DataService)))
          {
                     host.Open();   .........

    quarta-feira, 15 de fevereiro de 2012 21:17