2013-01-24 7 views
5

Ich versuche, auf SOAP-Dienst auf dem Server mit meinem Chrome-Browser in Fenster 7 gehostet zuzugreifen. Ich habe den gleichen Service und Soap-Aktion in SOAPUI getestet und bekommen Antwort und auch in Android mit Icesoap und die richtige Antwort vom Server, Nun möchte ich die Antwort im Browser mit dem folgenden Code in Java-Skript geschrieben, um die zu tun gleich, so dass ich weiter umzusetzen, und es gibt mir nicht definiert Fehler mit dh xmlHttp.status == 0SOAP-Anfrage JavaScript im Browser keine Antwort geben

Der folgende Code I verwendet und als HTML-Datei in Fenster Desktop (c:/Users/vipin .sahu.OM/Desktop/Neuer Ordner/soap.html) und führen sie es in den Browser

<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"

Anfrage -

<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

Haben Sie mit Session-Authentification auf IceSoap arbeiten? (Sory für die Frage) –

Antwort

1

Dies ist höchstwahrscheinlich auf die gleiche Ursprungsrichtlinie von Chrome zurückzuführen. Dies bedeutet, dass Sie keine Anforderungen von einer lokalen URL (Datei: //) an den Remote-Web-Service senden können.

Verwenden Sie die --allow-file-access-from-files Befehlszeilenmarkierung, wenn Chrome starten, diese Einschränkung zu entfernen, wie es in dieser Antwort skizziert: https://stackoverflow.com/a/6083677/1972476

+0

Wenn Sie das tun, können Sie nicht sicherstellen, dass Ihre Kunden es tun. Es wäre besser, den Dienst von Ihrem Server aus aufzurufen und die Antwort an Ihr Javascript zu senden. –

+0

danke .yup wie kann ich es dann testen .. gibt es einen Server dafür. –

+0

Ich würde mir vorstellen, dass Clients nicht nur eine lokale Datei wie in diesem (Entwicklungs-) Szenario haben. Sie müssen es unter Verwendung eines Webservers (Apache, lighttpd) hosten, wobei die URL den gleichen Ursprungsrichtlinienbedingungen für die Webdienst-URL entspricht (die hartcodierte IP kann ein Problem sein). –