<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Distant Early Blogging</title><link>http://blogs.msdn.com/robj/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Localized Javascript Resources with MVC</title><link>http://blogs.msdn.com/robj/archive/2009/03/12/localized-javascript-resources-with-mvc.aspx</link><pubDate>Thu, 12 Mar 2009 09:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9471377</guid><dc:creator>RobJ</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/robj/comments/9471377.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robj/commentrss.aspx?PostID=9471377</wfw:commentRss><wfw:comment>http://blogs.msdn.com/robj/rsscomments.aspx?PostID=9471377</wfw:comment><description>We needed to have a handful of localized strings available to javascript. A simple but effective approach we're taking with asp.net mvc is adding a route such as this: &lt;BR&gt;&lt;PRE&gt;routes.MapRoute("ScriptResources", "res/resources.js", new { controller = "System", action = "ScriptResources" });
&lt;/PRE&gt;&lt;BR&gt;The controller simply calls View("Resources") and the View creates a simple json object like this &lt;BR&gt;&lt;PRE&gt;ForumsRes = 
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; prompt_clearAbuseReason: &amp;lt;%= AntiXss.JavaScriptEncode(Resource.prompt_clearAbuseReason) %&amp;gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; prompt_deleteReason: &amp;lt;%= AntiXss.JavaScriptEncode(Resource.prompt_deleteReason) %&amp;gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; prompt_pageExit: &amp;lt;%= AntiXss.JavaScriptEncode(Resource.prompt_pageExit) %&amp;gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; prompt_reportAbuseReason: &amp;lt;%= AntiXss.JavaScriptEncode(Resource.prompt_reportAbuseReason) %&amp;gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; prompt_stickyUntil: &amp;lt;%= AntiXss.JavaScriptEncode(Resource.prompt_stickyUntil) %&amp;gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; prompt_undeleteReason: &amp;lt;%= AntiXss.JavaScriptEncode(Resource.prompt_undeleteReason) %&amp;gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rte_alreadyOpen: &amp;lt;%= AntiXss.JavaScriptEncode(Resource.rte_alreadyOpen) %&amp;gt;&lt;BR&gt;}
&lt;/PRE&gt;&lt;BR&gt;The web page can include it like any other script and reference a loc string like ForumsRes.rte_alreadyOpen. Another nice thing is you can easily OutputCache this too. &lt;BR&gt;&lt;BR&gt;Simple idea, but thought it was worth sharing.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9471377" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robj/archive/tags/MVC/default.aspx">MVC</category><category domain="http://blogs.msdn.com/robj/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.msdn.com/robj/archive/tags/Localization/default.aspx">Localization</category></item><item><title>Next Generation Forums are live</title><link>http://blogs.msdn.com/robj/archive/2008/02/15/next-generation-forums-are-live.aspx</link><pubDate>Fri, 15 Feb 2008 20:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7719145</guid><dc:creator>RobJ</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/robj/comments/7719145.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robj/commentrss.aspx?PostID=7719145</wfw:commentRss><wfw:comment>http://blogs.msdn.com/robj/rsscomments.aspx?PostID=7719145</wfw:comment><description>&lt;P&gt;We've been busy the last few months&amp;nbsp;working on the next generation of Forums and Community. All of the hard work from everyone involved has paid off and the beautiful new sites are live. Sam, the dev lead for Forums, has a &lt;A href="http://blogs.msdn.com/sjarawan/archive/2008/02/14/forums-3-0-releases-today-along-with-community-platform-1-0.aspx" mce_href="http://blogs.msdn.com/sjarawan/archive/2008/02/14/forums-3-0-releases-today-along-with-community-platform-1-0.aspx"&gt;great post&lt;/A&gt; and &lt;A href="http://xpstream.winisp.net/samjarawan/msdn%20forums%20overview.wmv" mce_href="http://xpstream.winisp.net/samjarawan/msdn%20forums%20overview.wmv"&gt;video&lt;/A&gt; covering all of the features in detail. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please check them out and provide feedback, the community products can not grow and improve without your participation. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here are the direct links:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://forums.msdn.microsoft.com/" mce_href="http://forums.msdn.microsoft.com/"&gt;http://forums.msdn.microsoft.com&lt;/A&gt; 
&lt;P&gt;&lt;A href="http://forums.technet.microsoft.com/" mce_href="http://forums.technet.microsoft.com/"&gt;http://forums.technet.microsoft.com&lt;/A&gt; 
&lt;P&gt;&lt;A href="http://forums.community.microsoft.com/" mce_href="http://forums.community.microsoft.com"&gt;http://forums.community.microsoft.com&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Update, Expression forums are now live too! &lt;/P&gt;
&lt;P&gt;&lt;A href="http://forums.expression.microsoft.com/"&gt;http://forums.expression.microsoft.com&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7719145" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robj/archive/tags/Forums+Microsoft+Technet+MSDN+Community/default.aspx">Forums Microsoft Technet MSDN Community</category></item><item><title>AJAX Client Side "OnLoad" event</title><link>http://blogs.msdn.com/robj/archive/2008/02/12/ajax-client-side-onload-event.aspx</link><pubDate>Tue, 12 Feb 2008 22:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7651469</guid><dc:creator>RobJ</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/robj/comments/7651469.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robj/commentrss.aspx?PostID=7651469</wfw:commentRss><wfw:comment>http://blogs.msdn.com/robj/rsscomments.aspx?PostID=7651469</wfw:comment><description>&lt;P&gt;One of the neat things I came across while working on my current project is an ajax shortcut for hooking in to the &lt;A href="http://www.asp.net/AJAX/Documentation/Live/ClientReference/Sys/ApplicationClass/SysApplicationLoadEvent.aspx" mce_href="http://www.asp.net/AJAX/Documentation/Live/ClientReference/Sys/ApplicationClass/SysApplicationLoadEvent.aspx"&gt;Sys.Application.load&lt;/A&gt; event on the client. As it turns out you can declare simply declare a pageLoad function which AJAX will automatically call. Further details can be found &lt;A class="" href="http://asp.net/ajax/documentation/live/overview/AJAXClientEvents.aspx" mce_href="http://asp.net/ajax/documentation/live/overview/AJAXClientEvents.aspx"&gt;here&lt;/A&gt; in the AJAX documentation.&lt;/P&gt;
&lt;DIV style="COLOR: black; BACKGROUND-COLOR: white"&gt;function pageLoad(sender, args)&lt;/DIV&gt;
&lt;DIV style="COLOR: black; BACKGROUND-COLOR: white"&gt;{&lt;/DIV&gt;
&lt;DIV style="COLOR: black; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //called on Sys.Application.load&lt;BR&gt;}&lt;/DIV&gt;
&lt;DIV style="COLOR: black; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV style="COLOR: black; BACKGROUND-COLOR: white"&gt;function pageUnload(sender, args)&lt;/DIV&gt;
&lt;DIV style="COLOR: black; BACKGROUND-COLOR: white"&gt;{&lt;/DIV&gt;
&lt;DIV style="COLOR: black; BACKGROUND-COLOR: white"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //called on Sys.Application.unload&lt;BR&gt;}&lt;/DIV&gt;Note: You can also do the same for the &lt;A href="http://www.asp.net/AJAX/Documentation/Live/ClientReference/Sys/ApplicationClass/SysApplicationUnloadEvent.aspx" mce_href="http://www.asp.net/AJAX/Documentation/Live/ClientReference/Sys/ApplicationClass/SysApplicationUnloadEvent.aspx"&gt;Sys.Application.unload&lt;/A&gt; event.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7651469" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/robj/archive/tags/ASP.Net/default.aspx">ASP.Net</category></item><item><title>Cool New Microsoft Learning Site</title><link>http://blogs.msdn.com/robj/archive/2007/06/18/cool-new-microsoft-learning-site.aspx</link><pubDate>Mon, 18 Jun 2007 22:36:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3389455</guid><dc:creator>RobJ</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/robj/comments/3389455.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robj/commentrss.aspx?PostID=3389455</wfw:commentRss><wfw:comment>http://blogs.msdn.com/robj/rsscomments.aspx?PostID=3389455</wfw:comment><description>&lt;p&gt;The team I work on has just finished and released a&amp;nbsp;major upgrade of the &lt;a href="http://learning.microsoft.com"&gt;Microsoft Learning Site&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Highlights include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Totally new UI  &lt;li&gt;Enhanced filter/tag based navigation through the offerings  &lt;li&gt;RSS Feeds from stock categories as dynamic feeds based on your selected set of filters/tags  &lt;li&gt;Ajax-ified for a much nicer user experience  &lt;li&gt;More web-aligned urls so you can bookmark things much more effectively than in the past  &lt;li&gt;Multiple view and sorts  &lt;li&gt;Localized UI and Localized Offerings  &lt;li&gt;Updated My Learning to make it easier to navigate&amp;nbsp;through&amp;nbsp;and manipulate your learning items  &lt;li&gt;... and a whole bunch more!&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So check it out. Comments and suggestions are much appreciated.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3389455" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robj/archive/tags/Microsoft+Learning/default.aspx">Microsoft Learning</category></item><item><title>Why don't my Page Methods work anymore in the RTM? The answer is...</title><link>http://blogs.msdn.com/robj/archive/2007/01/24/why-don-t-my-page-methods-work-anymore-in-the-rtm.aspx</link><pubDate>Wed, 24 Jan 2007 08:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1519652</guid><dc:creator>RobJ</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/robj/comments/1519652.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robj/commentrss.aspx?PostID=1519652</wfw:commentRss><wfw:comment>http://blogs.msdn.com/robj/rsscomments.aspx?PostID=1519652</wfw:comment><description>&lt;P&gt;If you run into this problem, like I just did when updating from the RC to RTM, here is what you need to know.&amp;nbsp;You'll need to set the new "EnablePageMethods" attribute on the ScriptManager element to true. Pretty simple, but I don't think this was made obvious in the migration guide.&lt;/P&gt;
&lt;P&gt;It is in the documentation which you can find here:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://ajax.asp.net/docs/tutorials/ExposingWebServicesToAJAXTutorial.aspx" mce_href="http://ajax.asp.net/docs/tutorials/ExposingWebServicesToAJAXTutorial.aspx"&gt;http://ajax.asp.net/docs/tutorials/ExposingWebServicesToAJAXTutorial.aspx&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1519652" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/robj/archive/tags/ASP.Net/default.aspx">ASP.Net</category></item><item><title>PageMethods in ASP.Net AJAX 1.0 RC</title><link>http://blogs.msdn.com/robj/archive/2007/01/05/pagemethods-in-asp-net-ajax-1-0-rc.aspx</link><pubDate>Sat, 06 Jan 2007 02:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1418511</guid><dc:creator>RobJ</dc:creator><slash:comments>15</slash:comments><comments>http://blogs.msdn.com/robj/comments/1418511.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robj/commentrss.aspx?PostID=1418511</wfw:commentRss><wfw:comment>http://blogs.msdn.com/robj/rsscomments.aspx?PostID=1418511</wfw:comment><description>Since it was surprisingly difficult to find sample code, I decided to kick off my first post with a little bit about PageMethod's in &lt;A href="http://ajax.asp.net/" mce_href="http://ajax.asp.net/"&gt;ASP.Net AJAX 1.0 RC&lt;/A&gt;. A PageMethod is basically just a method that is exposed and callable from client script. The method must be defined as a public static and can be located in the aspx page or in the code behind (in the beta it could not be in the code behind). 
&lt;DIV style="COLOR: black; BACKGROUND-COLOR: white"&gt;public partial class _Default : System.Web.UI.Page &lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[System.Web.Services.WebMethod]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[System.Web.Script.Services.ScriptMethod]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static string ReverseString(string data)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (data == null || data.Length == 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new ArgumentNullException("data", "data param can not be null or empty string");&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char[] reversed = new char[data.Length];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0, j=data.Length- 1; i &amp;lt; data.Length; i++, j--)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reversed[i] = data[j];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return new string(reversed);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;BR&gt;&lt;/DIV&gt;&lt;BR&gt;
&lt;P&gt;To then call the method via client script you would use the PageMethods object and using the method name as defined in the page class, like PageMethods.ReverseString("some string").&lt;/P&gt;
&lt;DIV style="COLOR: black; BACKGROUND-COLOR: white"&gt;&amp;lt;body&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script type="text/javascript" language="javascript"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function ReverseString()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var control = $get("InputString");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PageMethods.ReverseString(control.value, ReverseSucceeded, ReverseFailed, control);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function ReverseSucceeded(results, ctl)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ctl.value = results;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function ReverseFailed(results, ctl)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(results.get_message());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;form id="form1" runat="server"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;asp:ScriptManager ID="ScriptManager1" runat="server" /&amp;gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;asp:TextBox ID="InputString" runat="server" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;asp:Button ID="ReverseIt" runat="server" OnClientClick="ReverseString(); return false;" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/form&amp;gt;&lt;BR&gt;&amp;lt;/body&amp;gt;&lt;/DIV&gt;
&lt;P&gt;When calling the method, the first &amp;lt;n&amp;gt; parameters in the PageMethods call match the parameters to the class method. In this case its only one parameter, the string to be reversed. Optionally, the next parameter is the callback for success, followed by the callback for failure. Then is the context data, in this case I'm just sending the input control but it can be anything.&lt;/P&gt;
&lt;P&gt;If you are curious about what happens next, here is some key info from &lt;A href="http://www.fiddlertool.com/fiddler/" mce_href="http://www.fiddlertool.com/fiddler/"&gt;Fiddler&lt;/A&gt; about the HTTP Request and Response.&lt;/P&gt;
&lt;P&gt;The request looks like this minus some of the standard http stuff:&lt;/P&gt;
&lt;DIV style="COLOR: black; BACKGROUND-COLOR: white"&gt;POST /AJAXCTPTest/Default.aspx/ReverseString HTTP/1.1&lt;BR&gt;Referer: http://localhost:36993/AJAXCTPTest/Default.aspx&lt;BR&gt;Content-Type: application/json; charset=utf-8&lt;BR&gt;Host: localhost:36993&lt;BR&gt;Content-Length: 37&lt;BR&gt;&lt;BR&gt;{"data":"See the four horsemen ride"} &lt;/DIV&gt;
&lt;P&gt;And the response:&lt;/P&gt;
&lt;DIV style="COLOR: black; BACKGROUND-COLOR: white"&gt;HTTP/1.1 200 OK&lt;BR&gt;Content-Type: application/json; charset=utf-8&lt;BR&gt;Content-Length: 28&lt;BR&gt;&lt;BR&gt;"edir nemesroh ruof eht eeS" &lt;/DIV&gt;
&lt;P&gt;As you can see, PageMethods are pretty light and extremely easy to implement. I hope this helps save the next person a few minutes of searching.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1418511" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/robj/archive/tags/ASP.Net/default.aspx">ASP.Net</category></item></channel></rss>