jQuery Call to WebService retorna erro “Sem transporte”

Eu tenho o seguinte serviço da web;

[WebMethod] public string HelloWorld() { return "Hello World"; } 

É padrão de estoque sem alterações para os decoradores de class.

Eu tenho esse método jQuery;

 var webMethod = "http://localhost:54473/Service1.asmx/HelloWorld"; $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", data: "{}", dataType: "json", url: webMethod, success: function(msg){ alert(msg.d); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); } }); 

É uma ação de postagem porque, mais tarde, preciso postar dados nela.

Quando executo o jQuery, recebo um erro “Sem transporte”.

Uma coisa que eu também devo mencionar é que o jQuery é armazenado em um arquivo HTML simples na minha máquina e o WebService está rodando na minha máquina também.

Não há código por trás na página HTML, é simplesmente uma página da web e não um projeto de CA nem nada.

Alguém pode por favor me apontar na direção certa aqui?

Se a sua página do jQuery não está sendo carregada de http://localhost:54473 então este problema é provavelmente porque você está tentando fazer uma solicitação de domínio cruzado.

Atualização 1 Dê uma olhada nesta postagem do blog .

Atualização 2 Se este é realmente o problema (e eu suspeito que seja), você pode querer verificar JSONP como uma solução. Aqui estão alguns links que podem ajudar você a começar:

Adicione isto: jQuery.support.cors = true;

Ele habilita o cross-site scripting no jQuery (introduzido após 1.4x, acredito).

Nós estávamos usando uma versão muito antiga do jQuery (1.3.2) e trocamos por 1.6.1. Tudo estava funcionando, exceto as chamadas .ajax (). Adicionando a linha acima resolveu o problema.

Eu tive o mesmo erro em uma página e adicionei estas linhas:

  

e finalmente funciona para mim;) não há mais erro no IE9.

Nenhuma das respostas propostas funcionou completamente para mim. Meu caso de uso é um pouco diferente (fazer um ajax para um arquivo S3 .json no IE9). Definindo jQuery.support.cors = true; me livrei do erro No Transport mas ainda estava recebendo erros de Permission denied .

O que funcionou para mim foi usar o jQuery-ajaxTransport-XDomainRequest para forçar o IE9 a usar o XDomainRequest. Usar isto não requer a configuração de jQuery.support.cors = true;

Eu o resolvo usando dataType = ‘jsonp’ no lugar de dataType = ‘json’

Eu também tenho esse problema e todas as soluções dadas acima falharam ou não foram aplicáveis ​​devido a restrições do serviço web do cliente.

Para isso, adicionei um iframe na minha página que residia no servidor do cliente. Então, quando publicamos nossos dados no iframe e no iframe, publicamos no webservice. Por isso, a referência entre domínios é eliminada.

Adicionamos uma verificação de origem bidirecional para confirmar apenas os dados das postagens de páginas autorizadas no e para o iframe.

Espero que ajude

  //send data to iframe var hiddenFrame = document.getElementById('receiver').contentWindow; hiddenFrame.postMessage(JSON.stringify(message), 'https://client-server-url'); //The iframe receives the data using the code: window.onload = function () { var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; var eventer = window[eventMethod]; var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; eventer(messageEvent, function (e) { var origin = e.origin; //if origin not in pre-defined list, break and return var messageFromParent = JSON.parse(e.data); var json = messageFromParent.data; //send json to web service using AJAX //return the response back to source e.source.postMessage(JSON.stringify(aJAXResponse), e.origin); }, false); } 

Eu resolvi isso simplesmente removendo o domínio do URL de solicitação.

 Before: https://some.domain.com/_vti_bin/service.svc After: /_vti_bin/service.svc