Usuário com melhor resposta
Recuperar um tipo via WCF

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
Respostas
-
Prezados,
Consegui resolver através da proposta em:
- Marcado como Resposta J. Alexandre segunda-feira, 3 de junho de 2013 18:11
Todas as Respostas
-
-
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
-
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/ -
-
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/ -
-
-
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/ -
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.
-
-
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
-
Prezados,
Consegui resolver através da proposta em:
- Marcado como Resposta J. Alexandre segunda-feira, 3 de junho de 2013 18:11