2012-01-04 1 views
0

J'ai un simple service web WCF que j'ai essayé de connecter avec jquery et SOAP-XML (dataType: "xml") .mais quand j'envoie ma requête je reçois "BAD REQUEST" Erreur 400 "de mon serveur. ici est mon SOAP-XML:Se connecter au service Web WCF en utilisant Jquery et Soap-XML

var soapMessage = 
      '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> \ 
      <soap:Header> \ 
      <Action soap:mustUnderstand=\"1\" xmlns=\"http://schemas.microsoft.com/ws/2005/05/addressing/none\">http://tempuri.org/IService/HelloWorld</Action> \ 
      </soap:Header> \ 
      <soap:Body> \ 
      <HelloWorld xmlns="http://tempuri.org/"> \ 
      </HelloWorld> \ 
      </soap:Body> \ 
      </soap:Envelope>'; 

et ceci est mon $ .ajax:

var productServiceUrl = 'http://localhost:3523/Service.svc/HelloWorld'; 
    $.ajax({ 
       url: productServiceUrl, 
       type: "POST", 
       dataType: "xml", 
       data: soapMessage, 
       complete: endSaveProduct, 
       contentType: "text/xml; charset=\"utf-8\"", 
       async: true, 
       error: function (xhr, textStatus, errorThrown) { 
        alert(errorThrown); 

       } 

      }); 

et voici Détail de la demande et Responce (je trace ceci dans Google Chrome):

Demande Hedear

POST /Service.svc/HelloWorld HTTP/1.1 

Host: localhost:3523 

Connection: keep-alive 

Content-Length: 550 

Origin: http://localhost:3523 

X-Requested-With: XMLHttpRequest 

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.15 Safari/535.2 

Content-Type: text/xml; charset="UTF-8" 

Accept: application/xml, text/xml, */*; q=0.01 

Referer: http://localhost:3523/WcfService.htm 

Accept-Encoding: gzip,deflate,sdch 

Accept-Language: en-US,en;q=0.8 

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

et ma tête de réponse

HTTP/1.1 400 Bad Request 

    Server: ASP.NET Development Server/10.0.0.0 

    Date: Wed, 04 Jan 2012 14:56:06 GMT 

    X-AspNet-Version: 4.0.30319 

    Cache-Control: private 

    Content-Length: 0 

    Connection: Close 

Demande charge utile:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">     <soap:Header><Action soap:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IService/HelloWorld</Action>     </soap:Header><soap:Body><HelloWorld xmlns="http://tempuri.org/"></HelloWorld></soap:Body> </soap:Envelope> 

et cela si mon WCF service web:

[OperationContract] 
    [WebInvoke(Method = "POST", 
       BodyStyle = WebMessageBodyStyle.Wrapped, 
       ResponseFormat = WebMessageFormat.Xml, 
       RequestFormat = WebMessageFormat.Xml)] 
    String HelloWorld(); 
+0

J'ai essayé ceci avec le service web (.asmx) et il fonctionne correctement .mais quand je veux l'utiliser pour appeler un webservice wcf retour Mauvaise demande (400) –

Répondre

7

J'ai trouvé le chemin. J'utilise cette solution: ceci est mon interface de service Web:

public interface IService 
{ 
    [OperationContract] 
    //[WebGet(UriTemplate = "/data?id={value}", ResponseFormat = WebMessageFormat.Json)] 
    [WebGet(ResponseFormat = WebMessageFormat.Json)] 
    string GetData(int value); 

} 

c'est mon impliment de cette fonction dans le service Web:

public string GetData(int value) 
    { 
     return string.Format("You entered: {0}", value); 
    } 

et voici le script pour se connecter à WCF Web servise:

<script type="text/javascript"> 



    $(document).ready(function() { 
     var bhRequest = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">" + 
      "<s:Body>" + 
      "<GetData xmlns=\"http://tempuri.org/\">" + 
      "<value>10</value>" + 
      "</GetData>" + 
      "</s:Body>" + 
     "</s:Envelope>"; 
     $("#btnWCFBasicHttp").click(function() { 
      $.ajax({ 
       type: "POST", 
       url: "Service.svc", 
       data: bhRequest, 
       timeout: 10000, 
       contentType: "text/xml", 
       dataType: "xml", 
       beforeSend: function (xhr) { 
        xhr.setRequestHeader("SOAPAction", "http://tempuri.org/IService/GetData"); 
       }, 
       success: function (data) { 
        $(data).find("GetDataResponse").each(function() { 
         alert($(this).find("GetDataResult").text()); 
        }); 
       }, 
       error: function (xhr, status, error) { 
        alert(error); 

       } 
      }); 
     }); 
    }); 


</script> 

se souviennent de la WCF (url: "Service.svc") est proche de ma page html.

+0

Merci. Merci beaucoup. Je suis newbe avec WCF donc j'ai expérimenté avec votre code un peu. Après avoir supprimé '[WebGet (ResponseFormat = WebMessageFormat.Json)], le code fonctionnera toujours. Pourquoi ça? – franza

+0

WebMessageFormat.Json est la configuration de défaut –

Questions connexes