<?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.southworks.net/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Matias Woloski</title>
	
	<link>http://blogs.southworks.net/mwoloski</link>
	<description>my facade</description>
	<lastBuildDate>Fri, 27 Apr 2012 02:38:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.southworks.net/mwoloski" /><feedburner:info uri="mwoloski" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Blog moved to woloski.com</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/xw0Tr1EISdA/</link>
		<comments>http://blogs.southworks.net/mwoloski/2012/04/26/blog-moved-to-woloski-com/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 02:36:19 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2012/04/26/blog-moved-to-woloski-com/</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mwoloski/2012/04/26/blog-moved-to-woloski-com/" class="more-link">read more<img src="http://blogs.southworks.net/mwoloski/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<h2>NEW URL</h2>
<h2><a href="http://woloski.com">http://woloski.com</a></h2>
<h2>NEW RSS </h2>
<h2><a href="http://feeds.feedburner.com/woloski">http://feeds.feedburner.com/woloski</a></h2>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/xw0Tr1EISdA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2012/04/26/blog-moved-to-woloski-com/</feedburner:origLink></item>
		<item>
		<title>DelegatingHandler vs HttpOperationHandler – WCF Web API</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/dLRQjER4iwU/</link>
		<comments>http://blogs.southworks.net/mwoloski/2011/10/20/delegatinghandler-vs-httpoperationhandler-wcf-web-api/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 16:16:01 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
				<category><![CDATA[WCF Web API]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/?p=732</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mwoloski/2011/10/20/delegatinghandler-vs-httpoperationhandler-wcf-web-api/" class="more-link">read more<img src="http://blogs.southworks.net/mwoloski/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>Yesterday <a href="http://haacked.com">Phil Haack</a> wrote a post about <a href="http://haacked.com/archive/2011/10/19/implementing-an-authorization-attribute-for-wcf-web-api.aspx">Implementing an Authorization Attribute for WCF Web API</a>. We’re doing something similar to handle auth using SimpleWebTokens handled by <a href="http://www.google.com.ar/url?sa=t&amp;rct=j&amp;q=windows%20azure%20acs&amp;source=web&amp;cd=1&amp;ved=0CCsQFjAA&amp;url=http%3A%2F%2Facs.codeplex.com%2F&amp;ei=8EegTtjYJKTz0gHMg5HjBA&amp;usg=AFQjCNFAQwynNtM6Ip3ttXMKIqQSPlPJzg&amp;sig2=S9WqL107lA2OIat13tr_hA">ACS</a> and found a mix of approaches between <a href="http://pfelix.wordpress.com/2011/10/08/wcf-web-apibuilding-an-authorize-attribute/">Pedro Felix</a>, <a href="http://codebetter.com/howarddierking/2011/10/11/oauth-2-0-in-web-api/">Howard’s post</a>, <a href="https://bitbucket.org/lewisbenge/wcf-web-api-oauth-integration">Lewis</a>, and <a href="http://blogs.southworks.net/jhalife">Johnny</a>’s team who is also working on something similar. However I was too lazy to read the blogs and thrown this out to twitter knowing that <a href="http://twitter.com/gblock">@gblock</a> would give me the answer I wanted in matter of minutes <img style="border-bottom-style: none;border-left-style: none;border-top-style: none;border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.southworks.net/mwoloski/files/2011/10/wlEmoticon-smile.png"></p>
<blockquote><p><strong>@woloski:</strong> when would you use a <font color="#ff0000"></font><font color="#ff0000">delegatingchannel</font> vs <font color="#00ff00"></font><font color="#00ff00">httpoperationhandler</font><font color="#00ff00"></font>? I&#8217;ve found different samples using both</p>
</blockquote>
<p>And indeed he replied. I like things explained in plain English from someone who really knows the thing, so here are the tweets with some color coding to separate one from the other. </p>
<p><strong>NOTE</strong>: make sure to also read <a href="http://codebetter.com/glennblock/2011/05/17/message-handlers-vs-operation-handlers-which-one-to-use-2/">Glenn’s post which goes into much more detail</a>.</p>
<blockquote><p><strong>@gblock</strong>: there are significant diffs. One is for <font></font><font>pure <font color="#ff0000">http request / resp related concerns</font></font><font color="#ff0000"> </font>(message handlers) the other for <font></font><font color="#00ff00">app level</font><font></font></p>
<p><strong>@gblock: </strong>one is <font></font><font color="#ff0000">global / knows nothing about the service</font><font></font> the other does <font></font><font color="#00ff00">knows about the service</font><font></font>.</p>
<p><strong>@gblock: </strong>one is a <font></font><font color="#ff0000">Russian doll allowing pre-post handling</font><font></font>, the other is a <font></font><font color="#00ff00">sequential pipeline</font><font></font>.</p>
<p><strong>@gblock: </strong>one <font></font><font color="#00ff00"><font>handles model binding type scenarios</font> </font>(operation handlers) <font></font><font color="#ff0000">the other does not</font><font></font></p>
<p><strong>@gblock: </strong>one is <font></font><font color="#ff0000"><font>async</font> </font>(message handlers) the other is <font></font><font color="#00ff00">sync</font><font></font>. So if you have something <font></font><font color="#ff0000"><font>io bound</font> </font>use message handlers</p>
<p><font></font><strong>@gblock: </strong><font color="#ff0000"><font>for cross cutting http concerns like etags, or if-none-match</font> </font>use message handlers.</p>
<p><font></font><strong>@gblock: </strong><font color="#00ff00">for validation / logging of app data</font><font></font> use operation handlers. <font></font><font color="#0000ff">For security you might use both</font><font></font> as Howard did for Oauth</p>
<p><strong>@gblock: </strong>if it is <font></font><font color="#ff0000">truly cross cutting and doesn&#8217;t require details about the operation</font><font></font> itself like parameter values.</p>
<p><strong>@gblock: </strong>message handlers can <font></font><font color="#ff0000"><font>handle </font><font>requests dynamically</font></font><font></font> ie they can handle a request to \foo without an op foo</p>
<p><strong>@gblock: </strong>architecturally I think they make sense even though there is some overlap. <font><font></font></font><font><font color="#ff0000"><font>HTTP concerns</font> </font></font><font></font>vs <font><font></font></font><font><font color="#00ff00"><font>app concerns</font> </font></font><font></font>is the line.</p>
</blockquote>
<p>For our case we will use HttpOperationHandlers because we want access to the operation to check that it contains an attribute.</p>
<p>Case closed!</p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/dLRQjER4iwU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2011/10/20/delegatinghandler-vs-httpoperationhandler-wcf-web-api/</feedburner:origLink></item>
		<item>
		<title>WebCast: Explorando Windows Azure AppFabric – Service Bus Messaging y Access Control Service</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/o4j877OoozM/</link>
		<comments>http://blogs.southworks.net/mwoloski/2011/10/12/webcast-explorando-windows-azure-appfabric-service-bus-messaging-y-access-control-service/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 14:28:26 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
				<category><![CDATA[Access Control Service]]></category>
		<category><![CDATA[Service Bus]]></category>
		<category><![CDATA[Windows Azure AppFabric]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2011/10/12/webcast-explorando-windows-azure-appfabric-service-bus-messaging-y-access-control-service/</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mwoloski/2011/10/12/webcast-explorando-windows-azure-appfabric-service-bus-messaging-y-access-control-service/" class="more-link">read more<img src="http://blogs.southworks.net/mwoloski/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>Hace algo mas de un mes <a href="http://twitter.com/emangare">Edu Mangarelli</a> me invito a dar un web cast de Windows Azure AppFabric, que acepte con gusto. Finalmente, el Miercoles pasado con <a href="http://twitter.com/hmeydac">Hernan Meydac Jean</a> hicimos una presentacion de 1 hora de este tema. En particular nos enfocamos en explicar ServiceBus Messaging (colas, topics y subscriptions) y Access Control Service (la version 2 que esta en produccion). </p>
<p>Dejo aqui el link del webcast que fue grabado para aquellos que les interese.</p>
<p><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032494854&amp;culture=es-AR"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/10/image.png" width="644" height="377"></a></p>
<p><a title="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032494854&amp;culture=es-AR" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032494854&amp;culture=es-AR">https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032494854&amp;culture=es-AR</a></p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/o4j877OoozM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2011/10/12/webcast-explorando-windows-azure-appfabric-service-bus-messaging-y-access-control-service/</feedburner:origLink></item>
		<item>
		<title>Not enough space on the disk – Windows Azure</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/j-Iwl-xRNHw/</link>
		<comments>http://blogs.southworks.net/mwoloski/2011/08/04/not-enough-space-on-the-disk-windows-azure/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 22:33:10 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
				<category><![CDATA[Azure]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2011/08/04/not-enough-space-on-the-disk-windows-azure/</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mwoloski/2011/08/04/not-enough-space-on-the-disk-windows-azure/" class="more-link">read more<img src="http://blogs.southworks.net/mwoloski/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>No, it’s not because Local Storage quota is low. That’s easy to fix by just increasing the quota in the SerivceDef. I hit this nasty issue while working with WebDeploy, but since you might get this in a different context as well I wanted to share it and get hours back of your life, dear reader <img style="border-bottom-style: none;border-left-style: none;border-top-style: none;border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.southworks.net/mwoloski/files/2011/08/wlEmoticon-smile.png"><br />
<h2>Problem</h2>
<p>WebDeploy throws an out of disk exception when creating a package
<p><em>There is not enough space on the disk. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count) at System.IO.BinaryWriter.Write(Byte[] buffer, Int32 index, Int32 count) at Microsoft.Web.Deployment.ZipEntry.ReadFromFile(String path, Boolean shouldCompress, BinaryWriter tempWriter, Stream stream, FileAttributes attr, DateTime lastModifiedTime, String descriptor, Int64 size) at Microsoft.Web.Deployment.ZipEntry..ctor(String path, DeploymentObject source, ZipFile zipFile)</em><br />
<h2>Analysis</h2>
<p>WebDeploy uses a temp path to create temporary files during the package creation. This folder seems to have a 100MB quota according to MSDN, so if the package is more than that, the process will throw an IO exception because the &#8220;disk is full&#8221; even though there is plenty of space. Below a trace of Process Monitor running from the Azure Web Role showing the CreateFile returning DISK FULL.
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/08/image2.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/08/image_thumb2.png" width="1028" height="446"></a></p>
<p>By looking with Reflector, we can validate that WebDeploy is using Path.GetTempPath. </p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/08/image1.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/08/image_thumb1.png" width="434" height="357"></a><br />
<h2>Solution</h2>
<p>Since we can&#8217;t change WebDeploy code nor parameterize it to use a different path, the solution is to change the TEMP/TMP environment variables, as suggested here <a href="http://msdn.microsoft.com/en-us/library/gg465400.aspx#Y976">http://msdn.microsoft.com/en-us/library/gg465400.aspx#Y976</a>. An excerpt…
<p><strong><font size="4">Ensure That the TEMP/TMP Target Directory Has Sufficient Space</font></strong></p>
<p>The standard Windows environment variables TEMP and TMP are available to code running in your application. Both TEMP and TMP point to a single directory that has a maximum size of 100 MB. Any data stored in this directory is not persisted across the lifecycle of the hosted service; if the role instances in a hosted service are recycled, the directory is cleaned.
<p>If the temporary directory for the hosted service runs out of space, or if you need data to persist in the temporary directory across the lifecycle of the hosted service, you can implement one of the following alternatives:
<li>You can configure a local storage resource, and access it directly instead of using TEMP or TMP. To access a local storage resource from code running within your application, call the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleenvironment.getlocalresource.aspx">RoleEnvironment.GetLocalResource</a> method. For more information about setting up local storage resources, see <a href="http://msdn.microsoft.com/en-us/library/ee758708.aspx">How to Configure Local Storage Resources</a>.&nbsp;
<li>You can configure a local storage resource, and point the TEMP and TMP directories to point to the path of the local storage resource. This modification should be performed within the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleentrypoint.onstart.aspx">RoleEntryPoint.OnStart</a> method.</li>
<p>The following code example shows how to modify the target directories for TEMP and TMP from within the OnStart method:
<pre>using System;
using Microsoft.WindowsAzure.ServiceRuntime;

namespace WorkerRole1
{
   public class WorkerRole : RoleEntryPoint
   {
      public override bool OnStart()
      {
         string customTempLocalResourcePath =
            RoleEnvironment.GetLocalResource("tempdir").RootPath;
         Environment.SetEnvironmentVariable("TMP", customTempLocalResourcePath);
         Environment.SetEnvironmentVariable("TEMP", customTempLocalResourcePath);

         // The rest of your startup code goes here…

         return base.OnStart();
      }
   }
}</pre>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/j-Iwl-xRNHw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2011/08/04/not-enough-space-on-the-disk-windows-azure/</feedburner:origLink></item>
		<item>
		<title>Windows Azure Accelerator for Worker Role – Update your workers faster</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/KbLA4dKu9u4/</link>
		<comments>http://blogs.southworks.net/mwoloski/2011/07/22/windows-azure-accelerator-for-worker-role-update-your-workers-faster/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 18:35:00 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Emerging Technology]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/?p=681</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mwoloski/2011/07/22/windows-azure-accelerator-for-worker-role-update-your-workers-faster/" class="more-link">read more<img src="http://blogs.southworks.net/mwoloski/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>During the last couple of years I worked quite a lot with Windows Azure. There is no other choice if you work with the Microsoft DPE team, like we do at <a href="http://blogs.southworks.net/">Southworks</a> <img style="border-bottom-style: none;border-left-style: none;border-top-style: none;border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.southworks.net/mwoloski/files/2011/07/wlEmoticon-smile2.png"></p>
<p>The thing is that we usually have to deal with last minute deployments to Azure that can take more than a minute &lt;grin&gt;. The good news is that some of that pain started to be eased lately. </p>
<ul>
<li>First, the Azure team enabled Web Deploy. For development this helped a lot.</li>
<li>Then, we helped DPE to build the <a href="http://waawebroles.codeplex.com/">Windows Azure Accelerators for Web Roles</a>, announced by <a href="http://ntotten.com/2011/07/windows-azure-accelerator-for-web-roles/">Nate last week</a>. I explained how the accelerator work in a <a href="http://blogs.southworks.net/mwoloski/2011/07/13/windows-azure-accelerators-for-web-roles-or-how-to-convert-azure-into-a-dedicated-hosting-elastic-automated-solution/">previous post</a>. We actually used the Web Role Accelerator to deploy <a href="http://www.tankster.net">www.tankster.net</a> (the <a href="http://watgames.codeplex.com/">social game</a> <a href="http://blogs.msdn.com/b/windowsazure/archive/2011/07/20/build-your-next-game-with-the-windows-azure-toolkit-for-social-games.aspx">announced on Wednesday</a>). We have the game backend running in two small instances and we had everything ready for the announcement last week but of course there were tweaks on the game till the last minute. We did like 10 deployments in the last day before the release. 10 * 15 minutes per deploy is almost three hours. Instead using the accelerator each deploy took us 30 seconds. The dev team happy with getting 3 hours of our life back.</li>
<li>Now, to complete the whole picture I saw it might be a good idea to have the same thing but for Worker Roles</li>
</ul>
<p align="left">So I teamed with Alejandro Iglesias and Fernando Tubio from the Southworks crew and together we created the <a href="http://snipurl.com/workerroleaccelerator">Windows Azure Accelerator for Worker Roles</a>.</p>
<h2>How it works?</h2>
<p>You basically deploy the accelerator with your Windows Azure solution and the “shell” worker will be polling a blob storage container to find and load the “real worker roles”. We made it easy so you don’t have to change any line of code of your actual worker role. Simply throw the entry point assembly and its dependencies in the storage container, set the name of the entry point assembly in a file (__entrypoint.txt) and the accelerator will pick it up, unload the previous AppDomain (if any) and create a new AppDomain with the latest version.</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/07/image9.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/07/image_thumb8.png" width="640" height="371"></a></p>
<h2>How to use it?</h2>
<p>You can find the project in <a href="http://snipurl.com/workerroleaccelerator">github</a>, there is a README in the home page that explain the steps to use it.&nbsp; <a href="https://github.com/downloads/southworks/workerroleaccelerator/WorkerRoleAccelerator-1.0.0.zip">Download it</a> and let us know what you think! </p>
<p>I would like to have a Visual Studio template to make it easier to integrate with existing solutions.</p>
<p>Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/KbLA4dKu9u4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2011/07/22/windows-azure-accelerator-for-worker-role-update-your-workers-faster/</feedburner:origLink></item>
		<item>
		<title>Windows Azure Accelerators for Web Roles or How to Convert Azure into a dedicated hosting elastic automated solution</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/kfORCvpKQ1o/</link>
		<comments>http://blogs.southworks.net/mwoloski/2011/07/13/windows-azure-accelerators-for-web-roles-or-how-to-convert-azure-into-a-dedicated-hosting-elastic-automated-solution/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 19:02:37 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Emerging Technology]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2011/07/13/windows-azure-accelerators-for-web-roles-or-how-to-convert-azure-into-a-dedicated-hosting-elastic-automated-solution/</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mwoloski/2011/07/13/windows-azure-accelerators-for-web-roles-or-how-to-convert-azure-into-a-dedicated-hosting-elastic-automated-solution/" class="more-link">read more<img src="http://blogs.southworks.net/mwoloski/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>Yesterday <a href="http://ntotten.com/2011/07/windows-azure-accelerator-for-web-roles/">Nathan announced</a> the release of the <a href="http://waawebroles.codeplex.com/">Windows Azure Accelerators for Web Roles</a>. If you are using Windows Azure today, this can be a pain relief if you’ve got used to wait 15 minutes (or more) every time you deploy to Windows Azure (and hope nothing was wrong in the package to realize after then that you’ve lost 15 minutes of your life). </p>
<p>Also, as the title says, and as <a href="http://blog.maartenballiauw.be/post/2011/07/13/Windows-Azure-Accelerator-for-Web-Roles.aspx">Maarten says in his blog</a>, if you have lots of small websites you don’t want to pay for 100 different web roles because that will be lots of money. Since Azure 1.4 you can use the Full IIS support but the experience is not optimal from the management perspective because it requires to redeploy each time you add a new website to the cscfg.</p>
<p>In short, the best way I can describe this accelerator is: </p>
<blockquote><p><strong>It transform your Windows Azure web roles into a dedicated elastic hosting solution with farm support and a very nice IIS web interface to manage the websites</strong>.</p>
</blockquote>
<p>I won’t go into much more details on the WHAT, since <a href="http://ntotten.com/2011/07/windows-azure-accelerator-for-web-roles/">Nathan</a> and <a href="http://blog.maartenballiauw.be/post/2011/07/13/Windows-Azure-Accelerator-for-Web-Roles.aspx">Maarten</a> already did a great job in their blogs. Instead I will focus on the HOW. We all love that things work, but when they don’t work you want to know where to touch. So, below you can find the <em>blueprints</em> of the engine.</p>
<p><font size="5"></font>&nbsp;</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/07/image7.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/07/image_thumb6.png" width="640" height="455"></a></p>
<p>&nbsp;</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/07/image8.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/07/image_thumb7.png" width="640" height="390"></a></p>
<p>Below some key code snippets that shows how things work.</p>
<p>The snippet below is the WebRole Entry Point Run method. We are spinning the Synchronization Service here that will block the execution. Since this is a web role, it will launch the IIS process as well and execute the code as usual.&nbsp; </p>
<pre class="brush: csharp;">public override void Run()
{
    Trace.TraceInformation("WebRole.Run");

    // Initialize SyncService
    var localSitesPath = GetLocalResourcePathAndSetAccess("Sites");
    var localTempPath = GetLocalResourcePathAndSetAccess("TempSites");
    var directoriesToExclude = RoleEnvironment.GetConfigurationSettingValue("DirectoriesToExclude").Split(';');
    var syncInterval = int.Parse(RoleEnvironment.GetConfigurationSettingValue("SyncIntervalInSeconds"), CultureInfo.InvariantCulture);

    this.syncService = new SyncService(localSitesPath, localTempPath, directoriesToExclude, "DataConnectionstring");
    this.syncService.SyncForever(TimeSpan.FromSeconds(syncInterval));
}
</pre>
<p>Then the other important piece is the SyncForever method. What this method does is the following:</p>
<ul>
<li>Update the IIS configuration using the IIS ServerManager API by reading from table storage</li>
<li>Synchronize the WebDeploy package from blob to local storage (point 4 in the diagram)</li>
<li>Deploy the sites using WebDeploy API, by taking the package from local storage</li>
<li>Creates and copies the WebDeploy package from IIS (if something changed)</li>
</ul>
<pre class="brush: csharp;">public void SyncForever(TimeSpan interval)
{
    while (true)
    {
        Trace.TraceInformation("SyncService.Checking for synchronization");

        try
        {
            this.UpdateIISSitesFromTableStorage();
        }
        catch (Exception e)
        {
            Trace.TraceError("SyncService.UpdateIISSitesFromTableStorage{0}{1}", Environment.NewLine, e.TraceInformation());
        }

        try
        {
            this.SyncBlobToLocal();
        }
        catch (Exception e)
        {
            Trace.TraceError("SyncService.SyncBlobToLocal{0}{1}", Environment.NewLine, e.TraceInformation());
        }

        try
        {
            this.DeploySitesFromLocal();
        }
        catch (Exception e)
        {
            Trace.TraceError("SyncService.DeploySitesFromLocal{0}{1}", Environment.NewLine, e.TraceInformation());
        }

        try
        {
            this.PackageSitesToLocal();
        }
        catch (Exception e)
        {
            Trace.TraceError("SyncService.PackageSitesToLocal{0}{1}", Environment.NewLine, e.TraceInformation());
        }

        Trace.TraceInformation("SyncService.Synchronization completed");

        Thread.Sleep(interval);
    }
}
</pre>
<p>My advice: If you are using Windows Azure today don’t waste more time doing lengthy deployments <img style="border-bottom-style: none;border-left-style: none;border-top-style: none;border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.southworks.net/mwoloski/files/2011/07/wlEmoticon-smile1.png">&nbsp;<a href="http://waawebroles.codeplex.com/">Download the Windows Azure Accelerators for Web Roles</a>.</p>
<p>Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/kfORCvpKQ1o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2011/07/13/windows-azure-accelerators-for-web-roles-or-how-to-convert-azure-into-a-dedicated-hosting-elastic-automated-solution/</feedburner:origLink></item>
		<item>
		<title>Windows Azure AppFabric Access Control in Practice (Spanish)</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/H3g7ORbU-Sk/</link>
		<comments>http://blogs.southworks.net/mwoloski/2011/07/12/windows-azure-appfabric-access-control-in-practice-spanish/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 03:28:57 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
				<category><![CDATA[ADFS]]></category>
		<category><![CDATA[Access Control Service]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Claim-Based Identity]]></category>
		<category><![CDATA[Identity]]></category>
		<category><![CDATA[Windows Azure AppFabric]]></category>
		<category><![CDATA[Windows Identity Foundation]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/?p=666</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mwoloski/2011/07/12/windows-azure-appfabric-access-control-in-practice-spanish/" class="more-link">read more<img src="http://blogs.southworks.net/mwoloski/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>Como habia escrito en un <a href="http://blogs.southworks.net/mwoloski/2011/06/30/windows-azure-appfabric-cache-and-access-control-in-spanish-azure-bootcamp/">post anterior</a>, aqui dejo un video donde muestro Windows Identity Foundation y Windows Azure Access Control Service.</p>
<p>En este ejemplo muestro lo siguiente:</p>
<ul>
<li>Creo un sitio web de cero y agrego un identity provider de prueba (Add STS Reference)</li>
<li>Me falla una cosa con certificados y hago un poco de troubleshooting</li>
<li>Configuro el mismo sitio en Windows Azure Access Control (ACS) y genero la relacion de confianza entre mi sitio y ACS</li>
<li>Configuro otros identity providers en ACS</li>
<li>Muestro como podemos logearnos a una aplicacion utilizando diferentes proveedores de identidad. En particular muestro el ADFS de Microsoft,&nbsp; el ADFS de Southworks, Google, LiveID, etc.</li>
</ul>
<p>Sobre el final contesto algunas preguntas… </p>
<p><a href="http://vimeo.com/26211729"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/07/image4.png" width="636" height="361"></a></p>
<p>Espero que les sea util!</p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/H3g7ORbU-Sk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2011/07/12/windows-azure-appfabric-access-control-in-practice-spanish/</feedburner:origLink></item>
		<item>
		<title>Ajax, Cross Domain, jQuery, WCF Web API or MVC, Windows Azure</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/kCad--0ZsQ8/</link>
		<comments>http://blogs.southworks.net/mwoloski/2011/07/02/ajax-cross-domain-jquery-wcf-web-api-or-mvc-windows-azure/#comments</comments>
		<pubDate>Sat, 02 Jul 2011 13:35:00 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Cross Domain]]></category>
		<category><![CDATA[WCF Web API]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/?p=658</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mwoloski/2011/07/02/ajax-cross-domain-jquery-wcf-web-api-or-mvc-windows-azure/" class="more-link">read more<img src="http://blogs.southworks.net/mwoloski/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>The title is SEO friendly as you can see <img style="border-bottom-style: none;border-left-style: none;border-top-style: none;border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.southworks.net/mwoloski/files/2011/07/wlEmoticon-smile.png">. This week, while working in a cool project, we had to explore options to expose a web API and make cross domain calls from an HTML5 client. Our specific scenario is: we develop the server API and another company is building the HTML5 client. Since we are in the development phase, we wanted to be agile and work independently from each other.&nbsp; The fact that we are using Azure and WCF Web API is an implementation detail, this can be applied to any server side REST framework and any platform.</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/07/image3.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/07/image_thumb3.png" width="480" height="388"></a></p>
<p>We wanted a non-intrusive solution. This means being able to use the usual jQuery client (not learning a new client js API) and try to keep to the minimum the amount of changes in the client and server code. JSONP is an option but it does not work for POST requests. CORS is another option that I would like to try but I haven’t found a good jQuery plugin for that.</p>
<p>So in the end this is what we decided to use:</p>
<ul>
<li>WCF Web API to implement the REST backend (works also with MVC)
<li>jQuery to query the REST backend
<li>jQuery plugin (<a href="http://flxhr.flensed.com/">flXHR from flensed</a>) that overrides the jQuery AJAX transport with a headless flash component
<li>Windows Azure w/ WebDeploy enabled to host the API</li>
</ul>
<p>Having a working solution requires the following steps:</p>
<ol>
<li>Download <a href="https://github.com/getify/flensed">jQuery flXHR plugin</a> and add it to your scripts folder
<li>Download the <a href="http://flxhr.flensed.com/download.php">latest flXHR library</a>
<li>Put the cross domain policy xml file in the root of your server (change the allowed domains if you want)</p>
<pre class="brush: xml;">&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"&gt;
&lt;cross-domain-policy&gt;

  &lt;allow-access-from domain="*" /&gt;
  &lt;allow-http-request-headers-from domain="*" headers="*" /&gt;

&lt;/cross-domain-policy&gt;
</pre>
</li>
</ol>
<p>Here is some JavaScript code that register the flXHR as a jQuery ajax transport and make an AJAX call when a button is click</p>
<pre class="brush: js;">&lt;script type="text/javascript"&gt;
    var baseUrl = "http://api.cloudapp.net/";

    $(function () {
        jQuery.flXHRproxy.registerOptions(baseUrl, { xmlResponseText: false, loadPolicyURL: baseUrl + "crossdomain.xml" });
    });

    $.ajaxSetup({ error: handleError });

    $("#btn").click(function () {
        $.ajax({
            url: baseUrl + "resources/1",
            success: function (data) {
                alert(data);
            }
        });
    });

    function handleError(jqXHR, errtype, errObj) {
        var XHRobj = jqXHR.__flXHR__;
        alert("Error: " + errObj.number
        + "\nType: " + errObj.name
        + "\nDescription: " + errObj.description
        + "\nSource Object Id: " + XHRobj.instanceId
    );
    }
&lt;/script&gt;
</pre>
<p>It’s important to set the ajaxSetup, otherwise POST requests will be converted to GET requests (seems like a bug in the library)</p>
<p>Finally, make sure to include the following scripts</p>
<pre class="brush: xml;">&lt;script src="/Scripts/jquery-1.6.2.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="/Scripts/flensed/flXHR.js"&gt;&lt;/script&gt;
&lt;script src="/Scripts/jquery.flXHRproxy.js" type="text/javascript"&gt;&lt;/script&gt;
</pre>
<p>The nice thing of this solution is that you can set the baseUrl to an empty string and remove the “registerOptions” and everything will keep working just fine from the same domain using the usual jQuery client.</p>
<p>This is the client with (default.html)</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/07/image.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/07/image_thumb.png" width="545" height="210"></a></p>
<p>This is the server implemented with WCF Web API running in Azure</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/07/image1.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/07/image_thumb1.png" width="547" height="198"></a></p>
<p>Turning on the network monitoring on IE9, we can see what is going on behind the scenes.</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/07/image2.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/07/image_thumb2.png" width="684" height="196"></a></p>
<p>Notice the last two calls initiated by Flash. The first one downloading the crossdomain policy file and then the actual call to the API.</p>
<p>Some gotchas:</p>
<ul>
<li>I wasn’t able to send http headers (via beforeSend). This means that you can’t set the Accept header, it will always be */*</li>
<li>There is no support for other verbs than GET/POST (this is a Flash limitation)</li>
</ul>
<p>I uploaded the small <a href="http://snipurl.com/wcf-web-api-jquery-crossdomain">proof of concept here</a>.</p>
<p>Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/kCad--0ZsQ8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2011/07/02/ajax-cross-domain-jquery-wcf-web-api-or-mvc-windows-azure/</feedburner:origLink></item>
		<item>
		<title>Windows Azure AppFabric Cache and Access Control in Spanish – Azure Bootcamp</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/HC0NSr2lRhI/</link>
		<comments>http://blogs.southworks.net/mwoloski/2011/06/30/windows-azure-appfabric-cache-and-access-control-in-spanish-azure-bootcamp/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 12:38:00 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
				<category><![CDATA[Access Control Service]]></category>
		<category><![CDATA[Caching]]></category>
		<category><![CDATA[Presentation]]></category>
		<category><![CDATA[Windows Azure AppFabric]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2011/06/30/windows-azure-appfabric-cache-and-access-control-in-spanish-azure-bootcamp/</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mwoloski/2011/06/30/windows-azure-appfabric-cache-and-access-control-in-spanish-azure-bootcamp/" class="more-link">read more<img src="http://blogs.southworks.net/mwoloski/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>Hace un par de meses tuve el agrado de participar en el <a href="http://www.azurebootcamp.com/materials/enespanol">Windows Azure Bootcamp</a> organizado por Microsoft Argentina. Fue un evento de dos dias en el cual presente Windows Azure AppFabric (Caching y Access Control Service). Si conocen mi background se imaginaran que le dedique el 30% a Caching y el 70% a Access Control <img style="border-bottom-style: none;border-left-style: none;border-top-style: none;border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.southworks.net/mwoloski/files/2011/06/wlEmoticon-smile.png"></p>
<p>Gracias a <a href="http://twitter.com/#!/guadacasuso">Guada</a> y Microsoft que grabaron el evento y <a href="http://www.azurebootcamp.com/materials/enespanol">postearon el material</a>. Me tome el trabajo de subirlo a vimeo para que no se tengan que bajar un wmv completo de 700MB.&nbsp; </p>
<h2>Introduccion a Windows Azure AppFabric Caching</h2>
<p><a href="http://vimeo.com/25727939"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px;padding-top: 0px" border="0" alt="Screen shot 2011-06-29 at 2.26.53 PM" src="http://blogs.southworks.net/mwoloski/files/2011/06/Screen-shot-2011-06-29-at-2.26.53-PM.png" width="324" height="201"></a></p>
<p><strong>Contenido:</strong></p>
<p><strong>0:00 – 0:03 minutos: </strong>intro, agenda y un poco de blah blah</p>
<p><strong>0:03 – 0:25 minutos: </strong>Teoria de Windows Azure AppFabric Caching</p>
<h2>Introduccion a Windows Azure Access Control Service 2.0 (Teoria)</h2>
<p><strong>0:25 – 1:00</strong> <strong>minutos:</strong> Introduccion a Identidad Federada, Protocolos, Claims, STS, FAQ, ADFSv2 y Windows Azure AppFabric Access Control Service v2.</p>
<p><a href="http://vimeo.com/25727939"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px;padding-top: 0px" border="0" alt="Screen shot 2011-06-29 at 2.43.54 PM" src="http://blogs.southworks.net/mwoloski/files/2011/06/Screen-shot-2011-06-29-at-2.43.54-PM.png" width="324" height="192"></a></p>
<p>En un proximo post, la semana que viene, publicare la segunda parte de la charla en donde utilizo el Access Control Service para asegurar una aplicacion y utilzar diferentes proveedores de identidad.</p>
<p><strong>UPDATE: la </strong><a href="http://blogs.southworks.net/mwoloski/2011/07/12/windows-azure-appfabric-access-control-in-practice-spanish/"><strong>segunda parte esta publicada</strong></a></p>
<p>Espero que les sea util!</p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/HC0NSr2lRhI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2011/06/30/windows-azure-appfabric-cache-and-access-control-in-spanish-azure-bootcamp/</feedburner:origLink></item>
		<item>
		<title>Troubleshooting WS-Federation and SAML2 Protocol</title>
		<link>http://feeds.southworks.net/~r/mwoloski/~3/ODO55_jT1ag/</link>
		<comments>http://blogs.southworks.net/mwoloski/2011/04/16/troubleshooting-ws-federation-and-saml2-protocol/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 18:20:00 +0000</pubDate>
		<dc:creator>Matias Woloski</dc:creator>
				<category><![CDATA[ADFS]]></category>
		<category><![CDATA[Identity]]></category>
		<category><![CDATA[Windows Identity Foundation]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mwoloski/2011/04/16/troubleshooting-ws-federation-and-saml2-protocol/</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mwoloski/2011/04/16/troubleshooting-ws-federation-and-saml2-protocol/" class="more-link">read more<img src="http://blogs.southworks.net/mwoloski/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;float: right;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" align="right" src="http://blogs.southworks.net/mwoloski/files/2011/04/image20.png" width="130" height="128">During the last couple of years we have helped companies deploying federated identity solutions using WS-Fed and SAML2 protocols with products like ADFS, SiteMinder in various platforms. Claims-based identity has many benefits but as every solution it has its downsides. One of them is the additional complexity to troubleshoot issues if something goes wrong, especially when things are distributed and in production. Since the authentication is outsourced and it is not part of the application logic anymore you need someway to see what is happening behind the scenes.</p>
<p>I’ve used <a href="http://www.fiddler2.com/fiddler2/">Fiddler</a> and <a href="https://addons.mozilla.org/en-us/firefox/addon/httpfox/">HttpHook</a> in the past to see what’s going on in the wire. These are great tools but they are developer-oriented. If the user who is having issues to login to an app is not a developer, then things get more difficult. </p>
<ul>
<li>Either you have some kind of server side log with all the tokens that have been issued and a nice way to query those by user</li>
<li>Or you have some kind of tool that the user can run and intercept the token </li>
</ul>
<p><a href="http://blogs.southworks.net/fboerr">Fred</a>, one of the guys working on my team, had the idea couple of months ago to implement the latter. So we coded together the first version (very rough) of the <strong>token debugger. </strong>The code is really simple, we are embedding a WebBrowser control in a Winforms app and inspecting the content on the Navigating event. If we detect a token being posted we show that.</p>
<p>Let’s see how it works. First you enter the url of your app, in this case we are using wolof (the tool we use for the backlog) that is a Ruby app speaking WS-Fed protocol. .</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/04/image27.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/04/image_thumb22.png" width="644" height="362"></a></p>
<p>After clicking the Southworks logo and entering my Active Directory account credentials, ADFS returns the token and it is POSTed to the app. In that moment, we intercept it and show it.</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/04/image28.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/04/image_thumb23.png" width="644" height="362"></a></p>
<p>You can do two things with the token: <strong>send it via email </strong>(to someone that can read it <img style="border-bottom-style: none;border-left-style: none;border-top-style: none;border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.southworks.net/mwoloski/files/2011/04/wlEmoticon-smile.png">) or <strong>continue with the usual flow</strong>. If there is another STS in the way it will also show a second token.</p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/04/image24.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/04/image_thumb20.png" width="644" height="351"></a></p>
<p><a href="http://blogs.southworks.net/mwoloski/files/2011/04/image26.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blogs.southworks.net/mwoloski/files/2011/04/image_thumb21.png" width="640" height="347"></a></p>
<p>Since I wanted to have this app handy I enabled ClickOnce deployment and deployed it to <a href="http://appharbor.com/">AppHarbor</a> (which works really well btw)</p>
<p>If you want to use it browse to and launch the ClickOnce app @ <a title="http://miller.apphb.com/" href="http://miller.apphb.com/">http://miller.apphb.com/</a></p>
<p>If you want to download the source code or contribute @ <a title="https://github.com/federicoboerr/token-requestor" href="https://github.com/federicoboerr/token-requestor">https://github.com/federicoboerr/token-requestor</a></p>
<img src="http://feeds.feedburner.com/~r/mwoloski/~4/ODO55_jT1ag" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mwoloski/2011/04/16/troubleshooting-ws-federation-and-saml2-protocol/</feedburner:origLink></item>
	</channel>
</rss>
