Usuário com melhor resposta
WCF + Silverlight

Pergunta
-
Pessoal, Vejam se é possivel me ajudar.
Tenho a seguinte estrutura:
1 Servidor rodando um site em silverlight;
1 Servidor rodando um serviço WCF;
Estou com o seguinte problema:
Quando eu acesso a aplicação pelo servidor (http://localhost/aplicacao) tudo funciona normalmente.
Quando acesso a aplicação por uma maquina cliente (http://servidor/aplicacao) a comunicação com o servidor WCF não funciona.
Se eu coloco a aplicação e o serviço no mesmo servidor tudo funciona normalmente, inclusive acessando das maquinas cliente.
Alguma sugestão?
Obrigado.
MCP, MCTS 2.0 Web Applications, MCTS 3.5 ASP.NET
Respostas
-
Olá , Eduardo
Você já tentou?
<?xml version="1.0" encoding="utf-8" ?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="*"> <domain uri="http://*"/> <domain uri="https://*"/> </allow-from> <grant-to> <resource include-subpaths="true" path="/"/> </grant-to> </policy> </cross-domain-access> </access-policy>
http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx
http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx
Américo Arvani MCP/MCTS - WEB- Marcado como Resposta Eduardo Costa sexta-feira, 19 de fevereiro de 2010 13:47
-
Você já tentou depurar o problema por partes, verificar se no servidor IIS está configurado para rodar a aplicação corretamente , se não tem nenhum firewal dificultando o acesso , a maquina (usuario) que você está tentando acessar tem permissão para ter esse acesso?
Tente alterar o endpoint
na linha
<identity> <dns value="localhost" /> </identity>
para
<identity> <dns value="187.17.80.74" /> </identity>
http://msdn.microsoft.com/en-us/library/ms733130.aspx
Américo Arvani MCP/MCTS - WEB- Marcado como Resposta Eduardo Costa sexta-feira, 19 de fevereiro de 2010 16:25
Todas as Respostas
-
Se você está criando o client com o construtor sem parâmetros, então verifique se no arquivo ServiceReferences.ClientConfig do projeto silverlight o endpoint usado.
O arquivo deve ser parecido com esse:configuration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_IService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> <security mode="None" /> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost/Service.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService" contract="Persistencia_ServiceReference.IService" name="BasicHttpBinding_IService" /> </client> </system.serviceModel> </configuration>
Provavelmente você deve alterar o endpoint para de "localhost" para "servidor".
Espero ter ajudado. -
-
Oi Fernando,
No caso onde eu digo cliente, é acessar a aplicação(site) de uma maquina que não seja o servidor.
MCP, MCTS 2.0 Web Applications, MCTS 3.5 ASP.NET
Acho que acabei não explicando direito:
Quando você abre a aplicação silverlight no browser, ela é "baixada" para a máquina cliente e quando procura-se pelo serviço usando o endpoint dado(http://localhost/aplicacao), ele vai procurar o serviço em localhost, ou seja na máquina cliente, o que no seu caso não é verdade.
Por isso há necessidade de trocar o endpoint com o endereço do servidor, de preferência antes de publicar para evitar mexer dentro do arquivo .xap, porque a aplicação usa os endpoints como se estivesse na máquina cliente.
Já tive esse problema uma vez, por isso acho que esse é o seu problema também. -
-
Se eu coloco a aplicação e o serviço no mesmo servidor tudo funciona normalmente, inclusive acessando das maquinas cliente.
O problema pode ser a falta do arquivo clientaccesspolicy.xml ou crossdomain.xml para definir as politicas de acesso a dados.
Na documentação do MSDN existe uma página que explica sobre isso. Espero que seja útil.
No blog do Israel Aece também tem informações que podem ser úteis.- Editado Fernando Rodrigues da Costa sexta-feira, 15 de janeiro de 2010 18:25 adicionado segundo link
-
-
Boas Eduardo,
Você precisa seguir o esquema que está aqui: http://msdn.microsoft.com/en-us/library/cc838250(VS.95).aspx#crossdomain_communication
Qual a mensagem detalhada do erro?
http://www.israelaece.com -
Reativando...
a mensagem de erro é a seguinte:
An error occurred while trying to make a request to URI 'http://187.17.80.74/Services/ProtocoloService.svc'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute. Please see the inner exception for more details.
O serviço esta rodando nesse endereço 187.17.80.74 e o site está em outro servidor com outro IP.
Ja coloquei os arquivos clientaccesspolicy.xml e crossdomain.xml no servidor 187.17.80.74
Alguma sugestão?
MCP, MCTS 2.0 Web Applications, MCTS 3.5 ASP.NET -
-
Segue meu arquivo de config.
<system.serviceModel>
<services>
<service behaviorConfiguration="HMV.PortalMedico.Service.ProtocoloServiceBehavior"
name="HMV.PortalMedico.Service.Impl.ProtocoloService">
<endpoint address="" binding="basicHttpBinding" contract="HMV.PortalMedico.Service.Contract.IProtocoloService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<service behaviorConfiguration="HMV.PortalMedico.Service.ProtocoloServiceBehavior"
name="HMV.PortalMedico.Service.Impl.SendEmailService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttpEndpointBinding"
contract="HMV.PortalMedico.Service.Contract.ISendEmailService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"></serviceHostingEnvironment>
<behaviors>
<serviceBehaviors>
<behavior name="HMV.PortalMedico.Service.ProtocoloServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="basicHttpEndpointBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
MCP, MCTS 2.0 Web Applications, MCTS 3.5 ASP.NET -
-
-
Boas Eduardo,
Dá uma olhada neste link: http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx
Lá tem alguns cuidados sobre o HTTPS.
http://www.israelaece.com -
Curioso é que esse arquivo deveria liberar tudo, mas não é o que parece.
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<!--Enables Silverlight 3 all methods functionality-->
<policy>
<allow-from http-methods="*">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/api" include-subpaths="true"/>
</grant-to>
</policy>
<!--Enables Silverlight 2 clients to continue to work normally -->
<policy>
<allow-from >
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/api" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
MCP, MCTS 2.0 Web Applications, MCTS 3.5 ASP.NET -
Boas Eduardo,
E tua aplicação host que hospeda a aplicação Silverlight também está sendo acessada através de HTTPS?
http://www.israelaece.com -
-
Olá , Eduardo
Você já tentou?
<?xml version="1.0" encoding="utf-8" ?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="*"> <domain uri="http://*"/> <domain uri="https://*"/> </allow-from> <grant-to> <resource include-subpaths="true" path="/"/> </grant-to> </policy> </cross-domain-access> </access-policy>
http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx
http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx
Américo Arvani MCP/MCTS - WEB- Marcado como Resposta Eduardo Costa sexta-feira, 19 de fevereiro de 2010 13:47
-
Cara, resolveu o problema em partes, ja melhorou alguma coisa.
Seguinte, consegui acessar o serviço da aplicação, porem...
Quando eu acesso a aplicação silverlight via localhost funciona que é uma beleza, mas quando eu acesso a mesma aplicação apartir de outro maquina utilizando o endereço por exemplo abc.com.br não vai, só vai com localhost.
O que pode ser?
Valeu a ajuda ai
MCP, MCTS 2.0 Web Applications, MCTS 3.5 ASP.NET -
Ah o erro é o mesmo:
An error occurred while trying to make a request to URI 'xxx'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute. Please see the inner exception for more details.
Quando eu acesso a aplicação silverlight por "localhost" funciona, se eu acesso 127.0.0.1 ja não funciona.
MCP, MCTS 2.0 Web Applications, MCTS 3.5 ASP.NET -
Você já tentou depurar o problema por partes, verificar se no servidor IIS está configurado para rodar a aplicação corretamente , se não tem nenhum firewal dificultando o acesso , a maquina (usuario) que você está tentando acessar tem permissão para ter esse acesso?
Tente alterar o endpoint
na linha
<identity> <dns value="localhost" /> </identity>
para
<identity> <dns value="187.17.80.74" /> </identity>
http://msdn.microsoft.com/en-us/library/ms733130.aspx
Américo Arvani MCP/MCTS - WEB- Marcado como Resposta Eduardo Costa sexta-feira, 19 de fevereiro de 2010 16:25
-
Certamente tem alguma coisa que não estou conseguindo verificar. A principio não teria problema de rede bloqueando o acesso. Fiz a troca do identity no endpoint e não adiantou.
É bem estranho isso pois estou na maquina onde publiquei a aplicação silverlight, quando acesso ela via http://localhost funciona normal, quando acesso http://127.0.0.1 não funciona, se tento em outras maquinas com o ip dela http://10.0.1.27 tambem nao funciona, apenas localhost, e o silverlight funciona normalmente, o erro da na hora de se comunicar com o WCF
MCP, MCTS 2.0 Web Applications, MCTS 3.5 ASP.NET -
Tente retirar as clausulas de segurança no EndPoint
<bindings>
<wsHttpBinding>
<binding name="basicHttpEndpointBinding">
<security>
<message clientCredentialType="None" />
</security>
</binding >
</wsHttpBinding>
</bindings>
Américo Arvani MCP/MCTS - WEB -