2013-01-24 11 views
5

Próbuję uzyskać dostęp do usługi SOAP hostowanej na serwerze przy użyciu mojej przeglądarki Chrome w oknie 7. Przetestowałem tę samą usługę i mydło w SOAPUI i otrzymałem odpowiedź, a także w Androidzie używając icesoap i otrzymałem właściwą odpowiedź od serwera. Teraz chcę uzyskać odpowiedź w przeglądarce z następującym kodem napisanym w skrypcie java, aby wykonać same, tak, że można realizować dalej, a to daje mi niezdefiniowany błąd z IE xmlHttp.status == 0Żądanie SOAP JavaScript w przeglądarce nie daje odpowiedzi

Poniższy kod użyłem i zapisać jako plik HTML w oknie pulpitu (c:/Users/Vipin .sahu.OM/Pulpit/Nowy folder/soap.html) i uruchomić go w przeglądarce

<html> 
<head> 
    <title>SOAP JavaScript Client Test</title> 
    <script type="text/javascript"> 
     function soap() { 
     var xmlhttp = new XMLHttpRequest();    
     xmlhttp.open("POST", "http://65.17.222.114/t2green/servicecontract/Courses.svc?wsdl", true); 
     xmlhttp.setRequestHeader("SOAPAction", "http://tempuri.org/ICourses/GetCountries"); 
     // build SOAP request 
     var sr ='<?xml version="1.0" encoding="utf-8"?>' + 
      '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">'+ 
      '<soapenv:Header/>'+ 
      '<soapenv:Body>'+ 
      '<tem:GetCountries>'+ 
      '</tem:GetCountries>'+ 
      '</soapenv:Body>'+ 
      '</soapenv:Envelope>'; 

     xmlhttp.onerror = function(e) { 
     alert("Error ocurred. Error = " + e.message); 
     } 

     xmlhttp.ontimeout = function(e) { 
     alert("Timeout error!"); 
     } 

     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4) { 
       if (xmlHttp.status == 200 || xmlHttp.status == 0) { 

       alert(xmlhttp.status); 

        } 
        else{ 
        alert(xmlhttp.status); 
        } 
       } 
       else{ 
       alert('error in response'); 
      } 

      } 

     xmlhttp.setRequestHeader("Content-Length", sr.length); 
     xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); 

     xmlhttp.send(sr); 


     } 
</script> 
    <script type="text/javascript"> 
    function test(){   
    alert('ok alert is still working'); 
    } 
</script> 
</head> 
<body> 
     <form name="Demo" action="" method="post"> 
    <div> 
    <input type="button" value="Click Me" onclick="test()" />  
    <input type="button" value="Soap" onclick="soap()" /> 
    </div> 
    </form> 
    </body> 
    <html> 


Here are following url and action I used in android and getting requisite response 

URL "http://65.17.222.114/t2green/servicecontract/courses.svc"

Soap_action "http://tempuri.org/ICourses/GetCountries"

Zapytanie -

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <tem:GetCountries/> 
    </soapenv:Body> 
    </soapenv:Envelope> 
+0

Czy pracujesz z sesji uwierzytelnienia na IceSoap? (sory na pytanie) –

Odpowiedz

1

Jest to najprawdopodobniej spowodowane tą samą polityką pochodzenia, którą stosuje Chrome. Oznacza to, że nie można wysyłać żądań z lokalnego (file: //) adresu URL do zdalnej usługi internetowej.

Użyj flagę --allow-file-access-from-files wiersza polecenia przy uruchamianiu Chrome, aby usunąć to ograniczenie, zgodnie z opisem w tej odpowiedzi: https://stackoverflow.com/a/6083677/1972476

+0

Jeśli to zrobisz, ale nie możesz zapewnić, że twoi klienci to robią. Byłoby lepiej wywołać usługę z twojego serwera i wysłać odpowiedź z powrotem do twojego javascript. –

+0

dzięki .yup jak mogę przetestować to ... czy jest jakiś serwer do tego. –

+0

Wyobrażam sobie, że klienci nie będą mieli tylko pliku lokalnego, jak w tym scenariuszu (rozwój). Będziesz musiał go hostować za pomocą serwera WWW (Apache, lighttpd), w którym adres URL pasuje do tych samych ograniczeń zasad pochodzenia dla adresu URL usługi internetowej (może to być problem z zakodowanym adresem IP) –

Powiązane problemy