Pergunta

É possível fazer uma chamada cross-site, em Javascript, para um serviço WCF?

Eu não me importo se é um POST ou GET.

Mas ouvi dizer que estes dias, os navegadores não permitem chamadas cross-site com POST ou GET.

Como posso contornar isso e ainda chamar um serviço WCF ?

Foi útil?

Solução

Não há um lote inteiro que você pode fazer para contornar cross-site scripting bloqueadores do navegador. Esses bloqueadores parar XMLHTTPRequest do aconteça a qualquer domínio, mas aquele que carregou o roteiro contendo ou página.

Dito isto, há uma solução alternativa comumente usados: Use JavaScript para escrever uma nova entrada no DOM que faz referência a um src que é um URL cross-site. Você vai passar todos os argumentos seu método RPC a este "script" que irá retornar algum JavaScript que será executado, dizendo-lhe sucesso ou fracasso.

Não há nenhuma maneira de fazer um post desta forma, o URL src deve ser um GET, para que possa passar argumentos dessa forma. Eu não tenho certeza se WCF tem um "GET apenas" método de acesso. E, desde que o navegador irá esperar o resultado do tag remoto para ser um objeto JavaScript válido, você tem que ter certeza de que seus WCF obedece serviço que tão bem, caso contrário, você terá erros de JavaScript.

Outro método comum de contornar cross-site scripting é escrever um proxy para os seus pedidos. Em outras palavras, se você quiser domínio acesso test.com a partir de scripts hospedados em example.com, em seguida, fazer algum URL em example.com que proxies a solicitação até test.com da maneira adequada.

Para o seu exemplo, o proxy é provavelmente a resposta certa, assumindo que WCF não tem o seu próprio restrições cross-site scripting.

Outras dicas

Você está usando jQuery, por acaso? jQuery suporta solicitações entre domínios JSON usando "JSONP". Você será limitado a solicitações GET, mas eu tentei sair e ele funciona bem! Também é muito simples para começar a trabalhar.

Veja a "getJSON entre domínios (usando JSONP)" seção nesta página para obter detalhes: http://docs.jquery.com/Release:jQuery_1.2/Ajax

E aqui está algumas informações sobre JSONP: http://bob.pythonmac.org/archives/2005 / 12/05 / remote-json-jsonp /

Deixe-me saber como ele vai!

recomendações New W3C estão sendo padronizadas para permitir solicitações de cross-site entre partes confiáveis ??através do Acesso controle para especificação de Pedidos Cross-site .

Isto requer um servidor servindo adequado Access Control cabeçalhos HTTP e um navegador capaz de compreender e agir sobre esses cabeçalhos.

Em suma, se um host remoto diz que gosta do seu domínio, e um navegador entende que isso significa, você pode executar XMLHttpRequests contra esse acolhimento, independentemente da política de mesma origem.

Atualmente muito poucos os navegadores suportam esta funcionalidade. IE8 aparentemente faz (eu não testei) e Firefox 3.1 não (Eu testei isso extensivamente). Espero que outros navegadores a seguir o exemplo muito rapidamente.

Você não deve esperar adoção suficiente de navegadores compatíveis até 2012, no mínimo.

Essa é a solução definitiva para o problema. A desvantagem é de esperar alguns anos antes de ele pode ser usado em aplicações tradicionais.

Se isto é para uso dentro de um ambiente que você controlar totalmente, como para uma intranet onde você pode determinar qual navegador é usado e onde você pode configurar vários servidores para emitir os cabeçalhos corretos, ele funciona perfeitamente.

Para expandir a resposta de Ben ... eu estendemos o nosso serviço WCF para suportar chamadas JSONP de jQuery usando código semelhante a este exemplo da Microsoft:

http://msdn.microsoft.com/en-us/library /cc716898.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top