Salient Solutions

wrasslin ones and nones for fun and profit - Sky Sanders' Blog
Get your own ranked flair here
posts - 92, comments - 102, trackbacks - 0

Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Overview

The Microsoft ASP.NET AJAX platform, known previously as ATLAS and ASP.NET 2.0 AJAX Extensions and fully rolled into ASP.NET 3.5, offers rich functionality but in certain scenarios the the required .ASPX client page and ScriptManager control coupled with the Microsoft Ajax library may conflict with existing requirements or present unnecessary overhead.

This document will illustrate that it is possible to leverage the full power of the ASP.NET platform from client script with just a few lines of javascript code on an HTML page.

Caveats:

  1. This document will not attempt to illustrate a robust implementation of an AJAX client, only the barest minimum protocol, configuration and script for accessing ASP.NET endpoints from 'raw' JavaScript code.  The implementation details documented herein can be applied to any JavaScript framework, such as jQuery, that has an AJAX implementation.   Also, the author is currently developing a lightweight robust client script AJAX library that includes support for ASP.NET endpoints, including FormsAuthentication, to be introduced at a later date.
  2. This document will not attempt to address the very relevant issue of handling session state and ASP.net Authentication/Authorization from client script, only the mechanics of consuming the endpoints via XMLHttpRequest.  These slightly more complicated issues will be addressed in a later document.

Asynchronous JavaScript And XML - AJAX

The simplest implementation of 'AJAX' involves instantiating an XMLHttpRequest object, overriding it's onreadystatechanged event to parse the response and then calling the send method.

Listing 1:

function createXHR()
{
    var xhr;

    if (window.XMLHttpRequest)
    {
        // if browser is not IE or is IE >= 7 XMLHttpRequest
        // will be exposed in the window namespace
        xhr = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
        // if IE < 7 create via ActiveX
        xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }
    else
    {
        throw new Error("Could not create XMLHttpRequest object.");
    }
    return xhr;
}

var xhr = createXHR();

xhr.open("GET", "some web resource", true);

xhr.onreadystatechange = function()
{
    if (xhr.readyState === 4)
    {
        // xhr.responseText will always contain the
        // response content
        var responseText = xhr.responseText;

        // if the resource content-type is of an xml flavor
        // xhr.responseXML will contain a valid XML DOMDocument
        var responseXML = xhr.responseXML;
        
        // do something with response....

    }
};

xhr.send(null);

 AJAX and ASP.net XML WebServices

Consuming an ASP.net XML WebService from client script is not much more involved than the basic implementation of AJAX and has been possible since 2.0 without the necessity of AJAX Extensions.

Any XML WebService can be consumed via a simple querystring GET or form POST provided all of the arguments are of a 'simple' or value type. You may have noticed this restriction when viewing the test page for a service you have created that contained an object as a method argument. This is where the ScriptService attribute and text/json content type come into play but we will get to that in the next section.

By default the 'HttpPostLocalhost' web service protocol is enabled which allows the generation of the test page when browsing the web service endpoint from the machine it is hosted on.  This also allows any JavaScript running in the localhost domain to access the web service but fail upon deployment. This is probably not the desired result. An enabling of http protocols is required.

To make your XML service available to client script outside of the localhost domain you must enable the desired protocols in the 'system.web/webServices/protocols' configuration element.

Listing 2:

<system.web>
  <webServices>
    <protocols>
      <add name="HttpGet"/>
      <add name="HttpPost"/>
    </protocols>
  </webServices>
 < ..... >
<system.web>

Given this configuration change, you may now call any XML webservice in your project from client script via simple GET and/or POST and recieve an XML response as long as the method arguments consist entirely of simple types.

Let our example WebService be as Listing 3:

Listing 3:

using System.Web.Script.Services;
using System.Web.Services;

namespace ClientScriptServices
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ScriptService]
    public class WebService1 : WebService
    {

        [WebMethod]
        public string Echo(string input)
        {
            return input;
        }

        [WebMethod]
        public TestObj EchoTestObject(TestObj input)
        {
            return input;
        }
    }

    public class TestObj
    {
        public int Age;
        public string Name;
    }
}

Listing 4:

// GET

var xhr = createXHR();

xhr.open("GET", "WebService1.asmx/Echo?input=Hello%20World!", true);

xhr.onreadystatechange = function()
{
    if (xhr.readyState === 4)
    {
        // do something with response....
	// xhr.responseText is '<?xml version="1.0" encoding="utf-8"?>\n<string xmlns="http://tempuri.org/">Hello World!</string>' 
	// xhr.responseXML is a valid DOMDocument of responseText

    }
};

xhr.send(null);

Listing 5:

// POST

var xhr = createXHR();

xhr.open("POST", "WebService1.asmx/Echo", true);

xhr.onreadystatechange = function()
{
    if (xhr.readyState === 4)
    {
        // do something with response....
	// xhr.responseText is '<?xml version="1.0" encoding="utf-8"?>\n<string xmlns="http://tempuri.org/">Hello World!</string>' 
	// xhr.responseXML is a valid DOMDocument of responseText

    }
};
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
var postData = "input=Hello%20World!";
xhr.send(postData);

So, if your methods have simple arguments and XML is the desired result format, you have had everything you need to consume XML web services from client script since .net 2.0. While many use cases may fit these requirements/restrictions, I am quite sure that many many more use cases have either been scratched or had thier requirements mangled to fit.  And lots of JavaScript XML parsing code written to interpret the results into a JSOB (JavaScript Object). You do what you gotta do.

If the service method arguments are of a complex type the use of a SOAP envelope become a necessity. There are examples of this on the web, though most are simply examples of munging a static string literal containing the XML of the SOAP envelope. In any case, this is no longer necessary and is beyond the scope of this document.

Enter the ScriptService attribute.

AJAX and ASP.net ScriptServices and static Page methods

The ScriptService attribute is usually associated, and explained, with registering a web service with a ScriptManager control and consumption of said service via dynamically generated script imported by the MS Ajax library. There may be scenarios in which the use of an .ASPX page as a client host and/or the introduction of the MS Ajax library on the client side is not possible, permitted and/or desired.

In these cases it is useful to know that the ScriptService attribute effectively adds another HttpHandler, named RestHandler,  that is associated with the "application/json" content type that wraps the XML WebService with a JavaScriptSerializer.  When a POST with content type "application/json" is made to a service that has the ScriptService attribute the method arguments are parsed and the output formatted with the JavaScriptSerializer class. How this is done and how we can further customize the runtime behavior to suit our needs will be covered in a later document. For the moment we will simply leverage the default behavior.

Listing 6:

// JSON with simple type arguments

var xhr = createXHR();

xhr.open("POST", "WebService1.asmx/Echo", true);

xhr.onreadystatechange = function()
{
    if (xhr.readyState === 4)
    {
        // do something with response....
	// xhr.responseText is '{"d":"Hello World!"}'

    }
};
xhr.setRequestHeader("content-type", "application/json");
var postData = '{"input": "Hello World!"}';
xhr.send(postData);

Listing 7:

// JSON with complex arguments

var xhr = createXHR();

xhr.open("POST", "WebService1.asmx/EchoTestObject", true);

xhr.onreadystatechange = function()
{
    if (xhr.readyState === 4)
    {
        // do something with response....
	// xhr.responseText is ' {"d":{"__type":"ClientScriptServices.TestObj","Age":21,"Name":"Foo"}}'

    }
};
xhr.setRequestHeader("content-type", "application/json");
var postData = '{input: { Name: "Foo", Age: 21 }}';
xhr.send(postData);

The responseText a valid JSON that can be evaluated, or parsed with json2.js for example, into a valid JSOB.

The RestHandler wraps all results in a 'd' object. This is, ostensibly, to help prevent cross site scripting attacks. Unless you wish to spread MS specific kludges throughout your client script, I suggest that you unwrap the result upon reciept.

When a method argument is an object, as in Listing 7, the postData JSON needs to be shaped as the CLR object, i.e. the JavaScriptSerializer must be able to parse it into an instance of the argument type. Nullable members may be omitted. JavaScript is liberal regarding the quoting of JSON atoms. JavaScriptSerializer is not so much. You must use double quotes as shown.

I would suggest becoming familiar with and using the defacto standard for JSON manipulation, Douglas Crockford's json2.js.

The section title mentions static Page methods. "PageMethods" are methods within an .aspx code file that are static and marked with the [WebMethod] attribute.

Let our sample WebForm (Page) be as Listing 8:

Listing 8:

using System;
using System.Web.Services;
using System.Web.UI;

namespace ClientScriptServices
{
    public partial class WebForm1 : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        [WebMethod]
        public static string Echo(string input)
        {
            return input;
        }
    }
}

ASP.net AJAX also Page requests with the ScriptModule class that treats requests with a content type of "application/json" as ScriptService calls to the named PageMethod. You would typically make these methods callable by setting EnablePageMethods true on a ScriptManager control.

In the context of our scenario it is enough just to call them with code similar to Listings 6 and 7.  Unlike when using ScriptManager, when using XMLHttpRequest, you may call PageMethods on any page in the current web application/site as if they were a ScriptService.  The restriction that the method be static may somewhat limit the utility of this ability but it is listed here in the interest of thoroughness.

Listing 9:

// Static PageMethod 

var xhr = createXHR();

xhr.open("POST", "WebForm1.aspx/Echo", true);

xhr.onreadystatechange = function()
{
    if (xhr.readyState === 4)
    {
        // do something with response....
	// xhr.responseText is '{"d":"Hello World!"}'

    }
};
xhr.setRequestHeader("content-type", "application/json");
var postData = '{"input": "Hello World!"}';
xhr.send(postData);

AJAX and WCF Services

ASP.NET 3.5 introduced a new binding, webHttpBinding, that is particularly useful in our scenario.  This new binding reduces the protocol for calling a WCF service from requiring a complex WCF SOAP envelope  down to a simple ScriptService (RestHandler) call albeit with a different, more strict serializer.

Let our WCF service be as Listing 10:

Listing 10:

using System.ServiceModel;
using System.ServiceModel.Activation;

namespace ClientScriptServices
{
    [ServiceContract]
    public class Service1
    {
        [OperationContract]
        public string Echo(string input)
        {
            return input;
        }

        [OperationContract]
        public TestObj EchoTestObject(TestObj input)
        {
            return input;
        }
    }
}

We could have more easily added 'ServiceContract' and 'OperationContract' attributes to our web service class and exposed it as a WCF service as well as a web service. In the interest of clarity I have duplicated the code in a new service.

The default system.serviceModel configuration added by Visual Studio is similar to Listing 11. 

Listing 11:

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="ClientScriptServices.Service1Behavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="ClientScriptServices.Service1Behavior" name="ClientScriptServices.Service1">
      <endpoint address="" binding="wsHttpBinding" contract="ClientScriptServices.Service1">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

To leverate the webHttpBinding in the most basic way we need simply add a few configuration elements as shown in listing 12:

Listing 12:

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="AjaxEndpointBehavior">
        <!-- required for JSON POST -->
        <enableWebScript />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="ClientScriptServices.Service1Behavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="ClientScriptServices.Service1Behavior" name="ClientScriptServices.Service1">
      <endpoint address="" binding="wsHttpBinding" contract="ClientScriptServices.Service1">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      <!-- required for JSON POST -->
      <endpoint address="ajax" behaviorConfiguration="AjaxEndpointBehavior" binding="webHttpBinding" contract="ClientScriptServices.Service1" />
    </service>
  </services>
</system.serviceModel>

 

We have added 2 elements:

  1. an 'endpointBehaviors' element with a child element 'enableWebScript' to enable JSON POST calls to the service.
  2. an 'endpoint' element to the service element.

Notice the 'endpoint' attribute 'address' on both the default endpoint and our new AJAX endpoint.  The default endpoint has an empty 'address' attribute. The result of this is that a call to 'Service1.svc/Echo' will be processed with the default endpoint configuration. Our new AJAX endpoint has an 'address' value of 'ajax'. This is an arbitrary identifier that allows multiple 'endpoint' configuration elements to handle the same service. The result of this is that to call Service1 from a script we would use the URL 'Service1.svc/ajax/Echo'. If the service was to be exposed ONLY to script we could delete the default endpoint element and omit the 'address' attribute in our new AJAX endpoint element.

For clarity we will pare down the 'system.serviceModel' configuration to the barest minimum required to consume a service only from script.

Listing 13:

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="AjaxEndpointBehavior">
        <enableWebScript />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="ClientScriptServices.Service1Behavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="ClientScriptServices.Service1Behavior" name="ClientScriptServices.Service1">
      <endpoint behaviorConfiguration="AjaxEndpointBehavior" binding="webHttpBinding" contract="ClientScriptServices.Service1" />
    </service>
  </services>
</system.serviceModel> 

Calling our WCF service from script is now as simple as calling a WebService with the 'ScriptService' attribute:

Listing 14:

// JSON with simple type arguments

var xhr = createXHR();

xhr.open("POST", "Service1.svc/Echo", true);

xhr.onreadystatechange = function()
{
    if (xhr.readyState === 4)
    {
        // do something with response....
	// xhr.responseText is '{"d":"Hello World!"}'

    }
};
xhr.setRequestHeader("content-type", "application/json");

var postData = '{"input": "Hello World!"}';

xhr.send(postData);

Listing 15:

// JSON with complex arguments

var xhr = createXHR();

xhr.open("POST", "Service1.svc/EchoTestObject", true);

xhr.onreadystatechange = function()
{
    if (xhr.readyState === 4)
    {
        // do something with response....
	// xhr.responseText is '{"d":{"__type":"TestObj:#ClientScriptServices","Age":21,"Name":"Foo"}}'

    }
};
xhr.setRequestHeader("content-type", "application/json");

var postData = '{"input": { "Name": "Foo", "Age": 21 }}';
xhr.send(postData);

Warning: webHttpBinding leverages DataContractSerializer which is a bit more strict in the flavor of JSON it will consume. If you are not using a standards based library such as json2.js to construct your JSON postData you must be ensure the following points or you will run into trouble:

  1.  All keys are double quoted
  2. All non-value type values are double quoted.

Caveat: By default, the current HttpContext is not available to a WCF service. This means that the current Session and  FormsAuthentication are not available. This behaviour can be altered with the addition of the configuration element 'system.serviceModel/serviceHostingEnvironment'  and the service attribute 'AspNetCompatibilityRequirements' as show by the fragments in Listings 16 and 17. The implications and usage of this functionality will be covered in a later document.

Listing 16:

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  < ... >
</system.serviceModel>

Listing 17:

using System.ServiceModel;
using System.ServiceModel.Activation;

namespace ClientScriptServices
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceContract]
    public class Service1
    {
 	....
    }
}

Conclusion

As show in this document, leveraging the full power of the ASP.NET platform from client-side JavaScript can be as simple adding a few lines of code to an existing script obviating the requirements of an ASPX client page with a ScriptManager/MS AJAX js library.

What's Next?

Coming soon:

  • Techniques for handling Session State and FormsAuthentication from client script
  • A standalone, lightweight, robust AJAX client library fully compatible with ASP.NET endpoints with Session State and FormsAuthentication

About the author:

My name is Sky Sanders and I am an end-to-end, front-to-back software solutions architect with more than 20 years experience in IT infrastructure and software development, the last 10 years being focused primarily on the Microsoft .NET platform.

My motto is 'I solve problems.' and I am currently available for hire.  No problem too big or too small.

I can be contacted at sky.sanders@gmail.com

 


Technorati tags: , , ,

Print | posted on Saturday, August 15, 2009 11:04 AM |

Feedback

Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

You have a very good site, well constructed and very interesting i have bookmarked you hopefully you keep posting new stuff, many thanks
7/26/2010 1:44 AM | SEO Tips
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Good post....thanks for sharing.. very useful for me i will bookmark this for my future needed. thanks for a great source.
7/26/2010 1:45 AM | marketing company virginia
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

I would like to thank you for the efforts you have made in writing this article and i am hoping the same best work from you in the future as well.
7/26/2010 1:45 AM | Cabling Contractors MD
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

This is a really good read for me, Must admit that you are one of the best bloggers I ever saw.Thanks for posting this informative article.
7/26/2010 1:46 AM | Internet WiFi de alta velocidad
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

the simplest way to host your services-and the approach that yields the least number of hosting features. As the label implies, self-hosting requires you to write the code necessary to initialize the ServiceHost and manage its lifetime.
7/27/2010 4:39 PM | limousine to los angeles
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

A couple months ago, Google released a new Twitter-like service, called Buzz. We can use this service to display our latest buzzes on any site. So, in this tutorial, I’ll guide you through the process of building your own Buzz widget.
7/27/2010 5:23 PM | free classified ads
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

this blog article would like describe out about a simple AJAX implementation, especially just for beginner programmer like me ;-). AJAX technology is not a latest one in World Wide Web but it’s almost new to me. I’m not an expert but this is my first experience to AJAX and I’d like to share about it to you. Think about a job but you have to force finished it only with one tool. And this was happened to me when I had to create a web chat module written in PHP.
7/27/2010 6:04 PM | Indian Entertainment
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

We are a group of volunteers and starting a new initiative in a community. Your blog provided us valuable information to work on. You have done a marvellous job!
7/29/2010 1:23 PM | international calling
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

I have found one somewhat big problem with the implementation provided in that the stack trace doesn’t appear to be preserved from the server. I understand that this may actually be desirable depending on the amount of information that one desires to disclose to the client however I have found a hack that seems to be working for us in the meantime...
7/31/2010 1:11 AM | casino en ligne
Gravatar

# Computer & Hardware

Now this is hghly recommeded post for me. I will surely email this to my friend.
8/1/2010 5:03 AM | pc repairs specialist
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

I loved the way you exlained things. Much better many here .
8/1/2010 5:04 AM | Internet Security Solutions
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

I generally do not post in Blogs but your weblog forced me to, amazing work.. beautiful
8/1/2010 5:05 AM | custom website
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Hey, great blog...I'll add your site in my rss reader, if I can figure out how to get it to work...LOL
8/1/2010 5:06 AM | Link Building Services India
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

"Very interesting post. I really enjoy the reading. Thanks for sharing."
8/1/2010 5:07 AM | SEO experts India
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

I've surfed the net more than three hours today, however, I haven't found such useful information. Thanks a lot, it is really useful to me.
8/16/2010 10:40 PM | Flex development India
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

You got a really useful blog I have been here reading for about an hour. I am a newbie and your success is very much an inspiration for me.
8/16/2010 10:47 PM | Software Development India
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Thanks a lot for enjoying this beauty article with me. I am apreciating it very much!.
8/16/2010 10:47 PM | Email Marketing
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Happy to have found this post.Thanks for such a great post and the review, I am totally impressed! Keep
stuff like this coming.
8/16/2010 10:48 PM | Miami Web Design
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

I really love the way information presented in your post. I have added to you in my social bookmark…and i am w8ing ur next post.
8/16/2010 10:49 PM | Ecommerce Web Design
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

I recently came across your blog and have been reading along. I thought I would leave my first comment. I don't know what to say except that I have enjoyed reading. Nice blog. I will keep visiting this blog very often.
8/20/2010 1:28 AM | Affinity Dental Dentist
Gravatar

# Send Free SMS to any mobile in India

Bilaroo.com: Register & collect Bilaroo Coins & Win Lowest and Unique bid with our daily auctions, Free Online mobile recharge & Send Free SMS to any mobile in India.
8/20/2010 8:00 AM | weekly
Gravatar

# Bilaroo

mobile recharge site, Lowest and unique bid, Win prizes gifts online India..
8/20/2010 8:02 AM | Bilaroo
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

The search engines all point to a post that doesn’t answer the question. It’s also a frequent question raised on the ASP.NET message boards, typically without a satisfactory answer provided.
8/22/2010 6:55 PM | bonus casinos online
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

was searching on the web for the same thing, found..but couldn’t figure out how to run..I did have problems with this so plz solve my problem..
8/22/2010 10:36 PM | Online Generic Propecia
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

I would appreciate if you could suggest your readers to check out VedoMedia. We have seo experts, internet marketing gurus, and super affiliates on our team and we know how to get your business and site some traffic.
8/22/2010 10:50 PM | Joe Rodeo
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

These are one of the few posts that I actually care to comment on. I find this blogger an inspiration and is definitley worth following. I've became a subscriber too, so please keep me updated.
8/22/2010 10:51 PM | Glasperlen
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Couldnt be written any better. Reading this post reminds me of my old room mate! He always kept talking about this. I will forward this article to him. Pretty sure he will have a good read. Thanks for sharing!
8/22/2010 11:48 PM | Cufflinks
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Really appreciate this post. It’s hard to sort the good from the bad sometimes, but I think you’ve nailed it!
8/24/2010 11:26 PM | IT Infrastructure management
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Great tutorial! Thanks so much for sharing this.
8/25/2010 1:58 AM | IT Outsourcing
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

I was very pleased to find this site. I wanted to thank you for this great read!! I definitely enjoyed every little bit of it and I have you bookmarked to check out new stuff you post.
8/25/2010 7:25 PM | Point of Sale Systems
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Nice article, I am a big time fan of your site, keep up the nice work, and I will be a frequent visitor for a very long time.
8/25/2010 7:26 PM | Financial Affiliate Network
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Thank you for another great article. Where else could anyone get that kind of information in such a perfect way of writing? I have a presentation next week, and I am on a look out for such information.
8/25/2010 9:29 PM | Non Destructive Material Testing
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Very significant article for us ,I think the representation of this article is actually superb one. This is my first visit to your site.
8/25/2010 10:44 PM | Milestone Search
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Valuable information and excellent design you got here! I would like to thank you for sharing your thoughts into the stuff you post!! Thumbs up
8/25/2010 10:45 PM | IT Employment
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

This is a great blog posting and very useful. I really appreciate the research you put into it...
8/25/2010 10:46 PM | Milestone Search
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

So far, I managed to go though only some of the posts you have here, but I find them very interesting and informative. Just want say thank you for the information you have shared.
8/25/2010 10:46 PM | Sales Recruitment
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Definitely a great post. Hats off to you! The information that you have provided is very helpful.
8/25/2010 10:47 PM | Milestone Search
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Easy option to get useful information and to share your ideas.
8/26/2010 6:57 PM | Mobile Prepaid
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

I just read through the entire article of yours and it was quite good. This is a great article thanks for sharing this information. I will visit your blog regularly for some latest post.
8/26/2010 6:58 PM | Mac Accessories
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

I recently came across your blog and have been reading along. I thought I would leave my first comment. I don't know what to say except that I have enjoyed reading. Nice blog. I will keep visiting.
8/26/2010 7:00 PM | iPhone anti glare films
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Nice to be visiting your blog again, it has been months for me. I need this article to complete my assignment in college. Thanks.
8/26/2010 7:12 PM | Electronic Cigarettes
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

ASP.NET is more easier than other development technologies and languages. While working on asp.net platform, you may access to system windows event log. Using System namespace you retrieve messages. ASP.NET is more easier than other development technologies and languages
8/27/2010 10:50 PM | beste online casinos
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I will be subscribing to your feed and I hope you post again soon.
8/30/2010 7:17 PM | Discount Coupons
Gravatar

# re: Consuming ASP.net WebServices, WCF Services and static Page methods from JavaScript (sans MS AJAX)

Search Engine Optimization
9/1/2010 10:15 AM | Search Engine Optimization

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 3 and 2 and type the answer here:

Powered by: