none
Recuperar um tipo via WCF RRS feed

  • Pergunta

  • Prezados, 

    Meu serviço WCF, nesta altura referenciado por minha classe de testes, faz a inclusão de um objeto, porém não o recupera. a mensagem de erro é:

    Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. 

    A informação passada pelo WFC CLIENT é menos elucidadora.

    Podem ajudar? Quais outras informações seriam proveitosas, colo o trecho do WEB.CONFIG abaixo - 

      <system.serviceModel>
        <services>
          <service behaviorConfiguration="WCFServicos.SrvPessoaBehavior" name="WCFServicos.SrvPessoa">
            <endpoint address="http://localhost:5655/SrvPessoa.svc" binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_SrvPessoaBehavior" contract="WCFServicos.IPessoa"  />
          </service>
        </services>
        <bindings>
          <wsHttpBinding>
            <binding name="wsHttpBinding_SrvPessoaBehavior" useDefaultWebProxy="true" maxReceivedMessageSize="2097152" maxBufferPoolSize="1024768" messageEncoding="Text" textEncoding="utf-8"  >
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
              <security mode="None">
                <transport clientCredentialType="None" />
                <message clientCredentialType="None" negotiateServiceCredential="false" establishSecurityContext="false" />
              </security>
            </binding>
          </wsHttpBinding>
        </bindings>
        <behaviors>
          <serviceBehaviors>
            <behavior name="WCFServicos.SrvPessoaBehavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
          
        </behaviors>
      </system.serviceModel>

    O arquivo APP.CONFIG do projeto de testes:

        <system.serviceModel>
            <bindings>
                <wsHttpBinding>
                    <binding name="WSHttpBinding_IPessoa">
                        <security mode="None" />
                    </binding>
                </wsHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost:5655/SrvPessoa.svc" binding="wsHttpBinding"
                    bindingConfiguration="WSHttpBinding_IPessoa" contract="SrvPessoas.IPessoa"
                    name="WSHttpBinding_IPessoa" />
            </client>
        </system.serviceModel>

    Desde já agradecido.

    J. ALEXANDRE

    segunda-feira, 15 de abril de 2013 19:47

Respostas

Todas as Respostas

  • Dar um upzinho pra ve se alguem ajuda.

    Att, Felipo Gonçalves | Microsoft Contingent Staff

    segunda-feira, 22 de abril de 2013 13:53
    Moderador
  • Prezados, 

    O problema mudou, eu consigo recuperar um tipo, mas não consigo recuperar uma lista de tipos.

    A configuração do lado do cliente é esta:

    <configuration>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IPessoa" />
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost/servicoviaoceanica/SrvPessoa.svc"
                    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPessoa"
                    contract="WCFPessoas.IPessoa" name="BasicHttpBinding_IPessoa"  />
            </client>
        </system.serviceModel>
    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>

    Já do lado do servidor:

    <configuration>

      <appSettings>
        <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
      </appSettings>
      <system.web>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5"/>
      </system.web>
      <system.serviceModel>
        
        <bindings>
          <basicHttpBinding> 
            <binding name="BasicHttpBinding_IPessoa" receiveTimeout="00:00:30" sendTimeout="00:00:30" closeTimeout="00:00:45" maxReceivedMessageSize="2147483647">
              <security mode="Transport">
                <transport clientCredentialType="Windows"></transport>
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>  
        
        <behaviors>
          
          <serviceBehaviors>
            <behavior>
              <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
              <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
              <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <protocolMapping>
            <add binding="basicHttpBinding" scheme="http" />
        </protocolMapping>    
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        <!--
            To browse web app root directory during debugging, set the value below to true.
            Set to false before deployment to avoid disclosing web app folder information.
          -->
        <directoryBrowse enabled="true"/>
      </system.webServer>

    </configuration>

    O erro apresentado no Ouput:

    Testing started:

    Total tests: 5, filtered: 1

    ResgatarListaPessoas has failed:
      Test method UnitTestProject1.PessoasTest.ResgatarListaPessoas threw exception: 
      System.ServiceModel.CommunicationException: An error occurred while receiving the HTTP response to http://localhost/servicoviaoceanica/SrvPessoa.svc. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details. ---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
      d:\Treinamento\ViaOceanica\ViaOceanica\UnitTestProject1\Service References\WCFPessoas\Reference.cs(223, 0) : UnitTestProject1.WCFPessoas.PessoaClient.ListPessoas()
      d:\Treinamento\ViaOceanica\ViaOceanica\UnitTestProject1\PessoasTest.cs(69, 0) : UnitTestProject1.PessoasTest.ResgatarListaPessoas()

    Passed: 0, Failed: 1, Ignored: 0
    Duration : 23,5513550101444

    Alguém pode ajudar?

    Desde já agradecido.

    J. ALEXANDRE

    quinta-feira, 25 de abril de 2013 18:32
  • Olá Alexandre,

    Qual o tipo de retorno para lista de pessoas ?? é um List<T> mesmo ?? ou um Array ??

    Este erro só acontece com métodos de retorno com lista ??

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    segunda-feira, 29 de abril de 2013 16:50
  • Olá, 

    Obrigado pela atenção!

    O tipo é um tipo genérico de lista: List<Pessoa> 

    Uma única pessoa eu consigo recuperar, uma lista dá o erro acima citado.

    Abçs

    segunda-feira, 29 de abril de 2013 18:04
  • Olá Alexandre,

    Desculpa a demora, vamos lá...

    Esta sua classe Pessoa deriva de alguma outra classe ?? ela sendo serializada de opt-in ou opt out ?? (http://www.c-sharpcorner.com/UploadFile/db2972/wcf-opt-in-vs-opt-out-day-8/)

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    sábado, 4 de maio de 2013 13:40
  • Olá, obrigado novamente!

    Está sendo serializada do modo Opt-In.

    E neste momento em que estou em testes ela traz da camada de negócios da aplicação 3 entidades agrupadas na lista, com 3 propriedades.

    Abçs

    sábado, 4 de maio de 2013 15:03
  • HELP! UP!
    sexta-feira, 10 de maio de 2013 16:09
  • Alexandre,

    O erro persiste (An existing connection was forcibly closed by the remote host).

    O consumo deste serviço esta sendo fechado apos a tentativa de uso, mesmo apos a exceção ??


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    terça-feira, 14 de maio de 2013 13:46
  • Não posso afirmar com toda certeza, pois o serviço está sendo chamado a partir de um projeto de testes, e quando falha não há prosseguimento.

    Há alguma coisa com as entidades envolvidas no processo.

    Pessoas e Tipos de usuários, por exemplo, tipos de usuários implementa entre suas propriedades uma lista de pessoas, e seu construtor instancia esta lista.

    Eu uso FLUENT API, Entity Framework na camada de acesso ao banco, uma camada BL, o serviço WCF e por fim a aplicação que consumirá o serviço.

    terça-feira, 14 de maio de 2013 14:05
  • Prezados, 

    Fiz um teste retornando a lista populada sem ir ao banco, adicionei os itens manualmente.

    O erro não aconteceu.

    J. ALEXANDRE

    quarta-feira, 15 de maio de 2013 15:59
  • acredito que você esteja passando pelo mesmo problema que eu

    no meu caso também consigo inserir mas não capturar os objetos pela aplicação cliente através do WCF

    também consigo capturar uma lista dos mesmos objetos populada manualmente em tempo de execução sem ir ao banco

    postei meu problema aqui

    no post eu mostro como o EntityFramework não retorna o objeto esperado, e sim um tipo derivado do tipo base e o porque do WCF não conseguir interpretar (serializar) esse objeto retornado pelo EntityFramework

    apos ler o post, da pra perceber que conseguimos inserir no banco porque passamos o objeto base que esta no contrato para o WCF, este objeto ele conhece, mas na hora de retornar uma consulta o EntityFramework muda o objeto, esse objeto o WCF não conhece, por isso o erro. Mesma coisa para a lista populada manualmente, como não passou pelo EntityFramework, os tipos não foram modificados

    • Marcado como Resposta J. Alexandre segunda-feira, 3 de junho de 2013 18:10
    • Não Marcado como Resposta J. Alexandre segunda-feira, 3 de junho de 2013 18:10
    segunda-feira, 3 de junho de 2013 05:27
    • Marcado como Resposta J. Alexandre segunda-feira, 3 de junho de 2013 18:11
    segunda-feira, 3 de junho de 2013 18:11