jquery wcf soap call fail

3

Anyone know i can make a jquery soap call to a wcf service?

My 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);
    }
});

My data 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>

My 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);
    }

}

I get the following error from xhr.statusText:

uncaught exception: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.statusText]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://localhost:49758/TestClient/js/script.js :: anonymous :: line 22" data: no]

Line 0

Edit #1:

My Request headers:

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

Response:

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
javascript
.net
jquery
wcf
soap
asked on Stack Overflow Jan 6, 2011 by capdragon • edited Jan 7, 2011 by capdragon

1 Answer

0

Take a look at the jQuery.ajax() API documentation. It says:

error(jqXHR, textStatus, errorThrown)

A function to be called if the request fails. The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror". When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as "Not Found" or "Internal Server Error." As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note: This handler is not called for cross-domain script and JSONP requests. This is an Ajax Event.

Your error is probably being thrown by the attempt to access statusText, it's possible that there isn't one available. Try adding the other two arguments to your code and checking their contents.

Also, which browser are you using? There are some behavioral differences in the way XmlHttpRequests are handled among the various browsers, so trying it in more than one can sometimes help in diagnosing these things.

answered on Stack Overflow Dec 12, 2011 by JamieSee

User contributions licensed under CC BY-SA 3.0