Using JavaScript to consume a WCF service

Suppose this is our simple WCF service which takes the name as input and returns the resulting string with Hello appended to it.

namespace HelloWorldWCFService{
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(string name);
}
}

namespace HelloWorldWCFService{
public class Service1 : IService1 {
public string GetData(string name) {
return “Hello “ + name;

}}}
It uses BasicHttpBinding.

Now this would be our JavaScript function which can consume the above WCF service.

function MyRequest() {var xmlhttp = new XMLHttpRequest();

xmlhttp.open(‘POST’, http://localhost:64833/Service1.svc’, false);xmlhttp.setRequestHeader(‘SOAPAction’, http://tempuri.org/IService1/GetData’);

xmlhttp.setRequestHeader(‘Content-Type’, ‘text/xml’);
var data = ;

data += ‘<s:Envelope xmlns:s=”http://schemas.xmlsoap.org/soap/envelope/”>&#8217;;data += ‘ <s:Body>’;

data += ‘ <GetData xmlns=”http://tempuri.org/”>&#8217;;

data += ‘ <name>Nishant</name>’;

data += ‘ </GetData>’;

data += ‘ </s:Body>’;

data += ‘</s:Envelope>’;xmlhttp.send(data);

alert(“status = “ + xmlhttp.status);alert(“status text = “ + xmlhttp.statusText);

alert(xmlhttp.responseText); 

}

Here for

xmlhttp.setRequestHeader(‘SOAPAction’, http://tempuri.org/IService1/GetData&#8217;); 

We can get the value for SOAPAction from the wsdl of the WCF service. 

Open the http://localhost:64833/Service1.svc?wsdl

Search for soapAction there.

We would find soapAction value there.

<wsdl:operation name=”GetData“>  <soap:operation
soapAction=”http://tempuri.org/IService1/GetData style=”document” />
<wsdl:input>

Hope it helps !


Author: Nishant Rana

I love working in and sharing everything about Microsoft.NET technology !

7 thoughts on “Using JavaScript to consume a WCF service”

  1. it returns a message saying “access is denied” in the below line xmlhttp.open(‘POST’, ‘http://test.svc’, false);

    … please help

    Like

  2. Hi, thank you for this excellent tutorial, I’ve tried this one and worked correctly,
    I’m trying to consume a webservice in svc like this “bool GetData(int value, out DataSet dsData);”
    As you can see, the webmethod returns a value, and the important data is sent in the out dataset, How can I obtain that info?
    Other thing… As I said before, this tuto works perfectlly but only in IE, when I try this on chrome nothing happens, Why?

    Thank You very much.

    Like

  3. hi thanks for the info…

    i tried the above method in a simple html, it works !
    however when i put it in crm 2011, it return a message saying “access is denied”…
    any clue to this…?

    leonardo vincci

    Like

  4. fyi, security restrictions on firefox prevent this code from working when trying to call cross domain. The port is part of the domain and so this code only works for port 64833.

    Like

Share your thoughts

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s