2011-01-06 6 views
3

Wer weiß, dass ich einen Jquery Soap-Anruf zu einem WCF-Dienst machen kann?jquery wcf soap call fail

Mein JQuery-Code:

$.ajax({ 
    url: "http://localhost/oseop/orderingservice.svc/HelloWorld", 
    data: $("#txtTestRequest").val(), 
    type: "POST", 
    processData: true, 
    contentType: "application/xml; charset=utf-8", 
    timeout: 10000, 
    dataType: "xml", 
    beforeSend: function (xhr) { 
     xhr.setRequestHeader("SOAPAction", "HelloWorld"); 
    }, 
    success: function (xml) { 
     console.log("Sucess"); 
     console.log(xml); 
    }, 
    error: function (xhr) { 
     console.log(xhr.statusText); 
    } 
}); 

Meine Daten in txtTextRequest:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:49720/OrderingServices/OrderingService.svc</To> 
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://temp.org/test/IOrder/HelloWorld</Action> 
    </s:Header> 
    <soap:Body> 
    <HelloWorld xmlns="http://temp.org/test/"> 
     <name>my name is earl</name> 
    </HelloWorld> 
    </soap:Body> 
</soap:Envelope> 

Mein C# -Code:

[ServiceContract(Namespace = "http://temp.org/test/")] 
public interface IOrder 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", 
       BodyStyle = WebMessageBodyStyle.Wrapped, 
       ResponseFormat = WebMessageFormat.Xml, 
       RequestFormat = WebMessageFormat.Xml)] 

    string HelloWorld(string name); 

} 
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)] 
public class OrderingService : IOrder 
{ 
    public string HelloWorld(string name) 
    { 
     return String.Format("Hello {0}", name); 
    } 

} 

ich folgende Fehlermeldung aus xhr.statusText erhalten:

abgefangene Ausnahme: [Exception ... "Komponente zurückgegeben Fehlercode: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.statusText]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" Standort: „JS Rahmen :: http://localhost:49758/TestClient/js/script.js :: anonym :: Linie 22" Daten: no]

Linie 0

Edit # 1:

Meine Anfrage Header:

OPTIONS http://localhost/oseop/orderingservice.svc/HelloWorld HTTP/1.1 
Host: localhost 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
Origin: http://localhost:49758 
Access-Control-Request-Method: POST 
Access-Control-Request-Headers: soapaction 

Antwort:

HTTP/1.1 400 Bad Request 
Server: Microsoft-IIS/7.5 
X-Powered-By: ASP.NET 
Date: Fri, 07 Jan 2011 14:00:53 GMT 
Content-Length: 0 
+0

müssen Sie die WCF-Bindungs- und Endpunktinformationen kennen, die Sie auf dem Server verwenden. Ich würde empfehlen, die Anfrage/Antwort mit einer funktionierenden .net Client-App zu verfolgen und dann diese Nutzdaten und Header zu kopieren. – alexdej

+0

Header hinzugefügt. Haben Sie danach gesucht? – capdragon

Antwort

0

einen Blick auf die Dokumentation jQuery.ajax() API nehmen. Dort heißt es:

Fehler (jqXHR, textStatus, errorThrown)

Eine Funktion, die aufgerufen werden, wenn die Anforderung fehlschlägt. Die Funktion empfängt drei Argumente: das Objekt jqXHR (in jQuery 1.4.x, XMLHttpRequest), eine Zeichenfolge, die den Typ des aufgetretenen Fehlers beschreibt, und ein optionales Ausnahmeobjekt, falls eines aufgetreten ist. Mögliche Werte für das zweite Argument (neben null) sind "timeout", "error", "abort" und "parsererror". Wenn ein HTTP-Fehler auftritt, empfängt errorThrown den Textabschnitt des HTTP-Status, z. B. "Nicht gefunden" oder "Interner Serverfehler". Ab jQuery 1.5 kann die Fehlereinstellung ein Array von Funktionen akzeptieren. Jede Funktion wird der Reihe nach aufgerufen. Hinweis: Dieser Handler wird nicht für domainübergreifende Skript- und JSONP-Anforderungen aufgerufen. Dies ist ein Ajax-Ereignis.

Ihr Fehler wird wahrscheinlich durch den Versuch ausgelöst, auf statusText zuzugreifen, es ist möglich, dass es keinen gibt. Versuchen Sie, die anderen zwei Argumente zu Ihrem Code hinzuzufügen und ihren Inhalt zu überprüfen.

Und welchen Browser benutzen Sie? Es gibt einige Verhaltensunterschiede in der Art und Weise, in der XmlHttpRequests unter den verschiedenen Browsern behandelt werden. Daher kann es manchmal helfen, diese Dinge zu diagnostizieren, wenn Sie es in mehreren Browsern versuchen.