<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Nick Randolph's .NET Travels</title><link>http://community.softteq.com/blogs/nick/default.aspx</link><description>Continually looking for the yellow brick road so I can catch me a wizard....Join me as I explore the world of cool devices, neat technology and uber geeks. I spend most of my time talking about Microsoft related technologies such as the .NET Framework, SQL Server, Windows Mobile, SQL Server Compact Edition but I also discuss the current IT industry, the movers and shakers, and trends I observe from time to time.</description><dc:language>en</dc:language><generator>CommunityServer 2007 (Build: 20416.853)</generator><image><link>http://community.softteq.com/blogs/nick</link><url>http://community.softteq.com/Themes/default/images/nick_photo.jpg</url><title>Nick Randolph</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/NickRandolphsDotNetTravels" type="application/rss+xml" /><feedburner:emailServiceId>NickRandolphsDotNetTravels</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>New Windows Mobile build with Zooming</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/xwrpoAsCebk/new-windows-mobile-build-with-zooming.aspx</link><pubDate>Sat, 07 Nov 2009 02:25:49 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1564</guid><dc:creator>nick</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1564</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/11/06/new-windows-mobile-build-with-zooming.aspx#comments</comments><description>&lt;p&gt;In my continual quest to get more performance and better experience out of my HTC Touch Pro device (given the HTC WM6.1 performs so badly) I decided to give the latest build off XDA-developers a go.&amp;#160; The following is taken from build 23504 which you can grab from the following link &lt;a title="http://forum.xda-developers.com/showthread.php?t=580429" href="http://forum.xda-developers.com/showthread.php?t=580429"&gt;http://forum.xda-developers.com/showthread.php?t=580429&lt;/a&gt;. The main reason I wanted to upgrade was not so much for the improvements to the experience (since I’ve already seen some massive improvements over the last couple of builds), it was more to get some of the performance benefits that has been touted in the latest builds.&lt;/p&gt;  &lt;p&gt;Now, unlike some of the other images available, this particular build is very vanilla in nature.&amp;#160; It doesn’t include Touch Flo 3D, so it looks for the most part like Windows Mobile 6.5. One thing I did have to do was to change the keyboard configuration to match the Touch Pro.&amp;#160; This is done with the following registry setting:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;HKLM\HARDWARE\DEVICEMAP\KEYBD\CWSLayout to 0 (then restart)&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The build does indeed appear to perform better.&amp;#160; Navigation seems to be very responsive but this may be that it doesn’t have the overhead of the TouchFlo.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now if you look at the first of the following images you will see that there is a rendering issue around the clock.&amp;#160; This only seems to be on the today screen and as you can see in the second image, if you click in the notification area you get a set of expanded icons.&amp;#160; The expanded notification bar is in full colour and has gesture support to allow you to easily scroll through the icons.&amp;#160; &lt;/p&gt;  &lt;p&gt;What caught my attention was the Zoom icon. Clicking on this zooms the current screen in (see third image).&amp;#160; This is an awesome feature of this rom image as it allows you to zoom in on nearly anything that is rendered on the screen. Better yet, you can still interact with the contents of the screen whilst zoomed in – the fourth image shows the Getting Started page which is what is loaded when you click the icon in image 3.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.softteq.com/blogs/nick/image_703942DC.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.softteq.com/blogs/nick/image_thumb_4126E138.png" width="184" height="244" /&gt;&lt;/a&gt; &lt;a href="http://community.softteq.com/blogs/nick/image_0924ED55.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.softteq.com/blogs/nick/image_thumb_25722F75.png" width="184" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.softteq.com/blogs/nick/image_304F10BD.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.softteq.com/blogs/nick/image_thumb_4D0885D2.png" width="184" height="244" /&gt;&lt;/a&gt;&lt;a href="http://community.softteq.com/blogs/nick/image_714D6A54.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.softteq.com/blogs/nick/image_thumb_79EDC2E0.png" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1564" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=xwrpoAsCebk:EsmDOo5n71k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=xwrpoAsCebk:EsmDOo5n71k:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=xwrpoAsCebk:EsmDOo5n71k:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=xwrpoAsCebk:EsmDOo5n71k:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=xwrpoAsCebk:EsmDOo5n71k:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=xwrpoAsCebk:EsmDOo5n71k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=xwrpoAsCebk:EsmDOo5n71k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/11/06/new-windows-mobile-build-with-zooming.aspx</feedburner:origLink></item><item><title>Ramp Up Your Mobile Development Skills</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/f310YLpLRT0/ramp-up-your-mobile-development-skills.aspx</link><pubDate>Sun, 01 Nov 2009 03:20:36 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1562</guid><dc:creator>nick</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1562</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/10/31/ramp-up-your-mobile-development-skills.aspx#comments</comments><description>&lt;p&gt;Looking for a quick way to get the basics of Windows Mobile development? Try the RampUp “Develop Windows Mobile 6 Applications” e-learning.&amp;#160; Whilst this focuses on Windows Mobile 6 using VS2008, a lot of the points covered actually apply to all versions of the Windows Mobile platform.&amp;#160; Topics include the following:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Level 1: Mobile Development Introduction&lt;/strong&gt;      &lt;br /&gt;&lt;strong&gt;Level 2: Device Emulators&lt;/strong&gt;      &lt;br /&gt;&lt;strong&gt;Level 3: Mobile Windows Forms Development&lt;/strong&gt;      &lt;br /&gt;&lt;strong&gt;Level 4: Advanced Mobile Windows Forms Development&lt;/strong&gt;      &lt;br /&gt;&lt;strong&gt;Level 5: SQL Server CE Introduction&lt;/strong&gt;      &lt;br /&gt;&lt;strong&gt;Level 6: Security and Deployment&lt;/strong&gt;      &lt;br /&gt;&lt;strong&gt;Level 7: Mobile Web Development&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1562" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=f310YLpLRT0:FHCw2pCWBNk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=f310YLpLRT0:FHCw2pCWBNk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=f310YLpLRT0:FHCw2pCWBNk:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=f310YLpLRT0:FHCw2pCWBNk:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=f310YLpLRT0:FHCw2pCWBNk:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=f310YLpLRT0:FHCw2pCWBNk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=f310YLpLRT0:FHCw2pCWBNk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/10/31/ramp-up-your-mobile-development-skills.aspx</feedburner:origLink></item><item><title>Office Developer Conference</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/9Pk6axGMaQ8/office-developer-conference.aspx</link><pubDate>Thu, 29 Oct 2009 02:22:10 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1561</guid><dc:creator>nick</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1561</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/10/28/office-developer-conference.aspx#comments</comments><description>&lt;p&gt;In case you hadn’t heard or had somehow forgotten, let me remind you that the Office Dev Con is on this weekend in Brisbane. Thanks to Graham and everyone else involved in making this happen – I feel honoured to be amongst the presenters.&amp;#160; Full information on sessions and the presenters is available at &lt;a href="http://www.officedevcon.com.au"&gt;http://www.officedevcon.com.au&lt;/a&gt;. Here’s my two sessions:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Title:&lt;/b&gt; Where’s my runtime? A tale of a mobile database engine.&lt;/p&gt;  &lt;p&gt;One of the challenges of building rich client applications is often storing data. Whether this be caching data to improve look up performance or data entered by the user that needs to be persisted until a data connection is available, the dilemma is always what technology should you use? With only a small amount of data the answer is often a simple XML file but as the quantity of data, or in fact the complexity of the data, grows it becomes inevitable that you will want some sort of database in which to store your data.&lt;/p&gt;  &lt;p&gt;In this session you’ll learn all about SQL Server Compact Edition (CE), a client side database technology that you can ship alongside your application. Unlike other database technologies SQL Server Compact doesn’t need to be installed and thus doesn’t require elevated privileges, making it ideal for both Office and ClickOnce applications. The session will give a brief overview of the technology, before diving into how you can use, configure, deploy and manage your databases.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Title:&lt;/b&gt; Document creation in the cloud with Windows Azure and the OpenXML SDK.&lt;/p&gt;  &lt;p&gt;Since the release of Office 2007 there has been considerable work put into the Open XML SDK. Unlike previous versions of Word that relied on interop assemblies to do automation, with the new XML-based file formats you can automate document creation as and when you need to. In fact, with the Open XML SDK there is no reliance on Word, Excel or any other Office component. This makes it particularly useful for building services on the Windows Azure platform. This session will provide an overview of Windows Azure and the Open XML SDK, as well as showing how you can easily combine the two to build high volume, scalable document automation services hosted in the cloud.&lt;/p&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1561" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=9Pk6axGMaQ8:wET98KZSnTU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=9Pk6axGMaQ8:wET98KZSnTU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=9Pk6axGMaQ8:wET98KZSnTU:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=9Pk6axGMaQ8:wET98KZSnTU:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=9Pk6axGMaQ8:wET98KZSnTU:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=9Pk6axGMaQ8:wET98KZSnTU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=9Pk6axGMaQ8:wET98KZSnTU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/10/28/office-developer-conference.aspx</feedburner:origLink></item><item><title>Good and Bad news about WCF for Windows Mobile</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/CHqgk0vWLlA/good-and-bad-news-about-wcf-for-windows-mobile.aspx</link><pubDate>Mon, 19 Oct 2009 01:01:10 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1559</guid><dc:creator>nick</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1559</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/10/18/good-and-bad-news-about-wcf-for-windows-mobile.aspx#comments</comments><description>&lt;p&gt;Given this post primarily contains a rant about WCF support within the .NET Compact Framework (ie Windows Mobile), I’ll start with the good points.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Further to a previous post on &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/07/16/wcf-on-windows-mobile-and-net-compact-framework.aspx"&gt;WCF for Windows Mobile&lt;/a&gt; the team at Microsoft have released an updated version of NetCFSvcUtil.exe that fixes the issue running under Vista SP2 and Windows 7.&amp;#160; You can download it directly from their blog post on the &lt;a title="NetCFSvcUtil QFE" href="http://blogs.msdn.com/maagniho/archive/2009/08/07/netcfsvcutil-qfe.aspx"&gt;NetCFSvcUtil QFE&lt;/a&gt; (great way to ship updates – an obscure blog that no-on.&lt;/li&gt;    &lt;li&gt;There is a great whitepaper put together by a couple of MVPs talking about using WCF from the .NET Compact Framework: &lt;a title="http://wcfguidanceformobile.codeplex.com/" href="http://wcfguidanceformobile.codeplex.com/"&gt;http://wcfguidanceformobile.codeplex.com/&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ok, so now for the bad news.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;If you’re thinking about using Basic Authentication, you can forget WCF.&amp;#160; There is no support for nearly any practical scenario for using WCF unless you want to roll out X509 certificates.&amp;#160; Honestly, whoever didn’t think that Basic Auth over SSL would be good to support…..&lt;/li&gt;    &lt;li&gt;If you want to share types between client and server, think again. It appears that the /reference and /excludeType flags don’t work as they do with svcutil.exe which means a lot of messing around if you want to share types.&lt;/li&gt;    &lt;li&gt;No built in support within Visual Studio for doing “Add Service Reference”&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you’re like me and spend most of your time in Visual Studio the last point is a real kick in the head – you mean I have to run NetCFSvcUtil from the commandline, Urgh!&amp;#160; At this point I went “forget it – too hard, too broken, not worth the pain” and went back to “Add Web Reference” (which btw works for WCF endpoints that are configured with basicHttpBinding).&amp;#160; This works well with both basic authentication and SSL so suits my scenario.&lt;/p&gt;  &lt;p&gt;Now the issue I have with “Add Web Reference” is that it does silly things with certain types.&amp;#160; For example Guids get converted to string.&amp;#160; It also means that if you have two services (eg ServiceA.svc and ServiceB.svc that use the same type (eg Customer) you will end up with multiple types created on the client (eg ServiceA.Customer and ServiceB.Customer). The solution to this lies within the References.cs file that gets generated – this file contains all the types that get created as part of creating the proxy.&amp;#160; If you remove all the additional generated classes (eg ServiceA.Customer).&amp;#160; This will of course cause compile errors because the referenced types can’t be resolve.&amp;#160; To fix this, add a reference to the assembly that contains the type and then add a using statement to the reference.cs to import the missing types.&lt;/p&gt;  &lt;p&gt;One last point - In order for this to work you will probably have to annotate your shared types with xml attributes. For example:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;[System.Xml.Serialization.XmlTypeAttribute(Namespace = &amp;quot;&lt;/em&gt;&lt;a href="http://myschemas/DataTransferObjects&amp;quot;)]"&gt;&lt;em&gt;http://myschemas/DataTransferObjects&amp;quot;)]&lt;/em&gt;&lt;/a&gt;      &lt;br /&gt;&lt;em&gt;public class Customer       &lt;br /&gt;{&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I do wish that Microsoft would do something about the dire state of affair around WCF from .NET Compact Framework, but in the meantime I’d still with Add Web Reference.&lt;/p&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1559" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=CHqgk0vWLlA:7-d-Rp9y6KQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=CHqgk0vWLlA:7-d-Rp9y6KQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=CHqgk0vWLlA:7-d-Rp9y6KQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=CHqgk0vWLlA:7-d-Rp9y6KQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=CHqgk0vWLlA:7-d-Rp9y6KQ:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=CHqgk0vWLlA:7-d-Rp9y6KQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=CHqgk0vWLlA:7-d-Rp9y6KQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/10/18/good-and-bad-news-about-wcf-for-windows-mobile.aspx</feedburner:origLink></item><item><title>Integrating Twitter into your Windows Mobile Widget</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/TjKXOM0v7uc/integrating-twitter-into-your-windows-mobile-widget.aspx</link><pubDate>Sun, 11 Oct 2009 13:36:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1554</guid><dc:creator>nick</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1554</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/10/11/integrating-twitter-into-your-windows-mobile-widget.aspx#comments</comments><description>&lt;p&gt;I guess the first question that comes to mind is why would you want to integrate twitter into your widget. Until recently I would have agreed that it seems somewhat superfluous as there is an almost infinite number of Twitter clients out there, all claiming that they are better than all that have gone before them. However, I was recently trying to add a mechanism for commenting on items within a widget I was writing.&amp;nbsp; Now I could have easily built yet another commenting system, involving the usual candidates of sql server backend, wrapped in a simple REST or SOAP service blah blah blah, but I came to the conclusion this would simply add to the overhead of managing the application, particularly since up until now the widget didn’t rely on any backend services. I figured since a lot of users would probably have Twitter accounts I could just let them use their account in order to make comments. The fact that their comments would be seen in their Twitter feed would just add some free advertising for my widget.&lt;/p&gt;
&lt;p&gt;So, having chosen Twitter to handle comments I then had to work out the best way to integrate them. If you’ve used any of the current generation of Twitter clients out there you will be familiar with having to enter your username and password into the application – this is &lt;strong&gt;bad&lt;/strong&gt; as you don’t really have any idea what else that application may be doing with your credentials. Of course, they would argue that they need to prompt for this information so that they can post on your behalf. Up until recently they would have been correct. However, Twitter now supports OAuth and in particular a permutation specifically designed to support desktop (or rich client) applications. In a nutshell this involves routing the user to Twitter, getting them to sign in there and then routing back to the calling application with a suitable authorisation token.&amp;nbsp; For the desktop permutation there is an additional step which involves copying a one-time pin from Twitter into the calling application – this is because there is no way for Twitter to redirect back to your desktop application. This process can be used for integrating Twitter into your widget.&lt;/p&gt;
&lt;p&gt;Now for the technical bits:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Registration&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need to register your application with Twitter.&amp;nbsp; This can be done at &lt;a href="http://twitter.com/oauth_clients"&gt;http://twitter.com/oauth_clients&lt;/a&gt;.&amp;nbsp; Once registered you will be given a Consumer Key and Consumer Secret that you will need to take note of for use within your widget.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Request Token&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The first step in OAuth is to get a request token.&amp;nbsp; This is done by issuing a POST to &lt;a href="http://twitter.com/oauth/request_token%22"&gt;http://twitter.com/oauth/request_token&lt;/a&gt;, supplying the consumer key you have been allocated, a timestamp and nonce value. The request also needs to contain a SHA1 signature.&lt;/li&gt;
&lt;li&gt;The return values (if successful) is a token and a token secret.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Direct User to Twitter to Sign In&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Once your widget has the request token and associated secret, you need to direct the user to Twitter.com so that they can log in and authorise your widget.&amp;nbsp; To do this, direct them to &lt;a href="http://twitter.com/oauth/authorize?oauth_token="&gt;“http://twitter.com/oauth/authorize?oauth_token=&lt;/a&gt; + Token + &amp;amp; oauth_callback=oob&amp;quot;&lt;/li&gt;
&lt;li&gt;The user will log in and then be given an authorisation pin.&amp;nbsp; They need to copy this and paste it (or type it) into your widget – you’ll need to give them a mechanism for doing this!&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 4: Access Token&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;After the user has entered the authorisation pin you need to use it, coupled with the consumer key and request token to issue a POST to &lt;a href="http://twitter.com/oauth/access_token"&gt;http://twitter.com/oauth/access_token&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;This will return an access token that you can then use to post updates to Twitter.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 5: Post Updates&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Updates are simply a POST to &lt;a href="http://twitter.com/statuses/update.json%22"&gt;http://twitter.com/statuses/update.json&lt;/a&gt; with parameters that include the access token.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Acknowledgments to John Kristian who contributed a &lt;a href="http://oauth.googlecode.com/svn/code/javascript/"&gt;Javascript Library&lt;/a&gt; for OAuth.&amp;nbsp; Other OAuth libraries are available for a variety of languages at &lt;a title="http://oauth.net/code" href="http://oauth.net/code"&gt;http://oauth.net/code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full TwitterAPI Listing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Feel free to use this code.&amp;nbsp; Note however that there is almost no error handling so that it’s easier to follow what’s going on.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;var TwitterAPI = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConsumerSecret: &amp;quot;&amp;lt;enter Consumer Secret from Twitter app registration&amp;gt;&amp;quot;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConsumerKey: &amp;quot;&amp;lt;enter Consumer Key from Twitter app registration&amp;gt;&amp;quot;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SignatureMethod: &amp;quot;HMAC-SHA1&amp;quot;, &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegisterUser: function(callback, errorcallback) { &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var accessor = { consumerSecret: TwitterAPI.ConsumerSecret &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , tokenSecret: &amp;quot;&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; var message = { action: &amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;a href="http://twitter.com/oauth/request_token%22"&gt;&lt;em&gt;&lt;font size="1"&gt;http://twitter.com/oauth/request_token&amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;/a&gt; &lt;br /&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , method: &amp;quot;POST&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , parameters: [] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_consumer_key&amp;quot;, TwitterAPI.ConsumerKey]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_signature_method&amp;quot;, TwitterAPI.SignatureMethod]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_timestamp&amp;quot;, &amp;quot;&amp;quot;]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_nonce&amp;quot;, &amp;quot;&amp;quot;]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_signature&amp;quot;, &amp;quot;&amp;quot;]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OAuth.setTimestampAndNonce(message); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OAuth.SignatureMethod.sign(message, accessor); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var parameterMap = OAuth.getParameterMap(message.parameters); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var params = TwitterAPI.buildParameters(parameterMap); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var request = WidgetAPI.createXmlHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.open(message.method, message.action, true); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.setRequestHeader(&amp;quot;Content-length&amp;quot;, params.length); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.setRequestHeader(&amp;quot;Connection&amp;quot;, &amp;quot;close&amp;quot;); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the callback &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (request.readyState == 4) { &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var params2 = request.responseText.split(&amp;quot;&amp;amp;&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i = 0; i &amp;lt; params2.length; i++) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var bits = params2[ i ].split(&amp;quot;=&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits.length == 2 &amp;amp;&amp;amp; bits[0] == &amp;quot;oauth_token&amp;quot;) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TwitterAPI.Token = bits[1]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits.length == 2 &amp;amp;&amp;amp; bits[0] == &amp;quot;oauth_token_secret&amp;quot;) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TwitterAPI.TokenSecret = bits[1]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!TwitterAPI.Token || TwitterAPI.Token == null) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (errorcallback) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; errorcallback(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; callback(); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var url = &amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;a href="http://twitter.com/oauth/authorize?oauth_token=&amp;quot;"&gt;&lt;em&gt;&lt;font size="1"&gt;http://twitter.com/oauth/authorize?oauth_token=&amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font size="1"&gt; + TwitterAPI.Token + &amp;quot;&amp;amp;oauth_callback=oob&amp;quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.open(url); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request = null; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; }; &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.send(params); &lt;br /&gt;&amp;nbsp;&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; AuthenticateUser: function(pin, callback, errorcallback) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TwitterAPI.Pin = pin; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var accessor = { consumerSecret: TwitterAPI.ConsumerSecret &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , tokenSecret: TwitterAPI.TokenSecret &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; var message = { action: &amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;a href="http://twitter.com/oauth/access_token%22"&gt;&lt;em&gt;&lt;font size="1"&gt;http://twitter.com/oauth/access_token&amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;/a&gt; &lt;br /&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , method: &amp;quot;POST&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , parameters: [] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_consumer_key&amp;quot;, TwitterAPI.ConsumerKey]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_token&amp;quot;, TwitterAPI.Token]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_signature_method&amp;quot;, TwitterAPI.SignatureMethod]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_verifier&amp;quot;, TwitterAPI.Pin]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_timestamp&amp;quot;, &amp;quot;&amp;quot;]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_nonce&amp;quot;, &amp;quot;&amp;quot;]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_signature&amp;quot;, &amp;quot;&amp;quot;]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OAuth.setTimestampAndNonce(message); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OAuth.SignatureMethod.sign(message, accessor); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var parameterMap = OAuth.getParameterMap(message.parameters); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var params = TwitterAPI.buildParameters(parameterMap); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var request = WidgetAPI.createXmlHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.open(message.method, message.action, true); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.setRequestHeader(&amp;quot;Content-length&amp;quot;, params.length); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.setRequestHeader(&amp;quot;Connection&amp;quot;, &amp;quot;close&amp;quot;); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the callback &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (request.readyState == 4) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var params2 = request.responseText.split(&amp;quot;&amp;amp;&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i = 0; i &amp;lt; params2.length; i++) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var bits = params2[ i ].split(&amp;quot;=&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits.length == 2 &amp;amp;&amp;amp; bits[0] == &amp;quot;oauth_token&amp;quot;) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TwitterAPI.Token = bits[1]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits.length == 2 &amp;amp;&amp;amp; bits[0] == &amp;quot;oauth_token_secret&amp;quot;) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TwitterAPI.TokenSecret = bits[1]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (params2&amp;lt;2 || !TwitterAPI.Token || TwitterAPI.Token == null) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; errorcallback(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; callback(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; }; &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.send(params); &lt;br /&gt;&amp;nbsp;&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; PostComment: function(comment, callback, errorcallback) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; accessor = { consumerSecret: TwitterAPI.ConsumerSecret &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , tokenSecret: TwitterAPI.TokenSecret &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; message = { action: &amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;a href="http://twitter.com/statuses/update.json%22"&gt;&lt;em&gt;&lt;font size="1"&gt;http://twitter.com/statuses/update.json&amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;/a&gt; &lt;br /&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , method: &amp;quot;POST&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , parameters: [] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_consumer_key&amp;quot;, TwitterAPI.ConsumerKey]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_token&amp;quot;, TwitterAPI.Token]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;status&amp;quot;, comment]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_version&amp;quot;, &amp;quot;1.0&amp;quot;]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_signature_method&amp;quot;, TwitterAPI.SignatureMethod]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_timestamp&amp;quot;, &amp;quot;&amp;quot;]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_nonce&amp;quot;, &amp;quot;&amp;quot;]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.parameters.push([&amp;quot;oauth_signature&amp;quot;, &amp;quot;&amp;quot;]); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; accessor.tokenSecret = TwitterAPI.TokenSecret; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OAuth.setTimestampAndNonce(message); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OAuth.SignatureMethod.sign(message, accessor); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var parameterMap = OAuth.getParameterMap(message.parameters); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message.action = &amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;a href="http://twitter.com/statuses/update.json%22;"&gt;&lt;em&gt;&lt;font size="1"&gt;http://twitter.com/statuses/update.json&amp;quot;;&lt;/font&gt;&lt;/em&gt;&lt;/a&gt; &lt;br /&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; params = TwitterAPI.buildParameters(parameterMap); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //params += &amp;quot;&amp;amp;status=test&amp;quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request = WidgetAPI.createXmlHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.open(message.method, message.action, true); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.setRequestHeader(&amp;quot;Content-length&amp;quot;, params.length); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //request.setRequestHeader(&amp;quot;Connection&amp;quot;, &amp;quot;close&amp;quot;); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the callback &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (request.readyState == 4) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; callback(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp; request.send(params); &lt;br /&gt;&amp;nbsp;&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; buildParameters: function(parameterMap) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var params = &amp;quot;&amp;quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var p in parameterMap) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (params.length &amp;gt; 0) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; params += &amp;quot;&amp;amp;&amp;quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; params += OAuth.percentEncode(p) + &amp;quot;=&amp;quot; + OAuth.percentEncode(parameterMap[p]) + &amp;quot;&amp;quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; return params; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; &lt;br /&gt;} (); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;var Url = { &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // public method for url encoding &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; encode: function(string) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return escape(this._utf8_encode(string)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }, &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // public method for url decoding &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; decode: function(string) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this._utf8_decode(unescape(string)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }, &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // private method for UTF-8 encoding &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _utf8_encode: function(string) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string = string.replace(/\r\n/g, &amp;quot;\n&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var utftext = &amp;quot;&amp;quot;; &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var n = 0; n &amp;lt; string.length; n++) { &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var c = string.charCodeAt(n); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (c &amp;lt; 128) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utftext += String.fromCharCode(c); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; else if ((c &amp;gt; 127) &amp;amp;&amp;amp; (c &amp;lt; 2048)) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utftext += String.fromCharCode((c &amp;gt;&amp;gt; 6) | 192); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utftext += String.fromCharCode((c &amp;amp; 63) | 128); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; else { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utftext += String.fromCharCode((c &amp;gt;&amp;gt; 12) | 224); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utftext += String.fromCharCode(((c &amp;gt;&amp;gt; 6) &amp;amp; 63) | 128); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utftext += String.fromCharCode((c &amp;amp; 63) | 128); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return utftext; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }, &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // private method for UTF-8 decoding &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _utf8_decode: function(utftext) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var string = &amp;quot;&amp;quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var i = 0; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var c = c1 = c2 = 0; &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (i &amp;lt; utftext.length) { &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c = utftext.charCodeAt(i); &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (c &amp;lt; 128) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string += String.fromCharCode(c); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i++; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; else if ((c &amp;gt; 191) &amp;amp;&amp;amp; (c &amp;lt; 224)) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c2 = utftext.charCodeAt(i + 1); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string += String.fromCharCode(((c &amp;amp; 31) &amp;lt;&amp;lt; 6) | (c2 &amp;amp; 63)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i += 2; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; else { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c2 = utftext.charCodeAt(i + 1); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c3 = utftext.charCodeAt(i + 2); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string += String.fromCharCode(((c &amp;amp; 15) &amp;lt;&amp;lt; 12) | ((c2 &amp;amp; 63) &amp;lt;&amp;lt; 6) | (c3 &amp;amp; 63)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i += 3; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return string; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;}&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1554" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=TjKXOM0v7uc:BMZV3cwWADs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=TjKXOM0v7uc:BMZV3cwWADs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=TjKXOM0v7uc:BMZV3cwWADs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=TjKXOM0v7uc:BMZV3cwWADs:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=TjKXOM0v7uc:BMZV3cwWADs:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=TjKXOM0v7uc:BMZV3cwWADs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=TjKXOM0v7uc:BMZV3cwWADs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/10/11/integrating-twitter-into-your-windows-mobile-widget.aspx</feedburner:origLink></item><item><title>Your Phone, My Phone, they’re all Windows Phones….</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/Y36DF6tTWUY/your-phone-my-phone-they-re-all-windows-phones.aspx</link><pubDate>Wed, 07 Oct 2009 08:11:56 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1553</guid><dc:creator>nick</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1553</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/10/07/your-phone-my-phone-they-re-all-windows-phones.aspx#comments</comments><description>&lt;p&gt;Well that should be the Microsoft chant with the simultaneous release of Windows Mobile 6.5, Marketplace and a host of complementary applications such as an updated &lt;a href="http://myphone.microsoft.com"&gt;MyPhone&lt;/a&gt; that’s available for download via Marketplace. If you’re like me, one of the cool new “premium” features of MyPhone is the ability find your lost phone.&amp;#160; Here I’m showing the “known location” feature but you can get MyPhone to ring your phone, even if it’s on vibrate.&amp;#160; I so want that feature for when I lose my phone (no pun intended….)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.softteq.com/blogs/nick/image_6A7C2A21.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.softteq.com/blogs/nick/image_thumb_69FFD15F.png" width="471" height="312" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1553" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=Y36DF6tTWUY:B9K2EegxDEU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=Y36DF6tTWUY:B9K2EegxDEU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=Y36DF6tTWUY:B9K2EegxDEU:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=Y36DF6tTWUY:B9K2EegxDEU:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=Y36DF6tTWUY:B9K2EegxDEU:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=Y36DF6tTWUY:B9K2EegxDEU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=Y36DF6tTWUY:B9K2EegxDEU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/10/07/your-phone-my-phone-they-re-all-windows-phones.aspx</feedburner:origLink></item><item><title>More Windows Mobile 6.5 builds</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/hEj0_5ffS1E/more-windows-mobile-6-5-builds.aspx</link><pubDate>Sun, 04 Oct 2009 12:12:30 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1550</guid><dc:creator>nick</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1550</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/10/04/more-windows-mobile-6-5-builds.aspx#comments</comments><description>&lt;p&gt;Well almost on the eve of the public availability of Windows Mobile 6.5 I thought I’d again post about some of the new builds that I’ve been using. Over the past week or so I’ve been running build &lt;a href="http://forum.xda-developers.com/showthread.php?t=539513"&gt;53052&lt;/a&gt; and today I’ve upgraded to build &lt;a href="http://forum.xda-developers.com/showthread.php?t=540444&amp;amp;highlight=23420"&gt;53420&lt;/a&gt;. There aren’t any huge improvements over my &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/25/new-builds-of-windows-mobile-6-5.aspx"&gt;previous post&lt;/a&gt; however the polish is really starting to show.&amp;#160; In fact over the past week or so I would confidently say that I wouldn’t consider moving away from Windows Mobile and that for my day to day life it’s easier to use than an iphone. Anyhow, here are a few screenshots showing the polish as it continues to improve:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.softteq.com/blogs/nick/image_28388D36.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.softteq.com/blogs/nick/image_thumb_029EEA08.png" width="184" height="244" /&gt;&lt;/a&gt; &lt;a href="http://community.softteq.com/blogs/nick/image_5F2245A2.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.softteq.com/blogs/nick/image_thumb_28F0A786.png" width="184" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.softteq.com/blogs/nick/image_45AA1C9B.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.softteq.com/blogs/nick/image_thumb_47976BA4.png" width="184" height="244" /&gt;&lt;/a&gt;&lt;a href="http://community.softteq.com/blogs/nick/image_764CFE79.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.softteq.com/blogs/nick/image_thumb_144B0C6E.png" width="184" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.softteq.com/blogs/nick/image_5264271F.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.softteq.com/blogs/nick/image_thumb_0E604308.png" width="184" height="244" /&gt;&lt;/a&gt; &lt;a href="http://community.softteq.com/blogs/nick/image_7D2C6564.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.softteq.com/blogs/nick/image_thumb_788634DD.png" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1550" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=hEj0_5ffS1E:XXrycQpB978:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=hEj0_5ffS1E:XXrycQpB978:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=hEj0_5ffS1E:XXrycQpB978:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=hEj0_5ffS1E:XXrycQpB978:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=hEj0_5ffS1E:XXrycQpB978:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=hEj0_5ffS1E:XXrycQpB978:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=hEj0_5ffS1E:XXrycQpB978:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/10/04/more-windows-mobile-6-5-builds.aspx</feedburner:origLink></item><item><title>Merge Replication – The Ultimate Guide</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/IYkZHTdRRWU/merge-replication-the-ultimate-guide.aspx</link><pubDate>Tue, 22 Sep 2009 22:28:54 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1549</guid><dc:creator>nick</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1549</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/09/22/merge-replication-the-ultimate-guide.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/images/0979891213/ref=dp_image_0?ie=UTF8&amp;amp;n=283155&amp;amp;s=books"&gt;&lt;img border="0" alt="Enterprise Data Synchronization with Microsoft SQL Server 2008 and SQL Server Compact 3.5 Mobile Merge Replication" src="http://ecx.images-amazon.com/images/I/41VAyPJrltL._SL500_AA240_.jpg" width="240" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.com/Enterprise-Synchronization-Microsoft-Compact-Replication/dp/0979891213/ref=ntt_at_ep_dpt_1/181-6840160-8923752"&gt;Enterprise Data Synchronization with Microsoft SQL Server 2008 and SQL Server Compact 3.5 Mobile Merge Replication&lt;/a&gt; by &lt;a href="http://blogs.msdn.com/robtiffany/"&gt;Rob Tiffany&lt;/a&gt; would have to be the ultimate guide when it comes to setting up and tuning merge replication between SQL Server and SQL Compact.&amp;#160; Starting with the basics of what and how merge replication works, Rob then drops into a great level of detail that will be sure to help you if you get stuck.&amp;#160; I would definitely have this book by my side when working with merge replication.&lt;/p&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1549" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=IYkZHTdRRWU:4LAGhdNoRq0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=IYkZHTdRRWU:4LAGhdNoRq0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=IYkZHTdRRWU:4LAGhdNoRq0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=IYkZHTdRRWU:4LAGhdNoRq0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=IYkZHTdRRWU:4LAGhdNoRq0:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=IYkZHTdRRWU:4LAGhdNoRq0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=IYkZHTdRRWU:4LAGhdNoRq0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/09/22/merge-replication-the-ultimate-guide.aspx</feedburner:origLink></item><item><title>Cloud Costing</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/w0s5gXkthi4/cloud-costing.aspx</link><pubDate>Tue, 22 Sep 2009 10:07:06 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1547</guid><dc:creator>nick</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1547</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/09/22/cloud-costing.aspx#comments</comments><description>&lt;p&gt;Following a discussion on the &lt;a href="http://www.codify.com/lists/ozazure"&gt;OzAzure mailing list&lt;/a&gt; I went off hunting for what others had put together on calculating the ROI for building or migrating to Windows Azure.&amp;#160; I’m not sure how I didn’t come across the &lt;a href="http://azureroi.cloudapp.net/"&gt;Azure ROI Calculator&lt;/a&gt; earlier in my hunt for information on Windows Azure as it is the top 10 or so links when you search for Azure ROI.&amp;#160; Anyhow, it provides a neat little Silverlight application for doing a basic ROI for cloud applications.&amp;#160; &lt;/p&gt;  &lt;p&gt;Of course where this gets interesting is when you compare it to the other offerings/alternatives in cloud space. I’m hoping that others out there will share their thoughts around costing the cloud.&lt;/p&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1547" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=w0s5gXkthi4:nI9AgMeLhK8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=w0s5gXkthi4:nI9AgMeLhK8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=w0s5gXkthi4:nI9AgMeLhK8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=w0s5gXkthi4:nI9AgMeLhK8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=w0s5gXkthi4:nI9AgMeLhK8:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=w0s5gXkthi4:nI9AgMeLhK8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=w0s5gXkthi4:nI9AgMeLhK8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/09/22/cloud-costing.aspx</feedburner:origLink></item><item><title>Codemason Honours</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/7FkT4pywjpM/codemason-honours.aspx</link><pubDate>Wed, 02 Sep 2009 10:07:24 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1546</guid><dc:creator>nick</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1546</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/09/02/codemason-honours.aspx#comments</comments><description>&lt;p&gt;Well the results are in…. the finalists of the Master Codemason Competition have been &lt;a href="http://blogs.msdn.com/codemasons-guild/archive/2009/09/02/student-apprentice-competition-ticket-winner-to-teched.aspx"&gt;announced&lt;/a&gt; across on the Codemasons blog.&amp;#160; Congratulations to:&lt;/p&gt;  &lt;li&gt;Luis Ortega with The Follow me Clock&lt;/li&gt;  &lt;li&gt;Robert Crago with Musicradio&lt;/li&gt;  &lt;li&gt;Darko Radiceski with AAMHatcheye&lt;/li&gt;  &lt;p&gt;Don’t forget to go to Smackdown at TechEd to see the winning application.&lt;/p&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1546" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=7FkT4pywjpM:UblnwNweM2Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=7FkT4pywjpM:UblnwNweM2Y:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=7FkT4pywjpM:UblnwNweM2Y:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=7FkT4pywjpM:UblnwNweM2Y:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=7FkT4pywjpM:UblnwNweM2Y:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=7FkT4pywjpM:UblnwNweM2Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=7FkT4pywjpM:UblnwNweM2Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/09/02/codemason-honours.aspx</feedburner:origLink></item><item><title>Windows Azure, .NET Services from a Windows Mobile Widget</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/1KYDSX3Rda0/windows-azure-net-services-from-a-windows-mobile-widget.aspx</link><pubDate>Wed, 02 Sep 2009 00:06:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1539</guid><dc:creator>nick</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1539</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/09/01/windows-azure-net-services-from-a-windows-mobile-widget.aspx#comments</comments><description>&lt;p&gt;[This post is based on the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8d75d4f7-77a4-4adf-bce8-1b10608574bb&amp;amp;displaylang=en"&gt;Windows Azure Tools for Microsoft Visual Studio July 2009 CTP&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;That’s right, if you hadn’t guessed what I was working on with my previous posts on .NET Services (&lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-acquiring-an-authentication-token.aspx"&gt;Tokens&lt;/a&gt;, Queues &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-i.aspx"&gt;I&lt;/a&gt;, &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-ii.aspx"&gt;II&lt;/a&gt;, &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-iii.aspx"&gt;III&lt;/a&gt;, Routers &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/31/windows-azure-microsoft-net-services-working-with-routers-i.aspx"&gt;I&lt;/a&gt; &amp;amp; &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/09/01/windows-azure-microsoft-net-services-working-with-routers-ii.aspx"&gt;II&lt;/a&gt;) I’ve been working towards accessing .NET Services from within a widget. I must apologise for the following as it’s just a code dump of a sample widget that shows how to create a queue and subscribe to an existing router.&amp;nbsp; Note that if you are going to use this on a number of devices you need to create a unique queue on each device, otherwise you’ll end up subscribing to the router multiple times – this will cause duplicate messages in your queue and contention between the devices dequeuing the messages.&lt;/p&gt;
&lt;p&gt;To get this widget to work, simply create a widget (&lt;a title="http://msdn.microsoft.com/en-us/library/dd721906.aspx" href="http://msdn.microsoft.com/en-us/library/dd721906.aspx"&gt;Developing Widgets for Windows Mobile 6.5&lt;/a&gt;) and then copy the following code into your html file.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;&lt;/em&gt;&lt;a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd%22"&gt;&lt;em&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;gt; &lt;br /&gt;&amp;lt;html xmlns=&amp;quot;&lt;/em&gt;&lt;a href="http://www.w3.org/1999/xhtml%22"&gt;&lt;em&gt;http://www.w3.org/1999/xhtml&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; &amp;gt; &lt;br /&gt;&amp;lt;head&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;Widget Chat&amp;lt;/title&amp;gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var theToken; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var theRouter = &amp;quot;myrouter&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var widgetQueue = &amp;quot;widget&amp;quot;; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function connect() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var solutionName = document.getElementById(&amp;quot;SolutionNameText&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var solutionPassword = document.getElementById(&amp;quot;SolutionPasswordText&amp;quot;); &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;Solution Name: &amp;#39; + solutionName.value); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;Solution Password: &amp;#39; + solutionPassword.value); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; httpGetAuthenticationToken(solutionName.value, solutionPassword.value, createQueue); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function createQueue() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;Creating Queue&amp;#39;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; httpCreateQueue(theToken, widgetQueue, subscribeToRouter); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function subscribeToRouter() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;Subscribing to Router&amp;#39;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; httpSubscribeQueueToRouter(theToken, theRouter, widgetQueue, pollForMessage); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function pollForMessage() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; httpDequeueMessage(theToken, widgetQueue, messageReceived, pollForMessage); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function messageReceived(message) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;Message Received: &amp;#39; + message); &lt;br /&gt;&lt;/em&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pollForMessage(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function send() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var messageBox = document.getElementById(&amp;quot;Message&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; httpRouteMessage(theToken, theRouter, messageBox.value); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function httpGetAuthenticationToken(username, password, callback) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http = new XMLHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.open(&amp;quot;GET&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://accesscontrol.windows.net/IssueToken.aspx?u=&amp;quot;"&gt;&lt;em&gt;https://accesscontrol.windows.net/IssueToken.aspx?u=&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + username + &amp;quot;&amp;amp;p=&amp;quot; + password); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.readyState == 4) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.status == 200) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; theToken = http.responseText; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;Authenticated:&amp;#39; + theToken); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; callback(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;Authentication failed&amp;#39;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.send(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (e) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(e.message); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function httpCreateQueue(token, queue, callback) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var policy = &amp;quot;&amp;lt;entry xmlns=\&amp;quot;&lt;/em&gt;&lt;a href="http://www.w3.org/2005/Atom/%22"&gt;&lt;em&gt;http://www.w3.org/2005/Atom\&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;gt;&amp;quot; + &lt;br /&gt;&amp;nbsp; &amp;quot;&amp;lt;QueuePolicy xmlns=\&amp;quot;&lt;/em&gt;&lt;a href="http://schemas.microsoft.com/netservices/2009/05/servicebus/connect/%22"&gt;&lt;em&gt;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect\&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;gt;&amp;quot; + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;ExpirationInstant&amp;gt;2009-09-03T01:00:00.0000000Z&amp;lt;/ExpirationInstant&amp;gt;&amp;quot; + &lt;br /&gt;&amp;nbsp; &amp;quot;&amp;lt;/QueuePolicy&amp;gt;&amp;quot; + &lt;br /&gt;&amp;quot;&amp;lt;/entry&amp;gt;&amp;quot;; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http = new XMLHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.open(&amp;quot;POST&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/%22"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue, false); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/atom+xml;type=entry;charset=utf-8&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.readyState == 4) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.status == 201) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var created = http.responseText; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;queue created: &amp;#39; + created); &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;queue not created - &amp;#39; + http.status); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; callback(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.send(policy); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function httpGetServiceList(token) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http = new XMLHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.open(&amp;quot;GET&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/%22"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, false); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.readyState == 4 &amp;amp;&amp;amp; http.status == 200) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output = http.responseText; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(output); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Do something with the service list &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; httpRenewQueue(token, &amp;quot;mobilequeue&amp;quot;, output); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.send(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function httpRenewQueue(token, queue, getResponse) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlDoc = new ActiveXObject(&amp;quot;Microsoft.XMLDOM&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlDoc.async = &amp;quot;false&amp;quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlDoc.loadXML(getResponse); &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var entry; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var entries = xmlDoc.getElementsByTagName(&amp;quot;title&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var i; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; entries.length; i++) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (entries[ i ].childNodes[0].nodeValue == queue) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; entry = entries[ i ].parentNode; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; entry.getElementsByTagName(&amp;quot;ExpirationInstant&amp;quot;)[0].childNodes[0].nodeValue = &amp;quot;2009-08-31T09:56:25.2951184Z&amp;quot;; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http = new XMLHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.open(&amp;quot;PUT&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/%22"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue + &amp;quot;/!(queue)&amp;quot;, false); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/atom+xml;type=entry;charset=utf-8&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.readyState == 4 &amp;amp;&amp;amp; http.status == 200) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var output = http.responseText; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;renew: &amp;#39; + output); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; httpEnqueueMessage(token, queue, &amp;quot;Hi Everyone&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.send(entry.xml); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function httpDeleteQueue(token, queue) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http = new XMLHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.open(&amp;quot;DELETE&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/%22"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue + &amp;quot;/!(queue)&amp;quot;, false); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.readyState == 4 &amp;amp;&amp;amp; http.status == 200) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var deleted = http.responseText; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;deleted&amp;#39;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.send(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function httpEnqueueMessage(token, queue, message) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http = new XMLHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.open(&amp;quot;POST&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/%22"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue, false); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;text/plain;charset=utf-8&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.readyState == 4 &amp;amp;&amp;amp; http.status == 202) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var output = http.responseText; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;enqueue: &amp;#39; + output) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; httpDequeueMessage(token, queue); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.send(message); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function httpDequeueMessage(token, queue, callback, noMessageCallback) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http = new XMLHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.open(&amp;quot;DELETE&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/%22"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue + &amp;quot;/!(queue/head)?encoding=asreply&amp;amp;maxmessages=1&amp;amp;timeout=30&amp;quot;, true); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.readyState == 4) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.status == 200) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var output = http.responseText; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; callback(output); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; noMessageCallback(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.send(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function httpRouteMessage(token, router, message) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http = new XMLHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.open(&amp;quot;POST&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/%22"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + router, false); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;text/plain;charset=utf-8&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.readyState == 4) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.status == 202) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var output = http.responseText; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;Send ok!&amp;#39;); &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;Unable to send&amp;#39;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.send(message); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function httpSubscribeQueueToRouter(token, router, queue, callback) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var policy = &amp;quot;&amp;lt;entry xmlns=\&amp;quot;&lt;/em&gt;&lt;a href="http://www.w3.org/2005/Atom/%22"&gt;&lt;em&gt;http://www.w3.org/2005/Atom\&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;gt;&amp;quot; + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;link rel=&amp;#39;alternate&amp;#39; href=&amp;#39;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/%22"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue + &amp;quot;&amp;#39; /&amp;gt;&amp;quot; + &lt;br /&gt;&amp;nbsp; &amp;quot;&amp;lt;HttpHeaders xmlns=\&amp;quot;&lt;/em&gt;&lt;a href="http://schemas.microsoft.com/netservices/2009/05/servicebus/connect/%22"&gt;&lt;em&gt;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect\&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;gt;&amp;quot; + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;HttpHeader name=&amp;#39;X-MS-Identity-Token&amp;#39; value=&amp;#39;&amp;quot; + token + &amp;quot;&amp;#39; /&amp;gt;&amp;quot; + &lt;br /&gt;&amp;nbsp; &amp;quot;&amp;lt;/HttpHeaders&amp;gt;&amp;quot; + &lt;br /&gt;&amp;quot;&amp;lt;/entry&amp;gt;&amp;quot;; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http = new XMLHttpRequest(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.open(&amp;quot;POST&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/%22"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + router + &amp;quot;/!(router/subscriptions)&amp;quot;, false); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/atom+xml;type=entry;charset=utf-8&amp;quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.onreadystatechange = function() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.readyState == 4) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (http.status == 200) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var created = http.responseText; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;subscribed ok:&amp;#39; + created); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; callback(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&amp;#39;not subscribed ok&amp;#39; + http.status); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http.send(policy); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/script&amp;gt; &lt;br /&gt;&amp;lt;/head&amp;gt; &lt;br /&gt;&amp;lt;body&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Solution Name:&amp;lt;br /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input id=&amp;quot;SolutionNameText&amp;quot; type=&amp;quot;text&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;br /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Solution Password:&amp;lt;br /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input id=&amp;quot;SolutionPasswordText&amp;quot; type=&amp;quot;password&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Button onclick=&amp;quot;connect()&amp;quot;&amp;gt;Connect&amp;lt;/Button&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/p&amp;gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Message: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;br /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input id=&amp;quot;Message&amp;quot; type=&amp;quot;text&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Button onclick=&amp;quot;send()&amp;quot;&amp;gt;Send&amp;lt;/Button&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/p&amp;gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/body&amp;gt; &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1539" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=1KYDSX3Rda0:paZ6TBm5tjg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=1KYDSX3Rda0:paZ6TBm5tjg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=1KYDSX3Rda0:paZ6TBm5tjg:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=1KYDSX3Rda0:paZ6TBm5tjg:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=1KYDSX3Rda0:paZ6TBm5tjg:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=1KYDSX3Rda0:paZ6TBm5tjg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=1KYDSX3Rda0:paZ6TBm5tjg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/09/01/windows-azure-net-services-from-a-windows-mobile-widget.aspx</feedburner:origLink></item><item><title>Windows Azure, Microsoft .NET Services – Working with Routers (II)</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/Ev3GIPl_0PQ/windows-azure-microsoft-net-services-working-with-routers-ii.aspx</link><pubDate>Tue, 01 Sep 2009 06:31:12 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1536</guid><dc:creator>nick</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1536</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/09/01/windows-azure-microsoft-net-services-working-with-routers-ii.aspx#comments</comments><description>&lt;p&gt;[This post is based on the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8d75d4f7-77a4-4adf-bce8-1b10608574bb&amp;amp;displaylang=en"&gt;Windows Azure Tools for Microsoft Visual Studio July 2009 CTP&lt;/a&gt;]&lt;/p&gt;  &lt;p&gt;In the previous post on &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/31/windows-azure-microsoft-net-services-working-with-routers-i.aspx"&gt;Working with Routers&lt;/a&gt; I showed how you can create a router using a Http Post.&amp;#160; A router is only really useful when it can actually route messages. To do this it needs one or more subscribers.&amp;#160; As you can imagine creating a subscriber (as with other creates) involves a Http Post.&amp;#160; When we created the router one of the links that was returned was the &lt;strong&gt;subscriptions&lt;/strong&gt; url. All you really need to do to create a subscriber is send a Http Post to this url. Of course you need to send the url where you want messages to be routed to, and any other information that is required for the router to route messages.&amp;#160; The upshot is that you end up sending an entry that looks similar to the following:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&amp;lt;entry xmlns=&amp;quot;&lt;/em&gt;&lt;em&gt;http://www.w3.org/2005/Atom&amp;quot;&lt;/em&gt;&lt;em&gt;&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;link rel=&amp;quot;alternate&amp;quot; href=&amp;quot;&lt;/em&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/myqueue&amp;quot;&lt;/em&gt;&lt;em&gt; /&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;HttpHeaders xmlns=&amp;quot;&lt;/em&gt;&lt;em&gt;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot;&lt;/em&gt;&lt;em&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;HttpHeader name=&amp;quot;X-MS-Identity-Token&amp;quot; value=&amp;quot;zpleGHYQzEiRUXkdFd7UN+gBbBzSIuW5Bc2hIA==&amp;quot; /&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;/HttpHeaders&amp;gt;        &lt;br /&gt;&amp;lt;/entry&amp;gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Of course, this needs to be sent as a Http Post:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;private static string SubscribeQueueToRouter(string token, string router, string queue)       &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string subscriptionsUri = &amp;quot;&lt;/em&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;em&gt; + router + &amp;quot;/!(router/subscriptions)&amp;quot;; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(subscriptionsUri);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Headers.Add(&amp;quot;X-MS-Identity-Token&amp;quot;, token);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Method = &amp;quot;POST&amp;quot;;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.ContentType = &amp;quot;application/atom+xml;type=entry;charset=utf-8&amp;quot;; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; XElement content = new XElement(XName.Get(&amp;quot;entry&amp;quot;, &amp;quot;&lt;/em&gt;&lt;em&gt;http://www.w3.org/2005/Atom&amp;quot;)&lt;/em&gt;&lt;em&gt;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new XElement(XName.Get(&amp;quot;link&amp;quot;, &amp;quot;&lt;/em&gt;&lt;em&gt;http://www.w3.org/2005/Atom&amp;quot;)&lt;/em&gt;&lt;em&gt;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new XAttribute(&amp;quot;rel&amp;quot;, &amp;quot;alternate&amp;quot;),        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new XAttribute(&amp;quot;href&amp;quot;, &amp;quot;&lt;/em&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;em&gt; + queue)),       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ServicesElement(&amp;quot;HttpHeaders&amp;quot;,        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ServicesElement(&amp;quot;HttpHeader&amp;quot;,        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new XAttribute(&amp;quot;name&amp;quot;,&amp;quot;X-MS-Identity-Token&amp;quot;),        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new XAttribute(&amp;quot;value&amp;quot;,token)))); &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var requestStream = request.GetRequestStream())       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var writer = new System.IO.StreamWriter(requestStream))        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; writer.Write(content);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; writer.Flush();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var response = request.GetResponse())       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var responseStream = response.GetResponseStream())        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var reader = new StreamReader(responseStream))        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return reader.ReadToEnd();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In this example the link url provided is the tail of the queue (ie the url where you enqueue messages).&amp;#160; The token is included in a HttpHeader element so that it can be routed as part of sending the message to the queue. You should expect a 200, Ok response. If you want to get a list of subscribers you can simply issue a Http Get to the &lt;strong&gt;subscriptions&lt;/strong&gt; url.&amp;#160; This will return a feed of the subscribers.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&amp;lt;feed xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;title type=&amp;quot;text&amp;quot;&amp;gt;Subscriptions&amp;lt;/title&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;id&amp;gt;uuid:eb256797-2832-4f2b-afd9-ba3e4cfeeb7b;id=1869&amp;lt;/id&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;updated&amp;gt;2009-09-01T06:20:00Z&amp;lt;/updated&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;self&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myrouter/!(router/subscriptions)&amp;quot;&amp;gt;&amp;lt;/link&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;entry&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;id&amp;gt;uuid:eb256797-2832-4f2b-afd9-ba3e4cfeeb7b;id=1870&amp;lt;/id&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;title type=&amp;quot;text&amp;quot;&amp;gt;urn:uuid:90d62d9e-2a13-446c-951a-72046101fa17&amp;lt;/title&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;updated&amp;gt;2009-09-01T06:20:00Z&amp;lt;/updated&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;alternate&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myqueue&amp;quot;&amp;gt;&amp;lt;/link&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;self&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myrouter/!(router/subscriptions/urn:uuid:90d62d9e-2a13-446c-951a-72046101fa17)&amp;quot;&amp;gt;&amp;lt;/link&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;content type=&amp;quot;text&amp;quot;&amp;gt;&amp;lt;/content&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Expires xmlns=&amp;quot;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot;&amp;gt;2009-09-02T06:18:56.9899631Z&amp;lt;/Expires&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;NotifyTo xmlns=&amp;quot;http://schemas.xmlsoap.org/ws/2004/08/eventing&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Address xmlns=&amp;quot;http://www.w3.org/2005/08/addressing&amp;quot;&amp;gt;https://blogsample.servicebus.windows.net/myqueue&amp;lt;/Address&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/NotifyTo&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;HttpHeaders xmlns=&amp;quot;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;HttpHeader name=&amp;quot;X-MS-Identity-Token&amp;quot; value=&amp;quot;zpleGHYQzEiRUXkdFd7UN+gBbBzSIuW5Bc2hIA==&amp;quot;&amp;gt;&amp;lt;/HttpHeader&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/HttpHeaders&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/entry&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;entry&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;id&amp;gt;uuid:eb256797-2832-4f2b-afd9-ba3e4cfeeb7b;id=1871&amp;lt;/id&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;title type=&amp;quot;text&amp;quot;&amp;gt;urn:uuid:d27a29ab-46e4-49ca-9d1e-cd05bdc24d42&amp;lt;/title&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;updated&amp;gt;2009-09-01T06:20:00Z&amp;lt;/updated&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;alternate&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myqueue&amp;quot;&amp;gt;&amp;lt;/link&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;self&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myrouter/!(router/subscriptions/urn:uuid:d27a29ab-46e4-49ca-9d1e-cd05bdc24d42)&amp;quot;&amp;gt;&amp;lt;/link&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;content type=&amp;quot;text&amp;quot;&amp;gt;&amp;lt;/content&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Expires xmlns=&amp;quot;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot;&amp;gt;2009-09-02T06:01:01.0635156Z&amp;lt;/Expires&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;NotifyTo xmlns=&amp;quot;http://schemas.xmlsoap.org/ws/2004/08/eventing&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Address xmlns=&amp;quot;http://www.w3.org/2005/08/addressing&amp;quot;&amp;gt;https://blogsample.servicebus.windows.net/myqueue&amp;lt;/Address&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/NotifyTo&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;HttpHeaders xmlns=&amp;quot;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;HttpHeader name=&amp;quot;X-MS-Identity-Token&amp;quot; value=&amp;quot;J+rsqHMQzEgxQ3yu3JwyDv3J8wNgIQybBoxtng==&amp;quot;&amp;gt;&amp;lt;/HttpHeader&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/HttpHeaders&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/entry&amp;gt;        &lt;br /&gt;&amp;lt;/feed&amp;gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now the last thing to do is to send a message to the router. In the above example a message sent to the router will get routed through to the subscribed queue. As we did with enqueuing a message on a queue, to send a message to the router you do a Http Post to the &lt;strong&gt;alterate&lt;/strong&gt; url of the router (this is also the original url that you used to create the router).&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;private static string SendMessageToRouter(string token, string router, string message)       &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string routerUri = &amp;quot;&lt;/em&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;em&gt; + router;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // send        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; HttpWebRequest request = HttpWebRequest.Create(routerUri) as HttpWebRequest;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Method = &amp;quot;POST&amp;quot;;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Headers.Add(&amp;quot;X-MS-Identity-Token&amp;quot;, token);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.ContentType = &amp;quot;text/plain;charset=utf-8&amp;quot;; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var requestStream = request.GetRequestStream())       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var writer = new System.IO.StreamWriter(requestStream))        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; writer.Write(message);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; writer.Flush();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var response = request.GetResponse())       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return (response as HttpWebResponse).StatusCode.ToString();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Again you should expect a 202, Accepted response. To retrieve the message off the destination queue, simply send a Http Delete message as discussed in &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-iii.aspx"&gt;Working with Queues (III).&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1536" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=Ev3GIPl_0PQ:vc8BsSPD6kk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=Ev3GIPl_0PQ:vc8BsSPD6kk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=Ev3GIPl_0PQ:vc8BsSPD6kk:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=Ev3GIPl_0PQ:vc8BsSPD6kk:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=Ev3GIPl_0PQ:vc8BsSPD6kk:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=Ev3GIPl_0PQ:vc8BsSPD6kk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=Ev3GIPl_0PQ:vc8BsSPD6kk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/09/01/windows-azure-microsoft-net-services-working-with-routers-ii.aspx</feedburner:origLink></item><item><title>Windows Azure, Microsoft .NET Services – Working with Routers (I)</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/SlEIF6NhrTk/windows-azure-microsoft-net-services-working-with-routers-i.aspx</link><pubDate>Tue, 01 Sep 2009 04:58:18 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1532</guid><dc:creator>nick</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1532</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/08/31/windows-azure-microsoft-net-services-working-with-routers-i.aspx#comments</comments><description>&lt;p&gt;[This post is based on the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8d75d4f7-77a4-4adf-bce8-1b10608574bb&amp;amp;displaylang=en"&gt;Windows Azure Tools for Microsoft Visual Studio July 2009 CTP&lt;/a&gt;]&lt;/p&gt;  &lt;p&gt;The last couple of posts have covered working with .NET Services queues (parts &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-i.aspx"&gt;I&lt;/a&gt;, &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-ii.aspx"&gt;II&lt;/a&gt; and &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-iii.aspx"&gt;III&lt;/a&gt;). Now we move on to cover routers. Like I did previously I’ll cover creating and working with routers, before we move on to working with them in conjunction with queues.&lt;/p&gt;  &lt;p&gt;To create a router you send a Http Post to the url that you want the router to reside at, supplying a RouterPolicy entry.&amp;#160; The url has to belong to your solution url, so for example https://blogsample.servicebus.windows.net/myrouter. An example RouterPolicy would look like the following:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;entry xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;RouterPolicy xmlns=&amp;quot;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Discoverability&amp;gt;Public&amp;lt;/Discoverability&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ExpirationInstant&amp;gt;2009-09-01T05:18:06.9677603Z&amp;lt;/ExpirationInstant&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TransportProtection&amp;gt;None&amp;lt;/TransportProtection&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MaxSubscribers&amp;gt;2147483647&amp;lt;/MaxSubscribers&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MessageDistribution&amp;gt;AllSubscribers&amp;lt;/MessageDistribution&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/RouterPolicy&amp;gt;      &lt;br /&gt;&amp;lt;/entry&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now to send this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;private static string HttpCreateRouter(string token, string router)       &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string routerUri = &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/&amp;quot;"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + router; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(routerUri);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Headers.Add(&amp;quot;X-MS-Identity-Token&amp;quot;, token);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Method = &amp;quot;POST&amp;quot;;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.ContentType = &amp;quot;application/atom+xml;type=entry;charset=utf-8&amp;quot;; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; XElement content = new XElement(XName.Get(&amp;quot;entry&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="http://www.w3.org/2005/Atom&amp;quot;)"&gt;&lt;em&gt;http://www.w3.org/2005/Atom&amp;quot;)&lt;/em&gt;&lt;/a&gt;&lt;em&gt;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ServicesElement(&amp;quot;RouterPolicy&amp;quot;,        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ServicesElement(&amp;quot;Discoverability&amp;quot;,&amp;quot;Public&amp;quot;),        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ServicesElement(&amp;quot;ExpirationInstant&amp;quot;, DateTime.UtcNow.AddMinutes(30)),         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ServicesElement(&amp;quot;TransportProtection&amp;quot;, &amp;quot;None&amp;quot;),        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ServicesElement(&amp;quot;MaxSubscribers&amp;quot;, &amp;quot;2147483647&amp;quot;),        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ServicesElement(&amp;quot;MessageDistribution&amp;quot;, &amp;quot;AllSubscribers&amp;quot;))); &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var requestStream = request.GetRequestStream())       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var writer = new System.IO.StreamWriter(requestStream))        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; writer.Write(content);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; writer.Flush();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var response = request.GetResponse())       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var responseStream = response.GetResponseStream())        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var reader = new StreamReader(responseStream))        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return reader.ReadToEnd();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;private static XElement ServicesElement(string element, params object[] content)       &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return new XElement(XName.Get(element, &amp;quot;&lt;/em&gt;&lt;a href="http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot;)"&gt;&lt;em&gt;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot;)&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, content);       &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A note of warning… for some reason the order of the xml elements for the RouterPolicy does matter.&amp;#160; Submitting them in a different order appears to cause a duplicate RouterPolicy entry. This will most likely be resolved for the production release but in the meantime if you are seeing weird RouterPolicy entries being returned this may be the cause.&lt;/p&gt;  &lt;p&gt;When you run this code the response (assuming it is successful) should be a 201, Created. Subsequent Posts to this url will result in a 202, Accepted – note however this does not update or alter the router. In addition to the 201 status, the Post also returns information about the created router:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&amp;lt;entry xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;id&amp;gt;uuid:0ae5cae9-6f3f-4fcc-8377-83f34c106124;id=1546&amp;lt;/id&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;title type=&amp;quot;text&amp;quot;&amp;gt;myrouter&amp;lt;/title&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;updated&amp;gt;2009-09-01T04:48:41Z&amp;lt;/updated&amp;gt;        &lt;br /&gt;&lt;strong&gt;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;alternate&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myrouter/&amp;quot;/&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;self&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myrouter/!(router)&amp;quot;/&amp;gt;          &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;subscriptions&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myrouter/!(router/subscriptions)&amp;quot;/&amp;gt;          &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160; &amp;lt;RouterPolicy xmlns=&amp;quot;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot; xmlns:i=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Discoverability&amp;gt;Public&amp;lt;/Discoverability&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ExpirationInstant&amp;gt;2009-09-01T05:18:06.9677603Z&amp;lt;/ExpirationInstant&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TransportProtection&amp;gt;None&amp;lt;/TransportProtection&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MaxMessageSize&amp;gt;61440&amp;lt;/MaxMessageSize&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;BufferTimeout&amp;gt;PT10S&amp;lt;/BufferTimeout&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MaxBufferLength&amp;gt;0&amp;lt;/MaxBufferLength&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MaxBufferCapacity&amp;gt;0&amp;lt;/MaxBufferCapacity&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MaxSubscribers&amp;gt;50&amp;lt;/MaxSubscribers&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MessageDistribution&amp;gt;AllSubscribers&amp;lt;/MessageDistribution&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;PushDeliveryRetries&amp;gt;3&amp;lt;/PushDeliveryRetries&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;PushDeliveryTimeout&amp;gt;PT30S&amp;lt;/PushDeliveryTimeout&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/RouterPolicy&amp;gt;        &lt;br /&gt;&amp;lt;/entry&amp;gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;As with when you create a queue, the response contains a number of links.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;alternate&lt;/strong&gt; – This is the url you will use when placing new messages on the router.&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;self&lt;/strong&gt; – This is the url you will now use to update, renew and delete the router.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;subscriptions&lt;/strong&gt; – This is the url that you use when subscribing to the router.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;As you can see the process of creating a router is roughly the same as for a queue, with the only big difference being the RouterPolicy you need to supply.&amp;#160; Querying, renewing and deleting a router is done exactly the same way as for a queue, with the exception you need to use the &lt;strong&gt;self &lt;/strong&gt;url returned when you create the router (which ends in &lt;em&gt;(router)&lt;/em&gt; instead of &lt;em&gt;(queue)&lt;/em&gt;).&lt;/p&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1532" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=SlEIF6NhrTk:OWDkfPZkiG0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=SlEIF6NhrTk:OWDkfPZkiG0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=SlEIF6NhrTk:OWDkfPZkiG0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=SlEIF6NhrTk:OWDkfPZkiG0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=SlEIF6NhrTk:OWDkfPZkiG0:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=SlEIF6NhrTk:OWDkfPZkiG0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=SlEIF6NhrTk:OWDkfPZkiG0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/08/31/windows-azure-microsoft-net-services-working-with-routers-i.aspx</feedburner:origLink></item><item><title>Windows Azure, Microsoft .NET Services – Working with Queues (III)</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/qGTbQTJ0w00/windows-azure-microsoft-net-services-working-with-queues-iii.aspx</link><pubDate>Mon, 31 Aug 2009 02:21:49 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1529</guid><dc:creator>nick</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1529</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-iii.aspx#comments</comments><description>&lt;p&gt;[This post is based on the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8d75d4f7-77a4-4adf-bce8-1b10608574bb&amp;amp;displaylang=en"&gt;Windows Azure Tools for Microsoft Visual Studio July 2009 CTP&lt;/a&gt;]&lt;/p&gt;  &lt;p&gt;In my previous posts, &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-i.aspx"&gt;Working With Queues (I)&lt;/a&gt; &amp;amp; &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-ii.aspx"&gt;Working with Queues (II),&lt;/a&gt; I showed how you can create, query, renew and delete queues with the &lt;a title="Windows Azure, Microsoft .NET Services" href="http://www.microsoft.com/azure/netservices.mspx"&gt;Windows Azure, Microsoft .NET Services&lt;/a&gt;. Now for the interesting stuff – let’s enqueue and dequeue messages.&lt;/p&gt;  &lt;p&gt;As you can imagine enqueuing equates to Post(ing) a message to the tail of the queue, whilst dequeuing equates to delete(ing) from the head of the queue. In code, this is:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;private static string EnqueueMessage(string token, string queue, string message)       &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string queueUri = &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/&amp;quot;"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; // send       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; HttpWebRequest request = HttpWebRequest.Create(queueUri) as HttpWebRequest;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Method = &amp;quot;POST&amp;quot;;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Headers.Add(&amp;quot;X-MS-Identity-Token&amp;quot;, token);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.ContentType = &amp;quot;text/plain;charset=utf-8&amp;quot;; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var requestStream = request.GetRequestStream())       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var writer = new System.IO.StreamWriter(requestStream))        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; writer.Write(message);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; writer.Flush();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var response = request.GetResponse())       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return (response as HttpWebResponse).StatusCode.ToString();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;private static string DequeueMessage(string token, string queue)       &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string queueUri = &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/&amp;quot;"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue + &amp;quot;/!(queue/head)?encoding=asreply&amp;amp;maxmessages=1&amp;amp;timeout=30&amp;quot;; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; HttpWebRequest request = HttpWebRequest.Create(queueUri) as HttpWebRequest;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.ConnectionGroupName = &amp;quot;dequeue&amp;quot;;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Method = &amp;quot;DELETE&amp;quot;;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Headers.Add(&amp;quot;X-MS-Identity-Token&amp;quot;, token);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.ContentLength = 0; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var response = request.GetResponse())       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var responseStream = response.GetResponseStream())        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var reader = new StreamReader(responseStream))        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return reader.ReadToEnd();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;To enqueue a message you send a Http Post to the &lt;strong&gt;alternate&lt;/strong&gt; link (otherwise known as the tail of the queue), ie &lt;a href="https://blogsample.servicebus.windows.net/myqueue"&gt;https://blogsample.servicebus.windows.net/myqueue&lt;/a&gt;. You should get back a 202, Accepted response. When you are dequeuing a message you send a Http Delete to the &lt;strong&gt;queuehead &lt;/strong&gt;link (otherwise known as the head of the queue), ie &lt;a href="https://blogsample.servicebus.windows.net/myqueue/!(queue/head"&gt;https://blogsample.servicebus.windows.net/myqueue/!(queue/head&lt;/a&gt;). You should get back a 200, Ok response, with the message in the content of the response. &lt;/p&gt;  &lt;p&gt;As part of the Http Delete you can specify a timeout, in this case 30 seconds. This determines how long the request will wait for a message to appear on the queue before returning.&amp;#160; If a message appears within this timeout you will get the message and a 200 response.&amp;#160; If not, you will get a 204, No Content response.&lt;/p&gt;  &lt;p&gt;And now to cover enqueuing and dequeuing in BLOCKED SCRIPT&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;function httpEnqueueMessage(token, queue, message) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http = new XMLHttpRequest();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.open(&amp;quot;POST&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/&amp;quot;"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue, false);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;text/plain;charset=utf-8&amp;quot;);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.onreadystatechange = function() {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (http.readyState == 4 &amp;amp;&amp;amp; http.status == 202) {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var output = http.responseText;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Do something…        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.send(message);        &lt;br /&gt;} &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;function httpDequeueMessage(token, queue) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http = new XMLHttpRequest();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.open(&amp;quot;DELETE&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/&amp;quot;"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue + &amp;quot;/!(queue/head)?encoding=asreply&amp;amp;maxmessages=1&amp;amp;timeout=20&amp;quot;, false);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.onreadystatechange = function() {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (http.readyState == 4 &amp;amp;&amp;amp; http.status == 200) {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var output = http.responseText;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Do something...        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.send();        &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1529" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=qGTbQTJ0w00:lqCmEG1Amq8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=qGTbQTJ0w00:lqCmEG1Amq8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=qGTbQTJ0w00:lqCmEG1Amq8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=qGTbQTJ0w00:lqCmEG1Amq8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=qGTbQTJ0w00:lqCmEG1Amq8:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=qGTbQTJ0w00:lqCmEG1Amq8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=qGTbQTJ0w00:lqCmEG1Amq8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-iii.aspx</feedburner:origLink></item><item><title>Windows Azure, Microsoft .NET Services – Working with Queues (II)</title><link>http://feedproxy.google.com/~r/NickRandolphsDotNetTravels/~3/iNyNDzB3zNU/windows-azure-microsoft-net-services-working-with-queues-ii.aspx</link><pubDate>Mon, 31 Aug 2009 01:41:10 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1527</guid><dc:creator>nick</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://community.softteq.com/blogs/nick/rsscomments.aspx?PostID=1527</wfw:commentRss><comments>http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-ii.aspx#comments</comments><description>&lt;p&gt;[This post is based on the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8d75d4f7-77a4-4adf-bce8-1b10608574bb&amp;amp;displaylang=en"&gt;Windows Azure Tools for Microsoft Visual Studio July 2009 CTP&lt;/a&gt;]&lt;/p&gt;  &lt;p&gt;In my previous post, &lt;a href="http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-i.aspx"&gt;Working With Queues (I),&lt;/a&gt; I showed how you can create a queue using a Http Post message against the &lt;a title="Windows Azure, Microsoft .NET Services" href="http://www.microsoft.com/azure/netservices.mspx"&gt;Windows Azure, Microsoft .NET Services&lt;/a&gt;. Now that we’ve created a queue, let’s look at how you can query, renew and delete your queue.&lt;/p&gt;  &lt;p&gt;To query for the existence of a queue (and remember that when a queue expires it is no longer available) you just need to send a Http Get to the parent url. So for example if you had a queue &lt;em&gt;https://blogsample.servicebus.windows.net/&lt;/em&gt;application1/myqueue you would send the Get to &lt;em&gt;https://blogsample.servicebus.windows.net/&lt;/em&gt;application1. In our case because the queue we created previously was https://blogsample.servicebus.windows.net/myqueue we need to send the Http Get to https://blogsample.servicebus.windows.net/.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;public static string GetServicesListing(string token)        &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string listingUri = &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/&amp;quot;;"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(listingUri);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Headers.Add(&amp;quot;X-MS-Identity-Token&amp;quot;, token);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Method = &amp;quot;GET&amp;quot;;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.ContentLength = 0; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var response = request.GetResponse())        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var responseStream = response.GetResponseStream())         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var reader = new StreamReader(responseStream))         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var output=&amp;#160; reader.ReadToEnd();         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return output;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;When you run this code the response (assuming it is successful) should be a 200, Ok. In addition to the 200 status, the Get also returns information about services available under the url that the Get was sent to:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;feed xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;title type=&amp;quot;text&amp;quot;&amp;gt;Publicly Listed Services&amp;lt;/title&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;subtitle type=&amp;quot;text&amp;quot;&amp;gt;This is the list of publicly-listed services currently available&amp;lt;/subtitle&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;id&amp;gt;uuid:c285faa1-b963-4668-918f-af7b99ec19ea;id=3944&amp;lt;/id&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;updated&amp;gt;2009-08-31T00:30:31Z&amp;lt;/updated&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;generator&amp;gt;Microsoft® .NET Services - Service Bus&amp;lt;/generator&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;entry&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;id&amp;gt;uuid:c285faa1-b963-4668-918f-af7b99ec19ea;id=3945&amp;lt;/id&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;title type=&amp;quot;text&amp;quot;&amp;gt;myqueue&amp;lt;/title&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;updated&amp;gt;2009-08-31T00:30:31Z&amp;lt;/updated&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;alternate&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myqueue/&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;self&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myqueue/!(queue)&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;queuehead&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myqueue/!(queue/head)&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;link rel=&amp;quot;queuecontrol&amp;quot; href=&amp;quot;https://blogsample.servicebus.windows.net/myqueue/!(queue/control)&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;QueuePolicy xmlns=&amp;quot;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot; xmlns:i=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ExpirationInstant&amp;gt;2009-08-31T03:56:25.2951184Z&amp;lt;/ExpirationInstant&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MaxMessageSize&amp;gt;61440&amp;lt;/MaxMessageSize&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;EnqueueTimeout&amp;gt;PT10S&amp;lt;/EnqueueTimeout&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MaxConcurrentReaders&amp;gt;10&amp;lt;/MaxConcurrentReaders&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MaxDequeueRetries&amp;gt;3&amp;lt;/MaxDequeueRetries&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MaxMessageAge&amp;gt;PT10M&amp;lt;/MaxMessageAge&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MaxQueueLength&amp;gt;2147483647&amp;lt;/MaxQueueLength&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MaxQueueCapacity&amp;gt;10485760&amp;lt;/MaxQueueCapacity&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/QueuePolicy&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/entry&amp;gt;       &lt;br /&gt;&amp;lt;/feed&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And for the javascript version:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;function httpGetServiceList(token) {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http = new XMLHttpRequest();         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.open(&amp;quot;GET&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/&amp;quot;"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, false);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.onreadystatechange = function() {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (http.readyState == 4 &amp;amp;&amp;amp; http.status == 200) {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; output = http.responseText;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Do something with the service list         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.send();         &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;As you will have noticed, queues have an ExpirationInstant which is the instance when your queue will expire and be unavailable.&amp;#160; In most cases this is not that desirable so you will want to periodically renew it.&amp;#160; You do this by sending a Http Put to the &lt;strong&gt;self&lt;/strong&gt; link address (ie &lt;a href="https://blogsample.servicebus.windows.net/myqueue/!(queue"&gt;https://blogsample.servicebus.windows.net/myqueue/!(queue&lt;/a&gt;)).&amp;#160; Instead of just sending a new QueuePolicy you need to get the appropriate entry out of the service feed (retrieved using the Http Get we just discussed), update the QueuePolicy with the new expiration instant and then submit the whole entry in the content of the Http Put.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;public static string RenewQueue(string token, string queue)        &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string listing = GetServicesListing(token);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; XElement feed = XElement.Parse(listing);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; var content = (from entry in feed.Descendants(XName.Get(&amp;quot;entry&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="http://www.w3.org/2005/Atom&amp;quot;))"&gt;&lt;em&gt;http://www.w3.org/2005/Atom&amp;quot;))&lt;/em&gt;&lt;/a&gt;       &lt;br /&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; where entry.Element(XName.Get(&amp;quot;title&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="http://www.w3.org/2005/Atom&amp;quot;)).Value"&gt;&lt;em&gt;http://www.w3.org/2005/Atom&amp;quot;)).Value&lt;/em&gt;&lt;/a&gt;&lt;em&gt; == queue        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; select entry).FirstOrDefault();         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (content == null)         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return null;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; // Update the expiration time        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; content.Descendants(ServicesElementName(&amp;quot;ExpirationInstant&amp;quot;)).FirstOrDefault().SetValue(DateTime.UtcNow.AddMinutes(30)); &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; string queueUri = &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/&amp;quot;"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue + &amp;quot;/!(queue)&amp;quot;; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(queueUri);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Headers.Add(&amp;quot;X-MS-Identity-Token&amp;quot;, token);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Method = &amp;quot;PUT&amp;quot;;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.ContentType = &amp;quot;application/atom+xml;type=entry;charset=utf-8&amp;quot;; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var requestStream = request.GetRequestStream())        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var writer = new System.IO.StreamWriter(requestStream))         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; writer.Write(content);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; writer.Flush();         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; using (var response = request.GetResponse())        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var responseStream = response.GetResponseStream())         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var reader = new StreamReader(responseStream))         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return reader.ReadToEnd();         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;}         &lt;br /&gt;private static XName ServicesElementName(string element)         &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return XName.Get(element, &amp;quot;&lt;/em&gt;&lt;a href="http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot;);"&gt;&lt;em&gt;http://schemas.microsoft.com/netservices/2009/05/servicebus/connect&amp;quot;);&lt;/em&gt;&lt;/a&gt;       &lt;br /&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Here you should expect a 200, Ok response with the updated entry being returned in the response (you can use this to double-check the queue attributes were updated correctly). And now the same but in BLOCKED SCRIPT&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;function httpRenewQueue(token, queue, getResponse) {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlDoc = new ActiveXObject(&amp;quot;Microsoft.XMLDOM&amp;quot;);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlDoc.async = &amp;quot;false&amp;quot;;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlDoc.loadXML(getResponse); &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; var entry;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; var entries = xmlDoc.getElementsByTagName(&amp;quot;title&amp;quot;);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; var i;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; for (i = 0; i &amp;lt; entries.length; i++) {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (entries&lt;img src="http://community.softteq.com/emoticons/emotion-55.gif" alt="Idea" /&gt;.childNodes[0].nodeValue == queue) {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; entry = entries&lt;img src="http://community.softteq.com/emoticons/emotion-55.gif" alt="Idea" /&gt;.parentNode;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; entry.getElementsByTagName(&amp;quot;ExpirationInstant&amp;quot;)[0].childNodes[0].nodeValue=&amp;quot;2009-08-31T03:56:25.2951184Z&amp;quot;; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; http = new XMLHttpRequest();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.open(&amp;quot;PUT&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/&amp;quot;"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue + &amp;quot;/!(queue)&amp;quot;, false);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/atom+xml;type=entry;charset=utf-8&amp;quot;);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.onreadystatechange = function() {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (http.readyState == 4 &amp;amp;&amp;amp; http.status == 200)         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var output = http.responseText;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Do something…         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.send(entry.xml);         &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Note that in these examples there is NO error handling and the expiration is hard coded – you will need to adjust this otherwise you will get a 500 Internal Server error if the expiration is in the past.&lt;/p&gt;  &lt;p&gt;Ok, so finally you need to be able to delete your queue.&amp;#160; This is done by sending a Http Delete message to the &lt;strong&gt;Self&lt;/strong&gt; link, as follows:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;public static string DeleteQueue(string token, string queue)        &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string queueUri = &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/&amp;quot;"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue + &amp;quot;/!(queue)&amp;quot;; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(queueUri);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Headers.Add(&amp;quot;X-MS-Identity-Token&amp;quot;, token);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; request.Method = &amp;quot;DELETE&amp;quot;;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;request.ContentLength = 0;&lt;/strong&gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; using (var response = request.GetResponse())         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return (response as HttpWebResponse).StatusCode.ToString();         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;One important point here is that you must set the ContentLength to 0.&amp;#160; You should expect a 200, Ok if the queue is deleted.&amp;#160; For both the renew (ie Http Put) and delete (ie Http Delete) if the queue has expired, you can expect a 404, Not found exception to be raised.&amp;#160; Lastly, let’s see the delete in BLOCKED SCRIPT&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;function httpDeleteQueue(token, queue) {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http = new XMLHttpRequest();         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.open(&amp;quot;DELETE&amp;quot;, &amp;quot;&lt;/em&gt;&lt;a href="https://blogsample.servicebus.windows.net/&amp;quot;"&gt;&lt;em&gt;https://blogsample.servicebus.windows.net/&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; + queue +&amp;quot;/!(queue)&amp;quot;, false);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.setRequestHeader(&amp;quot;X-MS-Identity-Token&amp;quot;, token);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.onreadystatechange = function() {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (http.readyState == 4 &amp;amp;&amp;amp; http.status == 200) {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var output = http.responseText;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Do something….         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; http.send();         &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://community.softteq.com/aggbug.aspx?PostID=1527" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=iNyNDzB3zNU:XC0Y5efOEDc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=iNyNDzB3zNU:XC0Y5efOEDc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=iNyNDzB3zNU:XC0Y5efOEDc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=iNyNDzB3zNU:XC0Y5efOEDc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=iNyNDzB3zNU:XC0Y5efOEDc:LN8Vd79RFGo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?d=LN8Vd79RFGo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?a=iNyNDzB3zNU:XC0Y5efOEDc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NickRandolphsDotNetTravels?i=iNyNDzB3zNU:XC0Y5efOEDc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://community.softteq.com/blogs/nick/archive/2009/08/30/windows-azure-microsoft-net-services-working-with-queues-ii.aspx</feedburner:origLink></item></channel></rss>
