<?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:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Rick Strahl's Web Log</title>
    <link>http://www.west-wind.com/weblog/</link>
    <description>Life, Surf, Code and everything in between</description>
    <generator>West Wind Web Log</generator>
    <language>en-us</language>
    <image>
      <url>http://www.west-wind.com/weblog/images/WebLogBannerLogo.jpg</url>
      <title>Rick Strahl's Web Log</title>
      <link>http://www.west-wind.com/weblog/</link>
    </image>
    <pubDate>Thu, 23 May 2013 07:17:52 GMT</pubDate>
    <lastBuildDate>Wed, 22 May 2013 12:23:42 GMT</lastBuildDate>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/RickStrahl" /><feedburner:info uri="rickstrahl" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>20.906999</geo:lat><geo:long>-156.382029</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by/2.0/</creativeCommons:license><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><meta xmlns="http://pipes.yahoo.com" name="pipes" content="noprocess" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FRickStrahl" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FRickStrahl" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FRickStrahl" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FRickStrahl" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FRickStrahl" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><item>
      <title>A first look at SignalR</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/nOVMoscr1dE/A-first-look-at-SignalR</link>
      <guid isPermaLink="false">135936_201305221223</guid>
      <pubDate>Wed, 22 May 2013 12:23:42 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/May/22/A-first-look-at-SignalR#Comments</comments>
      <slash:comments>0</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=135936</wfw:commentRss>
      <category> ASP.NET</category>
      <category>JavaScript</category>
      <category>SignalR</category>
      <description>&lt;p&gt;&lt;a href="http://signalr.net/" target="_blank"&gt;SignalR&lt;/a&gt; is the latest in a long string of new technologies pouring out from the ASP.NET team recently, when Microsoft rolled out version 1.0 of SignalR when Visual Studio Update 2 was announced.&amp;nbsp; In a nutshell, SignalR is technology for .NET that allows you to build real time, connected Web applications. Connected in the sense that you can build Web applications that can send and receive and broadcast data in real time. The canonical example of a 'connected' application is a chat application where a client can broadcast messages to all other connected clients. While that's pretty cool in and of itself, that only begins to scratch the surface of what's possible with SignalR as you can communicate in a wide variety of ways between client and server and between all clients to push data around.&lt;/p&gt; &lt;h3&gt;Go ahead - Push Me Around!&lt;/h3&gt; &lt;p align="left"&gt;The idea behind SignalR and other tools like it (like the &lt;a href="http://socket.io/" target="_blank"&gt;socket.io&lt;/a&gt; or &lt;a href="https://github.com/Flotype/now" target="_blank"&gt;now.js&lt;/a&gt; JavaScript libraries) is that you can &lt;em&gt;push&lt;/em&gt; data from client to server, from server to client and even from client to client, all in real time without having to poll or check for new data at specified intervals. Callback driven interfaces on both client and server receive pushed messages immediately. The key word here is &lt;em&gt;push - &lt;/em&gt;servers and clients can &lt;em&gt;push &lt;/em&gt;data at any time and the other end of the connection sees the updated data immediately. It's pretty cool to watch an application, where one browser client updates a value in a text field and all other instances that are connected see that same change at the same time. Or having a server push a notification message down, and having all browsers immediately update to see the new data.&lt;/p&gt; &lt;p&gt;This sort of thing used to be the domain of connected TCP/IP services and peer to peer servers, but SignalR makes all of this available using standard Web protocols, using the HTTP protocol and port 80 or any other HTTP port and with .NET services on the server side. Behind the scenes SignalR combines the use of various connection protocols from &lt;a href="http://en.wikipedia.org/wiki/WebSocket" target="_blank"&gt;WebSockets&lt;/a&gt;, to &lt;a href="http://en.wikipedia.org/wiki/Push_technology#Long_polling" target="_blank"&gt;Long Polling&lt;/a&gt; to plain AJAX callbacks when all else fails, to bridge the compatibility gap between what modern browsers support and what you can do with legacy browsers. If you want to see all of these techniques highlighted along with a older preview of SignalR, there's a &lt;a href="http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2287" target="_blank"&gt;great conference session by Steve Sanderson on Channel 9&lt;/a&gt; that discusses the various Async messaging approaches.&lt;/p&gt; &lt;p&gt;The key feature here is that SignalR's server maintains a persistent connection - abstracted over WebSockets/LongPolling/Ajax depending on what's available on the browser - to the client. So while with AJAX we could always push data to the server, but the server could never push data to the client, with SignalR you can push data both from client to server and from server to client. In order to broadcast messages from one client to all other clients you can callback to the server which can then broadcast a message to all or selected connected clients. &lt;/p&gt; &lt;h3&gt;SignalR Server and Client Components&lt;/h3&gt; &lt;p&gt;SignalR abstracts these various protocols and allows a seamless experience regardless of what the client supports. Additionally SignalR provides a very easy to use .NET server side framework for creating the backend services that either push data directly or broadcast data in bulk to many clients. SignalR includes the concept of &lt;em&gt;Hubs &lt;/em&gt;which use simple methods&amp;nbsp; in a .NET class as endpoints, as well as a lower level &lt;em&gt;Connection&lt;/em&gt; interface that allows for streaming and low level access for the data that is both sent and received. SignalR then also provides rich client libraries for JavaScript, full .NET, Win8, Silverlight and a host of other clients to easily connect to either Hubs or Connections on the server, using an easy to use dynamic mapping model that is very flexible and easy to use. It's surprisingly easy to create SignalR services and consume them, both in Web and non-Web applications.&lt;/p&gt; &lt;p&gt;One of the cool things about SignalR is that you can also easily self host a SignalR server. A typical SignalR server application hosts in ASP.NET and is totally transparent and easy to run as part of the ASP.NET stack. However, you can also host SignalR in a self-hosted application, using an OWIN server host that can bootstrap SignalR and make it available in Console applications, Services or even full blown desktop applications. I recently built a monitoring service application that is running as a Windows Service and was able to use SignalR to efficiently push notification messages to a Web Browser based front end interface, pushing over 50 messages a second to several connected clients in real time. The possibilities this opens up really can't be overstated. &lt;/p&gt; &lt;h3&gt;Signal What? A small real World Use Case&lt;/h3&gt; &lt;p&gt;When I first heard about SignalR about a year and a half ago, the first thing that came to my mind was: "Yeah that's nice, but it's not a common scenario to have truly connected Web applications." The first thing that springs to mind are chat applications, messaging popups or continuous tickers of updating data pushed down to clients. That demo's nicely and is impressive to see, but it's not exactly a very common use case.&lt;/p&gt; &lt;p&gt;However, recently I had a chance to put SignalR to use in a real application with a scenario that's a little bit different. Specifically we needed a way to connect a standalone Windows Service application&amp;nbsp; to a Web browser clients to provide real time updates. This project involved a queue service application running as a Windows Service with a Web front end that can monitor and manipulate the queue's operation using any browser. &lt;/p&gt; &lt;p&gt;The specific UI use case was to replace an old and ugly Windows Forms user interface that had to run on the physical server to monitor the real time queue activity and manipulate the queue application settings. With SignalR we were able to move this app to a real time, Web browser based interface.&lt;/p&gt; &lt;p&gt;There are a several important pieces that SignalR provided and made possible for this project:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The ability to have a Windows Service push real time messages to a Web browser&lt;/li&gt; &lt;li&gt;The ability for many Web browser clients to be connected&lt;/li&gt; &lt;li&gt;The ability for many users to modify settings on the Web browser user interface and &lt;br&gt;reflect those changes immediately for other browser users&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;While the application created for this is not very complex it did highlight these various different scenarios of sending messages that you can use with SignalR:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Sending messages from the server to all clients (message list display)&lt;/li&gt; &lt;li&gt;Sending two-way messages from one client to the server (updates - like AJAX calls but using SignalR)&lt;/li&gt; &lt;li&gt;Sending messages from the server a specific caller (individual status updates)&lt;/li&gt; &lt;li&gt;Sending messages from a single browser instance to all browsers (Updating the global queue settings or stopping the service)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The interface for this application is basically a list type view of real-time active queue requests as they occur, some status information of the pending items in the queue and the current connection status to the server, as well as a small set of input controls that manage the queue operational status - the number of threads running the wait time and the ability to start and stop the queue. &lt;/p&gt; &lt;p&gt;Here's what the UI for this interface looks like:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.west-wind.com/Weblog/images/2013Windows-Live-Writer/My-first-look-at-SignalR_DB4C/QueueViewer_2.png"&gt;&lt;img title="QueueViewer" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="QueueViewer" src="http://www.west-wind.com/Weblog/images/2013Windows-Live-Writer/My-first-look-at-SignalR_DB4C/QueueViewer_thumb.png" width="783" height="599"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;As requests hit the queue they show up in this monitor and the main form's list. The queue service calls SignalR when it starts processing a queue request and again when a queue request either completes successfully or fails. The list status bar then displays the number of pending messages that are&amp;nbsp; waiting in the queue. The textboxes above let the administrators of this application who have access to the the service manage the queue by tweaking a few settings or by stopping the service altogether. When the update or start/stop button is clicked, a SignalR request is fired to save and or change the service status and then fire a notification to all clients to update their status.&lt;/p&gt; &lt;p&gt;The web site client uses knockout.js for databinding a couple of fairly simple models - the list of visible list items and the queue's status - which are updated by the SignalR callback methods that receive message data from the server. When the model data is updated knockout bindings kick in and refresh the UI immediately resulting in a mostly codeless update process. The only explicit code to display server content are the status messages which are not bound but explicitly called via a showStatus message.&lt;/p&gt; &lt;p&gt;For what it does there's a surprisingly little amount of code involved and the logic involved to make this work is pretty simple. &lt;/p&gt; &lt;p&gt;Granted this isn't a very complex UI, but still it was pretty amazing for me to see hundreds of requests rolling through in a few seconds and updating 10 browser windows simultaneously - until you see this happen with your own application it's hard to appreciate how much satisfaction you get from that very concept working so efficiently! It brings me back to the very early days of the Web when it was exciting to see any dynamic content on a live Web page :-)&lt;/p&gt; &lt;p&gt;I can think of a bunch of use cases where this technology makes a lot of sense:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Any sort of two-way messaging applications (chat, messaging)&lt;/li&gt; &lt;li&gt;Real time data feeds or ticker displays&lt;/li&gt; &lt;li&gt;Real time data monitors for logs, lists, users etc. (Admin interfaces)&lt;/li&gt; &lt;li&gt;Long running async requests with real-time status updates&lt;/li&gt; &lt;li&gt;A replacement for some Queue type operations with direct real-time connections&lt;/li&gt; &lt;li&gt;Screen sharing applications with shared editing data by multiple users&lt;/li&gt; &lt;li&gt;Interactive multi-player games with real time screen updates&lt;/li&gt; &lt;li&gt;and, and, and…&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Ease of Use&lt;/h3&gt; &lt;p&gt;Another thing that impressed me about SignalR when I started working with it is that this has to be some of the easiest to use Microsoft technology to come along in a long time, while providing some really powerful features. SignalR is based on dynamic language features which do away with a lot of ceremony in defining of interfaces and mapping client to server. In many cases it's as easy as creating a class on the server and having the client reference the server side hub and method and just call it. End of story. The same is true for broadcasting of messages from the server to the client - there's no contract, no special interface, all you do is call a method that may or may not exist on the client - if you implement it on the client it will get called. End of story - again. &lt;/p&gt; &lt;p&gt;What was really surprising about this project was that going from zero knowledge of SignalR to a fully functional, initial implementation that hit all the initial usage points I mentioned above, took all of 2 work days to accomplish. This included learning about SignalR and experimentation with a few different approaches, dealing with knockout.js, plus building robust connection management code that can deal with disconnects and reconnects (which truthfully was the most complex and time-consuming piece and the only part that required a bit of research and some help on the SignalR Jabbr channel). &lt;/p&gt; &lt;p&gt;This solution uses a Windows Service Project on the server using SignalR's OWIN hosting, which trivial to set up. In fact it takes all of 10 lines of code to hoist up the server.&lt;/p&gt; &lt;h3&gt;Low Ceremony&lt;/h3&gt; &lt;p&gt;It's extremely easy and low ceremony to broadcast a SignalR message even in a self hosted environment. The following C# server side code calls a JavaScript callback on all clients that are listening&amp;nbsp; (this method displays a queue list item):&lt;/p&gt; &lt;h3&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;span style="background: white; color: green"&gt;// Write out message to SignalR clients  
&lt;/span&gt;&lt;span style="background: white; color: black"&gt;HubContext.Clients.All.writeMessage(id&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="background: white; color: black"&gt;,
    &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;"Info"&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="background: white; color: black"&gt;,
    &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Now.ToString(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;"HH:mm:ss"&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="background: white; color: black"&gt;),
    message,  &lt;br&gt;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;    string&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Empty);&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/h3&gt;

&lt;p&gt;where the writeMessage method call is translated to the client side JavaScript handler. On the client there's a callback handler registered on a writeMessage operation which is then fired on the client. The script code then proceeds to bind the values to a view model item using knockout.js and updates the display dynamically.&lt;/p&gt;
&lt;p&gt;On the client I can simply register a method that handles a callback which effectively 'publishes' that method on the client:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;hub.client.writeMessage = self.writeMessage;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;And I can then implement the writeMessage callback method that handles this logic (or use an anonymous method):&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;writeMessage: &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(message, status, time, id, elapsed, waiting) { &lt;br&gt;    … update collection item viewModel and let knockout.js bind
}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;The server can now call the writeMessage function on the client using the C# code shown above. It's all dynamic.&lt;/p&gt;
&lt;p&gt;Calls in the other direction - from client to server are equally simple. The client calls a server method like this (where self is my top level object container and hub is an instance of the SignalR hub stored on it):&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;self.hub.server.getServiceStatus()
               .fail(page.statusMessage);&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;This calls a GetServiceStatus() method on the server's hub.&lt;/p&gt;
&lt;p&gt;Once a hub has been created and stored you can simply call the server object which maps any methods you call straight to the .NET server methods implemented on the hub. Here's the server code:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;public void &lt;/span&gt;&lt;span style="background: white; color: black"&gt;GetServiceStatus()
{
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;instance = &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Globals&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Controller;
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(instance == &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;null&lt;/span&gt;&lt;span style="background: white; color: black"&gt;)
       Clients.Caller.getServiceStatusCallback(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;null&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
&lt;span style="background: white; color: blue"&gt;    else&lt;/span&gt;
       Clients.Caller.getServiceStatusCallback(
         &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;QueueControllerStatus&lt;/span&gt;&lt;span style="background: white; color: black"&gt;()
         {
            queueName = instance.QueueName,
            waitInterval = instance.WaitInterval,
            threadCount = instance.ThreadCount,   
            paused = instance.Paused
         });
}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;This server code receives the JavaScript client's request and then broadcasts a message back to all connected clients. Effectively this code has a single JavaScript client requesting that the server should broadcast a message to all clients. Here the code basically pushes down status information which is then picked up on the client and bound via knockout to the textboxes and the start/stop button.&lt;/p&gt;
&lt;p&gt;The server code can use the Client.All, Clients.Caller, Clients.AllExcept collections to reference common groups or you can add users to specific Groups that you can then broadcast to. Lots of flexibility again in a really easy to use model.&lt;/p&gt;
&lt;h3&gt;Performance and Resources&lt;/h3&gt;
&lt;p&gt;Since this was my first time using SignalR I had no idea what to expect in regards to performance with using SignalR's messaging. I was actually surprised that I couldn't overload the UI operation by stuffing even 5000 messages into the queue. SignalR happily and rapidly kept up with the service in sending out messages and updating the list UI faster than you could even begin to keep reading it. 1000 queue requests (x2 for begin/end message) went through in less than 4 seconds! Also tried this with 10 clients connected simultaneously and performance didn't change noticably with the increased number of connected clients.&lt;/p&gt;
&lt;p&gt;It's important to understand that this application will be used by a small number of administrative users, so it's not going to be used by thousands of users simultaneously. At most we figure there may be 10 people connected at a time. However, connections are something to consider with SignalR. As cool as this technology is, it's &lt;em&gt;connected &lt;/em&gt;technology meaning that each client connected through SignalR is using a persistent and dedicated connection on the Web Server. 10 users or 100 are probably not much of a problem, but thousands of users may bump up against the Web server connection and Windows thread and resource limits eventually. SignalR also includes some scalability features, but these get very complex quickly and if this becomes an issue I personally think that one should reconsider whether SignalR or a real-time connection based interface is the right choice…&lt;/p&gt;
&lt;p&gt;While the SignalR's docs claim that it's capable of thousands of simultaneously connected clients (given the connection pool is high enough), there is a finite limit to the amount of connections you can simultaneously run with IIS or self-hosting along with the CPU and memory overhead associated with each connection.&lt;/p&gt;
&lt;p&gt;Caveat emptor - make sure you understand the implications of using SignalR in terms of connection, memory, cpu and bandwidth usage.&lt;/p&gt;
&lt;h3&gt;Documentation and Support&lt;/h3&gt;
&lt;p&gt;As I mentioned the basics and overall behavior of SignalR are pretty easy to grasp and put into practice and the online documentation does a pretty good job of getting you started and explain the general model of how the messaging flow and program implementation code works. There are nice and simple examples and it works great.&lt;/p&gt;
&lt;p&gt;However, some of the more specific documentation is a bit sketchy and often limited or missing altogether. The hardest part of this small component we built was dealing with the connection and disconnection notifications required to determine whether the Windows Service is online and the SignalR server running and how to deal with scenarios where connections are dropped and then reconnecting as necessary. SignalR actually includes some very sophisticated logic to notify you of connect and disconnect events on the client, but there are quite a few overlapping different events that fire on the client and I for one got lost in which one actually needed to be handled to reliably re-connect. There were a handful of other issues at this same lower level that were difficult to resolve through the documentation or even searching.&lt;/p&gt;
&lt;p&gt;I also found searching on SignalR content a bit frustrating because a lot of the hits I'd get for topics in blog posts or &lt;a href="http://stackoverflow.com/search?q=SignalR" target="_blank"&gt;StackOverflow&lt;/a&gt; answers ended up being from preview versions with information that was no longer valid. Hopefully this stuff will work itself out in time.&lt;/p&gt;
&lt;p&gt;In the meantime however, I hopped over to the &lt;a href="https://jabbr.net/#/rooms/signalr" target="_blank"&gt;SignalR Jabbr Channel&lt;/a&gt; and posted a few of my conundrums over there. There's lots of help offered on this channel from peers and from the authors of SignalR (or &lt;a href="http://weblogs.asp.net/davidfowler/" target="_blank"&gt;David Fowler&lt;/a&gt; mostly) frequently jumping in and answering questions. David helped me with two sticky issues and in a few minutes pointed me in the right direction. This type of interactive support is just awesome and it also shows the enthusiasm by some of the people involved with SignalR. I do wonder though how well this type of support will scale in the future. We'll see - in the meantime it's great to see this kind of direct interaction which hopefully helps the SignalR guys iron out some rough spots that come up more frequently.&lt;/p&gt;
&lt;h3&gt;SignalR - Hell Yeah!&lt;/h3&gt;
&lt;p&gt;As you can probably tell I'm pretty jazzed about what SignalR offers to .NET developers. Web based real-time communication technology like SignalR offers many opportunities to rethink of what we can actually build with Web applications today, offering many more opportunities to build interactive and collaborative applications. It provides a different way to access information in Web applications in a more direct, real time manner and it does this in a way that is relatively simple to accomplish. SignalR is amongst the cleanest and easiest to implement solutions I've seen coming from Microsoft in a very long time.&lt;/p&gt;
&lt;p&gt;I'm especially excited about the ability to interface SignalR's server side code with self-hosted applications that gives us the ability to more easily connect back end services to browser front ends. For administrative applications or dashboards this is incredibly powerful stuff and it's easy to integrate into existing applications. I'll post more on this topic in the future.&lt;/p&gt;
&lt;p&gt;But even in plain old Web applications the opportunities to provide real time data or to have users share information across multiple live browser instances is pretty cool. The abstraction provided by SignalR's client and server make it so easy to take advantage of this functionality in just about any application. There are so many opportunities here - from the obvious real time broadcast services to more subdued server callbacks that can replace traditional AJAX interfaces to providing real time access to changing data in Line of Business or even public facing applications. Then there is the use case for running long running async operations on the server and providing real-time feedback to the client page. And there's the whole opportunity with interactive games or productivity applications where multiple users can interact with the same shared information to provide a live and updating interface. Doing simple interactive games like Battleship etc. become almost trivial with this sort of technology and even more interactive graphics intensive&amp;nbsp;&amp;nbsp; games become a possibility with this toolset. &lt;/p&gt;
&lt;p&gt;Lots of opportunities to dream up, so dream on…&lt;/p&gt;&lt;div style='margin: 10px 0px'&gt;&lt;small&gt;© Rick Strahl, West Wind Technologies, 2005-2013&lt;/small&gt;&lt;/div&gt;&lt;div&gt;Posted in &lt;b&gt;&lt;a href='/Weblog/ShowPosts.aspx?Category= ASP.NET'&gt; ASP.NET&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href='/Weblog/ShowPosts.aspx?Category=JavaScript'&gt;JavaScript&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href='/Weblog/ShowPosts.aspx?Category=SignalR'&gt;SignalR&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div style='margin-top: 5px;'&gt;
&lt;a href="https://twitter.com/share" class="twitter-share-button" data-text="A first look at SignalR" data-via="RickStrahl" data-lang="en" data-hashtags="" data-url="http://www.west-wind.com/weblog/posts/2013/May/22/A-first-look-at-SignalR"&gt;Tweet&lt;/a&gt;
&lt;script&gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");&lt;/script&gt;

&lt;g:plusone size="medium" href="http://www.west-wind.com/weblog/posts/2013/May/22/A-first-look-at-SignalR" "&gt;&lt;/g:plusone&gt;
&lt;script type="text/javascript"&gt;
  (function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();
&lt;/script&gt;

&lt;/div&gt;&lt;/small&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=nOVMoscr1dE:4zjL2MmwPzs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=nOVMoscr1dE:4zjL2MmwPzs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=nOVMoscr1dE:4zjL2MmwPzs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=nOVMoscr1dE:4zjL2MmwPzs:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=nOVMoscr1dE:4zjL2MmwPzs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=nOVMoscr1dE:4zjL2MmwPzs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=nOVMoscr1dE:4zjL2MmwPzs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=nOVMoscr1dE:4zjL2MmwPzs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=nOVMoscr1dE:4zjL2MmwPzs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/nOVMoscr1dE" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/May/22/A-first-look-at-SignalR</feedburner:origLink></item>
    <item>
      <title>Publish Individual Files to your Server in Visual Studio 2012.2</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/5IC5_e8oUDY/Publish-Individual-Files-to-your-Server-in-Visual-Studio-20122</link>
      <guid isPermaLink="false">124546_201305100929</guid>
      <pubDate>Fri, 10 May 2013 09:29:26 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/May/10/Publish-Individual-Files-to-your-Server-in-Visual-Studio-20122#Comments</comments>
      <slash:comments>7</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=124546</wfw:commentRss>
      <category>ASP.NET</category>
      <category>Visual Studio</category>
      <description>&lt;p&gt;In Visual Studio 2012 Update 2 there's a sweet little new gem, that I championed for some time in the past, and that has finally made it into the VS box: You can now publish individual files to the server without having to publish the entire site. You can now publish 1 or more files simply by selecting them in the Solution Explorer and using the Context Menu's Publish Selected Files or Publish File xxxx.xxx. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.west-wind.com/Weblog/images/2013Windows-Live-Writer/Publish-Individual-Files-to-your-Server_14316/PublishIndividualFile_4.png"&gt;&lt;img title="PublishIndividualFile" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="PublishIndividualFile" src="http://www.west-wind.com/Weblog/images/2013Windows-Live-Writer/Publish-Individual-Files-to-your-Server_14316/PublishIndividualFile_thumb_1.png" width="565" height="594"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In the past if you wanted to publish your site, it was an all or nothing affair: You basically had to rebuild and re-publish the entire site. Publishing works great when you're making major updates that affect binaries and configuration settings. In that case you do want a full publish to push up your binary file changes as well as web.config transformations etc. This is a great feature and the cornerstone of publishing which is as it should be.&lt;/p&gt; &lt;p&gt;But on more than a few occasions I've:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Forgotten to include some content file like an image in a full publish  &lt;li&gt;Had to make a really minor change to a content file or image and need to push it up  &lt;li&gt;Make some quick iterative changes repeatedly to a file to tweak the UI or an image on the server&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Now, with Update 2 you have another option to publishing the entire site -you can now publish an individual file.&lt;/p&gt; &lt;p&gt;I know this is a minor thing, but I can't tell you how often I use this for quick image or CSS updates. Sometimes I actually prefer making changes to these sorts of things on a live site rather than firing up the local copy first especially if the live site is running with a full set of data. It's often convenient to just push individual files. This is especially true for my personal content sites, more so than typical business applications.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Web Deploy Getting Easier&lt;/h3&gt; &lt;p&gt;As a side note I've been a big fan of Web Deployment in Visual Studio - it's such a tremendous time saver over manually uploading files to the server and trying to figure out what needs updating. Prior to Web Deploy features in Visual Studio I actually had used a custom solution I cobbled together using FTP that provided much of the same functinality including the abililty to push individual files which I found very useful.&lt;/p&gt; &lt;p&gt;It's also great in a team environment, since publish settings are typically shared in source control. This ensures that everybody is pushing up code consistently to the staging or live server using the same settings that are configured only once. It's great when a new developer comes on board especially - they don't have to configure anything they are just ready to go.&lt;/p&gt; &lt;p&gt;When Web Publishing was introduced the intial versions were horrible to the point of unusability. In VS 2010 it improved somewhat, but the server side installation of Web Deploy was still a major pain in the ass. Getting Web Deploy configured properly on the server has been a real pain in the ass with 3 different installs required and several manual configuration steps.&lt;/p&gt; &lt;p&gt;With the latest Web Deploy 3.0 release though, Microsoft finally seems to have gotten Web Deploy right to where it's a single simple installation on the server that just works once installed. There no longer are any finicky configuration settings and it just works off the single install. Inside of the Visual Studio 2012 Web Publish client also has made the Publish Settings dialog a bit more user friendly and more flexible in what you can use to connect to the server. VS now understands pure site urls and virtuals as opposed to the base site url and Site ID/Name that was required previously and was always confusing. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.west-wind.com/Weblog/images/2013Windows-Live-Writer/Publish-Individual-Files-to-your-Server_14316/WebPublishSettingsDialog_2.png"&gt;&lt;img title="WebPublishSettingsDialog" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="WebPublishSettingsDialog" src="http://www.west-wind.com/Weblog/images/2013Windows-Live-Writer/Publish-Individual-Files-to-your-Server_14316/WebPublishSettingsDialog_thumb.png" width="720" height="565"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The end effect is I no longer dread setting up Web Deploy for the first time on a server, nor do I have to go look up the configuration for another site to figure out what put in the boxes :-).&lt;/p&gt; &lt;p&gt;It's kind of sad that it took so long for Web Deploy to get it all right, but now the whole thing is ridiculously smooth. There are a still a few issues with web.config transforms that are difficult to deal with from time to time, but that's not really Web Deploy's problem, but a problem of how to partition developer specific settings in configuration files which is always a problem.&lt;/p&gt; &lt;p&gt;In any case, I hope some of you find the new single file or selected file publishing feature as useful as I have. It's just one more little tweak that makes life easier and shaves a few minutes off the development process. Score!&lt;/p&gt;&lt;div style='margin: 10px 0px'&gt;&lt;small&gt;© Rick Strahl, West Wind Technologies, 2005-2013&lt;/small&gt;&lt;/div&gt;&lt;div&gt;Posted in &lt;b&gt;&lt;a href='/Weblog/ShowPosts.aspx?Category=ASP.NET'&gt;ASP.NET&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href='/Weblog/ShowPosts.aspx?Category=Visual Studio'&gt;Visual Studio&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div style='margin-top: 5px;'&gt;
&lt;a href="https://twitter.com/share" class="twitter-share-button" data-text="Publish Individual Files to your Server in Visual Studio 2012.2" data-via="RickStrahl" data-lang="en" data-hashtags="" data-url="http://www.west-wind.com/weblog/posts/2013/May/10/Publish-Individual-Files-to-your-Server-in-Visual-Studio-20122"&gt;Tweet&lt;/a&gt;
&lt;script&gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");&lt;/script&gt;

&lt;g:plusone size="medium" href="http://www.west-wind.com/weblog/posts/2013/May/10/Publish-Individual-Files-to-your-Server-in-Visual-Studio-20122" "&gt;&lt;/g:plusone&gt;
&lt;script type="text/javascript"&gt;
  (function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();
&lt;/script&gt;

&lt;/div&gt;&lt;/small&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=5IC5_e8oUDY:aDkMMbMLmeI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=5IC5_e8oUDY:aDkMMbMLmeI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=5IC5_e8oUDY:aDkMMbMLmeI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=5IC5_e8oUDY:aDkMMbMLmeI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=5IC5_e8oUDY:aDkMMbMLmeI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=5IC5_e8oUDY:aDkMMbMLmeI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=5IC5_e8oUDY:aDkMMbMLmeI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=5IC5_e8oUDY:aDkMMbMLmeI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=5IC5_e8oUDY:aDkMMbMLmeI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/5IC5_e8oUDY" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/May/10/Publish-Individual-Files-to-your-Server-in-Visual-Studio-20122</feedburner:origLink></item>
    <item>
      <title>A WebAPI Basic Authentication MessageHandler</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/tLyuolUcxag/A-WebAPI-Basic-Authentication-MessageHandler</link>
      <guid isPermaLink="false">114978_201304301029</guid>
      <pubDate>Tue, 30 Apr 2013 10:29:42 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/Apr/30/A-WebAPI-Basic-Authentication-MessageHandler#Comments</comments>
      <slash:comments>4</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=114978</wfw:commentRss>
      <category>Web Api</category>
      <description>&lt;p&gt;&lt;a href="http://www.west-wind.com/weblog/posts/2013/Apr/18/A-WebAPI-Basic-Authentication-Authorization-Filter" target="_blank"&gt;In my last post I showed a very simple Basic Authentication Filter implementation&lt;/a&gt; and several people commented that the 'right' way to do this is by using a MessageHandler instead. In the post I discussed why I opted for a filter rather than the MessageHandler: A filter is much simpler to implement and keeps all the relevant code pieces in one place instead of scattering them throughout the Web API pipeline. This might not be the right choice for all authentication, but if you're doing custom authentication/authorization in your app you're not going to mix and match and plug a multitude of auth mechanisms together. For simple auth scenarios a filter is just fine, especially since even when you implement a MessageHandler you need to implement an AuthorizationFilter anyway.&lt;/p&gt; &lt;p&gt;Just as an exercise, I spend a little time today to put together a message handler based Basic Authentication implementation to contrast the two. There are a few more moving pieces to this implementation:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;A MessageHandler to handle the Basic Auth processing  &lt;li&gt;A custom Identity to pass the username and password around  &lt;li&gt;An Authorization filter to validate the user&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;MessageHandler for Authentication&lt;/h3&gt; &lt;p&gt;MessageHandlers in Web API are chainable components that hook into the request/response pipeline. You can plug many message handlers together to provide many module like features. MessageHandlers can handle processing on the inbound request cycle and the output response cycle, via a simple Task&amp;lt;T&amp;gt; abstraction that provides the asynchronous pipeline processing.&lt;/p&gt; &lt;p&gt;To implement the BasicAuthenticationHandler you can create a class derived from DelegatingHandler and override the SendAsync method:&lt;/p&gt; &lt;pre class="code"&gt;&lt;span style=" color: blue"&gt;public class &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;BasicAuthenticationHandler &lt;/span&gt;&lt;span style=" color: black"&gt;: &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;DelegatingHandler
&lt;/span&gt;&lt;span style=" color: black"&gt;{
    &lt;/span&gt;&lt;span style=" color: blue"&gt;private const string &lt;/span&gt;&lt;span style=" color: black"&gt;WWWAuthenticateHeader = &lt;/span&gt;&lt;span style=" color: #a31515"&gt;"WWW-Authenticate"&lt;/span&gt;&lt;span style=" color: black"&gt;;

    &lt;/span&gt;&lt;span style=" color: blue"&gt;protected override &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;Task&lt;/span&gt;&lt;span style=" color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style=" color: #2b91af"&gt;HttpResponseMessage&lt;/span&gt;&lt;span style=" color: black"&gt;&amp;gt; SendAsync(&lt;/span&gt;&lt;span style=" color: #2b91af"&gt;HttpRequestMessage &lt;/span&gt;&lt;span style=" color: black"&gt;request, 
                                                           &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;CancellationToken &lt;/span&gt;&lt;span style=" color: black"&gt;cancellationToken)
    {
        &lt;/span&gt;&lt;span style=" color: blue"&gt;var &lt;/span&gt;&lt;span style=" color: black"&gt;credentials = ParseAuthorizationHeader(request);

        &lt;/span&gt;&lt;span style=" color: blue"&gt;if &lt;/span&gt;&lt;span style=" color: black"&gt;(credentials != &lt;/span&gt;&lt;span style=" color: blue"&gt;null&lt;/span&gt;&lt;span style=" color: black"&gt;)
        {
            &lt;/span&gt;&lt;span style=" color: blue"&gt;var &lt;/span&gt;&lt;span style=" color: black"&gt;identity = &lt;/span&gt;&lt;span style=" color: blue"&gt;new &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;BasicAuthenticationIdentity&lt;/span&gt;&lt;span style=" color: black"&gt;(credentials.Name, credentials.Password);
            &lt;/span&gt;&lt;span style=" color: blue"&gt;var &lt;/span&gt;&lt;span style=" color: black"&gt;principal = &lt;/span&gt;&lt;span style=" color: blue"&gt;new &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;GenericPrincipal&lt;/span&gt;&lt;span style=" color: black"&gt;(identity, &lt;/span&gt;&lt;span style=" color: blue"&gt;null&lt;/span&gt;&lt;span style=" color: black"&gt;);

            &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;Thread&lt;/span&gt;&lt;span style=" color: black"&gt;.CurrentPrincipal = principal;
            &lt;/span&gt;&lt;span style=" color: green"&gt;//if (HttpContext.Current != null)
            //    HttpContext.Current.User = principal;
        &lt;/span&gt;&lt;span style=" color: black"&gt;}

        &lt;/span&gt;&lt;span style=" color: blue"&gt;return base&lt;/span&gt;&lt;span style=" color: black"&gt;.SendAsync(request, cancellationToken)
            .ContinueWith(task =&amp;gt;
            {
                &lt;/span&gt;&lt;span style=" color: blue"&gt;var &lt;/span&gt;&lt;span style=" color: black"&gt;response = task.Result;
                &lt;/span&gt;&lt;span style=" color: blue"&gt;if &lt;/span&gt;&lt;span style=" color: black"&gt;(credentials == &lt;/span&gt;&lt;span style=" color: blue"&gt;null &lt;/span&gt;&lt;span style=" color: black"&gt;&amp;amp;&amp;amp; response.StatusCode == &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;HttpStatusCode&lt;/span&gt;&lt;span style=" color: black"&gt;.Unauthorized)
                    Challenge(request, response);


                &lt;/span&gt;&lt;span style=" color: blue"&gt;return &lt;/span&gt;&lt;span style=" color: black"&gt;response;
            });
    }

    &lt;/span&gt;&lt;span style=" color: gray"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style=" color: green"&gt;Parses the Authorization header and creates user credentials
    &lt;/span&gt;&lt;span style=" color: gray"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name="actionContext"&amp;gt;&amp;lt;/param&amp;gt;
    &lt;/span&gt;&lt;span style=" color: blue"&gt;protected virtual &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;BasicAuthenticationIdentity &lt;/span&gt;&lt;span style=" color: black"&gt;ParseAuthorizationHeader(&lt;/span&gt;&lt;span style=" color: #2b91af"&gt;HttpRequestMessage &lt;/span&gt;&lt;span style=" color: black"&gt;request)
    {
        &lt;/span&gt;&lt;span style=" color: blue"&gt;string &lt;/span&gt;&lt;span style=" color: black"&gt;authHeader = &lt;/span&gt;&lt;span style=" color: blue"&gt;null&lt;/span&gt;&lt;span style=" color: black"&gt;;
        &lt;/span&gt;&lt;span style=" color: blue"&gt;var &lt;/span&gt;&lt;span style=" color: black"&gt;auth = request.Headers.Authorization;
        &lt;/span&gt;&lt;span style=" color: blue"&gt;if &lt;/span&gt;&lt;span style=" color: black"&gt;(auth != &lt;/span&gt;&lt;span style=" color: blue"&gt;null &lt;/span&gt;&lt;span style=" color: black"&gt;&amp;amp;&amp;amp; auth.Scheme == &lt;/span&gt;&lt;span style=" color: #a31515"&gt;"Basic"&lt;/span&gt;&lt;span style=" color: black"&gt;)
            authHeader = auth.Parameter;

        &lt;/span&gt;&lt;span style=" color: blue"&gt;if &lt;/span&gt;&lt;span style=" color: black"&gt;(&lt;/span&gt;&lt;span style=" color: blue"&gt;string&lt;/span&gt;&lt;span style=" color: black"&gt;.IsNullOrEmpty(authHeader))
            &lt;/span&gt;&lt;span style=" color: blue"&gt;return null&lt;/span&gt;&lt;span style=" color: black"&gt;;

        authHeader = &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;Encoding&lt;/span&gt;&lt;span style=" color: black"&gt;.Default.GetString(&lt;/span&gt;&lt;span style=" color: #2b91af"&gt;Convert&lt;/span&gt;&lt;span style=" color: black"&gt;.FromBase64String(authHeader));

        &lt;/span&gt;&lt;span style=" color: blue"&gt;var &lt;/span&gt;&lt;span style=" color: black"&gt;tokens = authHeader.Split(&lt;/span&gt;&lt;span style=" color: #a31515"&gt;':'&lt;/span&gt;&lt;span style=" color: black"&gt;);
        &lt;/span&gt;&lt;span style=" color: blue"&gt;if &lt;/span&gt;&lt;span style=" color: black"&gt;(tokens.Length &amp;lt; 2)
            &lt;/span&gt;&lt;span style=" color: blue"&gt;return null&lt;/span&gt;&lt;span style=" color: black"&gt;;

        &lt;/span&gt;&lt;span style=" color: blue"&gt;return new &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;BasicAuthenticationIdentity&lt;/span&gt;&lt;span style=" color: black"&gt;(tokens[0], tokens[1]);
    }


    &lt;/span&gt;&lt;span style=" color: gray"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style=" color: green"&gt;Send the Authentication Challenge request
    &lt;/span&gt;&lt;span style=" color: gray"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name="message"&amp;gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name="actionContext"&amp;gt;&amp;lt;/param&amp;gt;
    &lt;/span&gt;&lt;span style=" color: blue"&gt;void &lt;/span&gt;&lt;span style=" color: black"&gt;Challenge(&lt;/span&gt;&lt;span style=" color: #2b91af"&gt;HttpRequestMessage &lt;/span&gt;&lt;span style=" color: black"&gt;request, &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;HttpResponseMessage &lt;/span&gt;&lt;span style=" color: black"&gt;response)
    {
        &lt;/span&gt;&lt;span style=" color: blue"&gt;var &lt;/span&gt;&lt;span style=" color: black"&gt;host = request.RequestUri.DnsSafeHost;                    
        response.Headers.Add(WWWAuthenticateHeader, &lt;/span&gt;&lt;span style=" color: blue"&gt;string&lt;/span&gt;&lt;span style=" color: black"&gt;.Format(&lt;/span&gt;&lt;span style=" color: #a31515"&gt;"Basic realm=\"{0}\""&lt;/span&gt;&lt;span style=" color: black"&gt;, host));
    }

}&lt;/span&gt;&lt;/pre&gt;If you looked at my last post this should look fairly familiar - the basic auth logic is very similar to the filter. I reused the Challenge and ParseAuthorizationHeader changing just the inputs to the request and response messages respectively.

&lt;p&gt;The message handler works in two distinct steps - the initial code that fires on the inbound request, which tries to parse the authentication header into a BasicAuthenticationIdentity and assigning that identity to the thread principle.&lt;/p&gt;
&lt;p&gt;The second step - the part in the ContinueWith() Task block - handles the processing on the outbound response. Things have to be broken up like this in a MessageHandler because the Response doesn't exist on the inbound request yet. The code here is responsible for issuing the challenge if the response status is unauthorized. &lt;/p&gt;
&lt;p&gt;So the logic goes like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Request is authenticated already - goes through 
&lt;li&gt;Request is not authenticated and returns a 401 (from an AuthFilter or explicit 401 ResponseMessage from code) 
&lt;li&gt;Request is not authenticated and returns something other 401 - request goes through&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;To make all this work there are a couple more things that need to be implemented.&lt;/p&gt;
&lt;h3&gt;BasicAuthenticationIdentity&lt;/h3&gt;
&lt;p&gt;Basic Authentication works via a username and password that is passed as a base64 encoded, clear text string. In order to authorize the user in a custom authorization scenario that username and password has to be passed up the pipeline into the AuthorizationFilter that actually handles the authorization of the user.&lt;/p&gt;
&lt;p&gt;To do this I opted to create a BasicAuthenticationIdentity class. Using this identity the handler can set the username and password on the Identity and pass it to AuthorizeFilter. Here's the implementation:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style=" color: gray"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style=" color: green"&gt;Custom Identity that adds a password captured by basic authentication
&lt;/span&gt;&lt;span style=" color: gray"&gt;/// &lt;/span&gt;&lt;span style=" color: green"&gt;to allow for an auth filter to do custom authorization
&lt;/span&gt;&lt;span style=" color: gray"&gt;/// &amp;lt;/summary&amp;gt;
&lt;/span&gt;&lt;span style=" color: blue"&gt;public class &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;BasicAuthenticationIdentity &lt;/span&gt;&lt;span style=" color: black"&gt;: &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;GenericIdentity
&lt;/span&gt;&lt;span style=" color: black"&gt;{
    &lt;/span&gt;&lt;span style=" color: blue"&gt;public &lt;/span&gt;&lt;span style=" color: black"&gt;BasicAuthenticationIdentity(&lt;/span&gt;&lt;span style=" color: blue"&gt;string &lt;/span&gt;&lt;span style=" color: black"&gt;name, &lt;/span&gt;&lt;span style=" color: blue"&gt;string &lt;/span&gt;&lt;span style=" color: black"&gt;password) : &lt;/span&gt;&lt;span style=" color: blue"&gt;base&lt;/span&gt;&lt;span style=" color: black"&gt;(name,"Basic")
    {            
        &lt;/span&gt;&lt;span style=" color: blue"&gt;this&lt;/span&gt;&lt;span style=" color: black"&gt;.Password = password;
    }

    &lt;/span&gt;&lt;span style=" color: gray"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style=" color: green"&gt;Basic Auth Password for custom authentication
    &lt;/span&gt;&lt;span style=" color: gray"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style=" color: blue"&gt;public string &lt;/span&gt;&lt;span style=" color: black"&gt;Password { &lt;/span&gt;&lt;span style=" color: blue"&gt;get&lt;/span&gt;&lt;span style=" color: black"&gt;; &lt;/span&gt;&lt;span style=" color: blue"&gt;set&lt;/span&gt;&lt;span style=" color: black"&gt;; }               
}&lt;/span&gt;&lt;/pre&gt;
&lt;h3&gt;AuthorizeFilter&lt;/h3&gt;
&lt;p&gt;Next we need a filter to handle the authorization of the user. This logic most likely will be application specific. Because all we'll need to do here is validate the user's credentials and return yay or nay, an AuthorizeFilter is the easiest:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style=" color: blue"&gt;public class &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;MyAuthorizationFilter &lt;/span&gt;&lt;span style=" color: black"&gt;: &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;AuthorizeAttribute
&lt;/span&gt;&lt;span style=" color: black"&gt;{&lt;/span&gt;&lt;span style=" color: black"&gt;      
    &lt;/span&gt;&lt;span style=" color: blue"&gt;protected override bool &lt;/span&gt;&lt;span style=" color: black"&gt;IsAuthorized(&lt;/span&gt;&lt;span style=" color: #2b91af"&gt;HttpActionContext &lt;/span&gt;&lt;span style=" color: black"&gt;actionContext)
    {             
        &lt;/span&gt;&lt;span style=" color: blue"&gt;var &lt;/span&gt;&lt;span style=" color: black"&gt;identity = &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;Thread&lt;/span&gt;&lt;span style=" color: black"&gt;.CurrentPrincipal.Identity;
        &lt;/span&gt;&lt;span style=" color: blue"&gt;if &lt;/span&gt;&lt;span style=" color: black"&gt;(identity == &lt;/span&gt;&lt;span style=" color: blue"&gt;null &lt;/span&gt;&lt;span style=" color: black"&gt;&amp;amp;&amp;amp; &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;HttpContext&lt;/span&gt;&lt;span style=" color: black"&gt;.Current != &lt;/span&gt;&lt;span style=" color: blue"&gt;null&lt;/span&gt;&lt;span style=" color: black"&gt;)
            identity = &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;HttpContext&lt;/span&gt;&lt;span style=" color: black"&gt;.Current.User.Identity;

        &lt;/span&gt;&lt;span style=" color: blue"&gt;if &lt;/span&gt;&lt;span style=" color: black"&gt;(identity != &lt;/span&gt;&lt;span style=" color: blue"&gt;null &lt;/span&gt;&lt;span style=" color: black"&gt;&amp;amp;&amp;amp; identity.IsAuthenticated)
        {
            &lt;/span&gt;&lt;span style=" color: blue"&gt;var &lt;/span&gt;&lt;span style=" color: black"&gt;basicAuth = identity &lt;/span&gt;&lt;span style=" color: blue"&gt;as &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;BasicAuthenticationIdentity&lt;/span&gt;&lt;span style=" color: black"&gt;;

            &lt;/span&gt;&lt;span style=" color: green"&gt;// do your business validation as needed
            &lt;/span&gt;&lt;span style=" color: blue"&gt;var &lt;/span&gt;&lt;span style=" color: black"&gt;user = &lt;/span&gt;&lt;span style=" color: blue"&gt;new &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;BusUser&lt;/span&gt;&lt;span style=" color: black"&gt;();
            &lt;/span&gt;&lt;span style=" color: blue"&gt;if &lt;/span&gt;&lt;span style=" color: black"&gt;(user.Authenticate(basicAuth.Name, basicAuth.Password))
                &lt;/span&gt;&lt;span style=" color: blue"&gt;return true&lt;/span&gt;&lt;span style=" color: black"&gt;;                
        }

        &lt;/span&gt;&lt;span style=" color: blue"&gt;return false&lt;/span&gt;&lt;span style=" color: black"&gt;;
    }
}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;In the filter you can simply override the IsAuthorized() method and return true or false. If you return false WebAPI automatically fires a 401 status code, which triggers the Challenge() in the BasicAuthenticationHandler that's monitoring for 401's.&lt;/p&gt;
&lt;p&gt;The IsAuthorized method implementation typically has business specific code in it that handles the authorization of the user. Basically you can capture the Thread Principal and the BasicAuthenticationIdentity and retrieve the username and password. You can then go to town on the username and password. In my example here a business object is fired up to authenticate the user.&lt;/p&gt;
&lt;p&gt;By the way, notice that in my last post I used an &lt;em&gt;AuthorizationFilter&lt;/em&gt; - and here I'm using an &lt;em&gt;AuthorizeFilter. &lt;/em&gt;AuthorizeFilter works great if all you need to do is validate a user and return true or false. If there's more logic involved that, like creating a new response then an AuthorizationFilter is the better choice. &lt;/p&gt;
&lt;h3&gt;Configuration&lt;/h3&gt;
&lt;p&gt;Once the handler and filter exist they have to be hooked up. MessageHandlers have to be added in the configuration:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style=" color: #2b91af"&gt;GlobalConfiguration&lt;/span&gt;&lt;span style=" color: black"&gt;.Configuration.MessageHandlers.Add(&lt;/span&gt;&lt;span style=" color: blue"&gt;new &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;BasicAuthenticationHandler&lt;/span&gt;&lt;span style=" color: black"&gt;());&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;The AuthorizationFilter can either be applied via global configuration or on the controller:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style=" color: #2b91af"&gt;GlobalConfiguration&lt;/span&gt;&lt;span style=" color: black"&gt;.Configuration.Filters.Add(&lt;/span&gt;&lt;span style=" color: blue"&gt;new &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;MyAuthorizationFilter&lt;/span&gt;&lt;span style=" color: black"&gt;());       &lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;or you can apply it on the controller:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style=" color: black"&gt;[&lt;/span&gt;&lt;span style=" color: #2b91af"&gt;MyAuthorizationFilter&lt;/span&gt;&lt;span style=" color: black"&gt;]
&lt;/span&gt;&lt;span style=" color: blue"&gt;public class &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;QueueController &lt;/span&gt;&lt;span style=" color: black"&gt;: &lt;/span&gt;&lt;span style=" color: #2b91af"&gt;ApiController&lt;/span&gt;&lt;/pre&gt;
&lt;h3&gt;Filter or MessageHandler - you decide&lt;/h3&gt;
&lt;p&gt;Comparing the two modes of operation - Authentication MessageHandler or AuthorizationFilter - there's not a tremendous difference in implementation. To me the filter is more compact and easier to follow what's going on simply because everything is in one place. For most typical custom login scenarios that are tied to business logic, that'll be totally sufficient. The advantage of a message handler is that it's globally applied and is part of the WebAPI pipeline so if several components need to take advantage of BasicAuthentication with different Authorization that would work. But then again you can do that with a filter as well, especially since a MessageHandler still requires a filter for it's authorization. &amp;lt;shrug&amp;gt;&lt;/p&gt;
&lt;p&gt;Either way you can take your pick from these two implementations.&lt;/p&gt;
&lt;h3&gt;Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/RickStrahl/WestwindToolkit/blob/master/Westwind.Web.WebApi/Handlers/BasicAuthenticationHandler.cs" target="_blank"&gt;BasicAuthenticationHandler Code on GitHub&lt;/a&gt;&lt;/strong&gt; 
&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.west-wind.com/weblog/posts/2013/Apr/18/A-WebAPI-Basic-Authentication-Authorization-Filter" target="_blank"&gt;Basic Authentication Authorization Filter Post&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style='margin: 10px 0px'&gt;&lt;small&gt;© Rick Strahl, West Wind Technologies, 2005-2013&lt;/small&gt;&lt;/div&gt;&lt;div&gt;Posted in &lt;b&gt;&lt;a href='/Weblog/ShowPosts.aspx?Category=Web Api'&gt;Web Api&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div style='margin-top: 5px;'&gt;
&lt;a href="https://twitter.com/share" class="twitter-share-button" data-text="A WebAPI Basic Authentication MessageHandler" data-via="RickStrahl" data-lang="en" data-hashtags="" data-url="http://www.west-wind.com/weblog/posts/2013/Apr/30/A-WebAPI-Basic-Authentication-MessageHandler"&gt;Tweet&lt;/a&gt;
&lt;script&gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");&lt;/script&gt;

&lt;g:plusone size="medium" href="http://www.west-wind.com/weblog/posts/2013/Apr/30/A-WebAPI-Basic-Authentication-MessageHandler" "&gt;&lt;/g:plusone&gt;
&lt;script type="text/javascript"&gt;
  (function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();
&lt;/script&gt;

&lt;/div&gt;&lt;/small&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=tLyuolUcxag:KRYEY0AgOhE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=tLyuolUcxag:KRYEY0AgOhE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=tLyuolUcxag:KRYEY0AgOhE:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=tLyuolUcxag:KRYEY0AgOhE:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=tLyuolUcxag:KRYEY0AgOhE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=tLyuolUcxag:KRYEY0AgOhE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=tLyuolUcxag:KRYEY0AgOhE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=tLyuolUcxag:KRYEY0AgOhE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=tLyuolUcxag:KRYEY0AgOhE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/tLyuolUcxag" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/Apr/30/A-WebAPI-Basic-Authentication-MessageHandler</feedburner:origLink></item>
    <item>
      <title>A WebAPI Basic Authentication Authorization Filter</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/u5GfOCYG_K8/A-WebAPI-Basic-Authentication-Authorization-Filter</link>
      <guid isPermaLink="false">104409_201304181835</guid>
      <pubDate>Thu, 18 Apr 2013 18:35:19 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/Apr/18/A-WebAPI-Basic-Authentication-Authorization-Filter#Comments</comments>
      <slash:comments>9</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=104409</wfw:commentRss>
      <category>Web Api</category>
      <category>Security</category>
      <description>Recently I needed to implement user based security in a Web API application that's easily accessible from a variety of clients. The customer asked specifically for Basic Auth support and so needed to implement custom Basic Auth support. In this post I describe a simple AuthorizationFilter based implementation of Basic Authentication for Web API.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=u5GfOCYG_K8:7h6puuobOTM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=u5GfOCYG_K8:7h6puuobOTM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=u5GfOCYG_K8:7h6puuobOTM:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=u5GfOCYG_K8:7h6puuobOTM:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=u5GfOCYG_K8:7h6puuobOTM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=u5GfOCYG_K8:7h6puuobOTM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=u5GfOCYG_K8:7h6puuobOTM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=u5GfOCYG_K8:7h6puuobOTM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=u5GfOCYG_K8:7h6puuobOTM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/u5GfOCYG_K8" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/Apr/18/A-WebAPI-Basic-Authentication-Authorization-Filter</feedburner:origLink></item>
    <item>
      <title>WebAPI: Getting Headers, QueryString and Cookie Values</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/vlZtxSG8rGE/WebAPI-Getting-Headers-QueryString-and-Cookie-Values</link>
      <guid isPermaLink="false">101264_201304151048</guid>
      <pubDate>Mon, 15 Apr 2013 10:48:44 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/Apr/15/WebAPI-Getting-Headers-QueryString-and-Cookie-Values#Comments</comments>
      <slash:comments>3</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=101264</wfw:commentRss>
      <category>Web Api</category>
      <description>Finally got tired to trying to remember how to get at the Headers, Cookies and QueryString 'collections' in Web API, since there's zero consistency and messy nested collections to deal with. Here's are a set of extension methods that make it easier.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=vlZtxSG8rGE:6z9X7rvcigc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=vlZtxSG8rGE:6z9X7rvcigc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=vlZtxSG8rGE:6z9X7rvcigc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=vlZtxSG8rGE:6z9X7rvcigc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=vlZtxSG8rGE:6z9X7rvcigc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=vlZtxSG8rGE:6z9X7rvcigc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=vlZtxSG8rGE:6z9X7rvcigc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=vlZtxSG8rGE:6z9X7rvcigc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=vlZtxSG8rGE:6z9X7rvcigc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/vlZtxSG8rGE" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/Apr/15/WebAPI-Getting-Headers-QueryString-and-Cookie-Values</feedburner:origLink></item>
    <item>
      <title>UNC Drive Mapping Failures: Network name cannot be found</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/GrYDt8TohP4/UNC-Drive-Mapping-Failures-Network-name-cannot-be-found</link>
      <guid isPermaLink="false">90916_201304050658</guid>
      <pubDate>Fri, 05 Apr 2013 06:58:00 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/Apr/04/UNC-Drive-Mapping-Failures-Network-name-cannot-be-found#Comments</comments>
      <slash:comments>6</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=90916</wfw:commentRss>
      <category>Windows</category>
      <description>Ran into a nasty issue yesterday trying to map a remote drive via UNC pathing. Basically I was unable to connect with failures occurring instantly and without prompting for credentials even when asking to use different credentials. Turns out the problem is the Network Provider Order - here's more info.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=GrYDt8TohP4:NKO-t4qBWBQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=GrYDt8TohP4:NKO-t4qBWBQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=GrYDt8TohP4:NKO-t4qBWBQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=GrYDt8TohP4:NKO-t4qBWBQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=GrYDt8TohP4:NKO-t4qBWBQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=GrYDt8TohP4:NKO-t4qBWBQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=GrYDt8TohP4:NKO-t4qBWBQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=GrYDt8TohP4:NKO-t4qBWBQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=GrYDt8TohP4:NKO-t4qBWBQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/GrYDt8TohP4" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/Apr/04/UNC-Drive-Mapping-Failures-Network-name-cannot-be-found</feedburner:origLink></item>
    <item>
      <title>A small, intra-app Object to String Serializer</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/SKcGpzcO-3M/A-small-intraapp-Object-to-String-Serializer</link>
      <guid isPermaLink="false">87530_201304010941</guid>
      <pubDate>Mon, 01 Apr 2013 09:41:14 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/Apr/01/A-small-intraapp-Object-to-String-Serializer#Comments</comments>
      <slash:comments>3</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=87530</wfw:commentRss>
      <category> ASP.NET</category>
      <category>.NET</category>
      <category>C#</category>
      <description>On a few occasions I've needed a very compact serializer for small and simple, flat object serialization, typically for storage in Cookies or a FormsAuthentication ticket in ASP.NET. XML and JSON serialization are too verbose for those scenarios so a simple property serializer that strings together the values was needed. Originally I did this by hand, but here is a class that automates the process.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=SKcGpzcO-3M:_f1ITNO7GE4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=SKcGpzcO-3M:_f1ITNO7GE4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=SKcGpzcO-3M:_f1ITNO7GE4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=SKcGpzcO-3M:_f1ITNO7GE4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=SKcGpzcO-3M:_f1ITNO7GE4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=SKcGpzcO-3M:_f1ITNO7GE4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=SKcGpzcO-3M:_f1ITNO7GE4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=SKcGpzcO-3M:_f1ITNO7GE4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=SKcGpzcO-3M:_f1ITNO7GE4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/SKcGpzcO-3M" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/Apr/01/A-small-intraapp-Object-to-String-Serializer</feedburner:origLink></item>
    <item>
      <title>Experimenting with Online Backups</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/S8KwfvbiR7Q/Experimenting-with-Online-Backups</link>
      <guid isPermaLink="false">83258_201303272107</guid>
      <pubDate>Wed, 27 Mar 2013 21:07:23 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/Mar/27/Experimenting-with-Online-Backups#Comments</comments>
      <slash:comments>19</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=83258</wfw:commentRss>
      <category>Office</category>
      <description>I recently spent a bit of time looking at online synching/backup software to provide a little more resilience to my backup situation. Lots of choices but nothing that's really quite perfect yet. Here's what I found.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=S8KwfvbiR7Q:b187co4lK-o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=S8KwfvbiR7Q:b187co4lK-o:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=S8KwfvbiR7Q:b187co4lK-o:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=S8KwfvbiR7Q:b187co4lK-o:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=S8KwfvbiR7Q:b187co4lK-o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=S8KwfvbiR7Q:b187co4lK-o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=S8KwfvbiR7Q:b187co4lK-o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=S8KwfvbiR7Q:b187co4lK-o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=S8KwfvbiR7Q:b187co4lK-o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/S8KwfvbiR7Q" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/Mar/27/Experimenting-with-Online-Backups</feedburner:origLink></item>
    <item>
      <title>Firing an Entity Framework Database Initializer from within DbContext</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/anTacAcLQCQ/Firing-an-Entity-Framework-Database-Initializer-from-within-DbContext</link>
      <guid isPermaLink="false">81982_201303261953</guid>
      <pubDate>Tue, 26 Mar 2013 19:53:00 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/Mar/26/Firing-an-Entity-Framework-Database-Initializer-from-within-DbContext#Comments</comments>
      <slash:comments>4</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=81982</wfw:commentRss>
      <category>Entity Framework</category>
      <description>Database initializers in Entity Framework can be a pain, especially when you're using EF as part of smaller components that may or may not load into a database shared with other EF Contexts. Here's a small helper utility that lets you internalize the database initializer and fire it the first time the context is loaded.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=anTacAcLQCQ:2x5fLpw1rCE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=anTacAcLQCQ:2x5fLpw1rCE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=anTacAcLQCQ:2x5fLpw1rCE:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=anTacAcLQCQ:2x5fLpw1rCE:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=anTacAcLQCQ:2x5fLpw1rCE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=anTacAcLQCQ:2x5fLpw1rCE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=anTacAcLQCQ:2x5fLpw1rCE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=anTacAcLQCQ:2x5fLpw1rCE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=anTacAcLQCQ:2x5fLpw1rCE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/anTacAcLQCQ" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/Mar/26/Firing-an-Entity-Framework-Database-Initializer-from-within-DbContext</feedburner:origLink></item>
    <item>
      <title>Text Editor Associations/Extensions in Visual Studio getting lost</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/NIsOCSgwE4I/Text-Editor-AssociationsExtensions-in-Visual-Studio-getting-lost</link>
      <guid isPermaLink="false">78823_201303230147</guid>
      <pubDate>Sat, 23 Mar 2013 01:47:46 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/Mar/22/Text-Editor-AssociationsExtensions-in-Visual-Studio-getting-lost#Comments</comments>
      <slash:comments>4</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=78823</wfw:commentRss>
      <category>Visual Studio</category>
      <description>Visual Studio allows you to create text editor extensions that map standard Visual Studio editors to custom extensions. It's a useful feature that I use a lot with some older products, but unfortunately I've seen alot of cases where the editor/extension mapping gets lost even though Visual Studio still shows it as registered. Here's more info on the problem and how to fix it at least temporarily.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=NIsOCSgwE4I:2N0tYnr6Y_U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=NIsOCSgwE4I:2N0tYnr6Y_U:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=NIsOCSgwE4I:2N0tYnr6Y_U:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=NIsOCSgwE4I:2N0tYnr6Y_U:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=NIsOCSgwE4I:2N0tYnr6Y_U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=NIsOCSgwE4I:2N0tYnr6Y_U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=NIsOCSgwE4I:2N0tYnr6Y_U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=NIsOCSgwE4I:2N0tYnr6Y_U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=NIsOCSgwE4I:2N0tYnr6Y_U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/NIsOCSgwE4I" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/Mar/22/Text-Editor-AssociationsExtensions-in-Visual-Studio-getting-lost</feedburner:origLink></item>
    <item>
      <title>Using plUpload to upload Files with ASP.NET</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/MAE6cG4UtMw/Using-plUpload-to-upload-Files-with-ASPNET</link>
      <guid isPermaLink="false">66501_201303121042</guid>
      <pubDate>Tue, 12 Mar 2013 10:42:00 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/Mar/12/Using-plUpload-to-upload-Files-with-ASPNET#Comments</comments>
      <slash:comments>14</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=66501</wfw:commentRss>
      <category> ASP.NET</category>
      <category>JavaScript</category>
      <description>plUpload is a popular client side multi-file upload component. In this article I describe a small library that abstracts the server side processing of uploaded files with an HTTP handler demonstrate putting it all together with a small Image Upload sample application.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=MAE6cG4UtMw:OrK7zZLroag:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=MAE6cG4UtMw:OrK7zZLroag:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=MAE6cG4UtMw:OrK7zZLroag:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=MAE6cG4UtMw:OrK7zZLroag:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=MAE6cG4UtMw:OrK7zZLroag:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=MAE6cG4UtMw:OrK7zZLroag:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=MAE6cG4UtMw:OrK7zZLroag:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=MAE6cG4UtMw:OrK7zZLroag:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=MAE6cG4UtMw:OrK7zZLroag:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/MAE6cG4UtMw" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/Mar/12/Using-plUpload-to-upload-Files-with-ASPNET</feedburner:origLink></item>
    <item>
      <title>Sql Connection Strings in .Config Files vs. Source Control</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/2ZbWuq5wJRA/Sql-Connection-Strings-in-Config-Files-vs-Source-Control</link>
      <guid isPermaLink="false">59057_201302272018</guid>
      <pubDate>Wed, 27 Feb 2013 20:18:56 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/Feb/27/Sql-Connection-Strings-in-Config-Files-vs-Source-Control#Comments</comments>
      <slash:comments>9</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=59057</wfw:commentRss>
      <category> ADO.NET</category>
      <category>.NET</category>
      <category>Entity Framework</category>
      <category>ASP.NET</category>
      <category>Source Control</category>
      <category>Deployment</category>
      <description>Connection strings in projects under source control can be problematic. Each Source Control user can potentially have different connection settings to use a database connection and these differences can't be easily reconciled via Source Control. Here are a couple of approaches that have worked for me to deal with this issue.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=2ZbWuq5wJRA:yJDZVwdFHvc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=2ZbWuq5wJRA:yJDZVwdFHvc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=2ZbWuq5wJRA:yJDZVwdFHvc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=2ZbWuq5wJRA:yJDZVwdFHvc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=2ZbWuq5wJRA:yJDZVwdFHvc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=2ZbWuq5wJRA:yJDZVwdFHvc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=2ZbWuq5wJRA:yJDZVwdFHvc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=2ZbWuq5wJRA:yJDZVwdFHvc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=2ZbWuq5wJRA:yJDZVwdFHvc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/2ZbWuq5wJRA" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/Feb/27/Sql-Connection-Strings-in-Config-Files-vs-Source-Control</feedburner:origLink></item>
    <item>
      <title>Visual Studio Web Publish Lockup? Check for invisible Window</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/AvstL_lZQ8g/Visual-Studio-Web-Publish-Lockup-Check-for-invisible-Window</link>
      <guid isPermaLink="false">54362_201302210825</guid>
      <pubDate>Thu, 21 Feb 2013 08:25:23 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2013/Feb/21/Visual-Studio-Web-Publish-Lockup-Check-for-invisible-Window#Comments</comments>
      <slash:comments>4</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=54362</wfw:commentRss>
      <category> Visual Studio</category>
      <category> ASP.NET</category>
      <description>If your Web Publish dialog appears to lock up Visual Studio when you click on the Publish option, most likely the Web Publish window is hidden on a second screen that is not currently visible. Here's how you can work around this annoying little bug.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=AvstL_lZQ8g:cnFUdlF3mJs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=AvstL_lZQ8g:cnFUdlF3mJs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=AvstL_lZQ8g:cnFUdlF3mJs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=AvstL_lZQ8g:cnFUdlF3mJs:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=AvstL_lZQ8g:cnFUdlF3mJs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=AvstL_lZQ8g:cnFUdlF3mJs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=AvstL_lZQ8g:cnFUdlF3mJs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=AvstL_lZQ8g:cnFUdlF3mJs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=AvstL_lZQ8g:cnFUdlF3mJs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/AvstL_lZQ8g" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2013/Feb/21/Visual-Studio-Web-Publish-Lockup-Check-for-invisible-Window</feedburner:origLink></item>
    <item>
      <title>Building a better .NET Application Configuration Class - revisited</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/I41oCo7CAW4/Building-a-better-NET-Application-Configuration-Class-revisited</link>
      <guid isPermaLink="false">1563691_201212281241</guid>
      <pubDate>Fri, 28 Dec 2012 12:41:29 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Dec/28/Building-a-better-NET-Application-Configuration-Class-revisited#Comments</comments>
      <slash:comments>17</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1563691</wfw:commentRss>
      <category>.NET</category>
      <category>ASP.NET</category>
      <description>Managing configuration settings is an important part of successful applications. It should be easy to ensure that you can easily access and modify configuration values within your applications. If it's not - well things don't get parameterized as much as they should. In this post I discuss a custom Application Configuration class that makes it super easy to create reusable configuration objects in your applications using a code-first approach and the ability to persist configuration information into various types of configuration stores.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=I41oCo7CAW4:l267RuULx5Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=I41oCo7CAW4:l267RuULx5Q:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=I41oCo7CAW4:l267RuULx5Q:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=I41oCo7CAW4:l267RuULx5Q:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=I41oCo7CAW4:l267RuULx5Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=I41oCo7CAW4:l267RuULx5Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=I41oCo7CAW4:l267RuULx5Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=I41oCo7CAW4:l267RuULx5Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=I41oCo7CAW4:l267RuULx5Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/I41oCo7CAW4" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Dec/28/Building-a-better-NET-Application-Configuration-Class-revisited</feedburner:origLink></item>
    <item>
      <title>Process.Start() and ShellExecute() fails with URLs on Windows 8</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/hSeR7Mp5FcQ/ProcessStart-and-ShellExecute-fails-with-URLs-on-Windows-8</link>
      <guid isPermaLink="false">1550562_201212130414</guid>
      <pubDate>Thu, 13 Dec 2012 04:14:30 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Dec/12/ProcessStart-and-ShellExecute-fails-with-URLs-on-Windows-8#Comments</comments>
      <slash:comments>6</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1550562</wfw:commentRss>
      <category>Windows</category>
      <category>.NET</category>
      <description>It appears that on Windows 8 there's a bug in the ShellExecute() API that causes failure in URL navigation when running under Administrative privileges.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hSeR7Mp5FcQ:xJMkY-ZqIKc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hSeR7Mp5FcQ:xJMkY-ZqIKc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hSeR7Mp5FcQ:xJMkY-ZqIKc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=hSeR7Mp5FcQ:xJMkY-ZqIKc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hSeR7Mp5FcQ:xJMkY-ZqIKc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=hSeR7Mp5FcQ:xJMkY-ZqIKc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hSeR7Mp5FcQ:xJMkY-ZqIKc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=hSeR7Mp5FcQ:xJMkY-ZqIKc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hSeR7Mp5FcQ:xJMkY-ZqIKc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/hSeR7Mp5FcQ" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Dec/12/ProcessStart-and-ShellExecute-fails-with-URLs-on-Windows-8</feedburner:origLink></item>
    <item>
      <title>A Small Utility to Delete Files recursively by Date</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/Fb6ZfyB-hbk/A-Small-Utility-to-Delete-Files-recursively-by-Date</link>
      <guid isPermaLink="false">1539804_201212010513</guid>
      <pubDate>Sat, 01 Dec 2012 05:13:05 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Nov/30/A-Small-Utility-to-Delete-Files-recursively-by-Date#Comments</comments>
      <slash:comments>7</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1539804</wfw:commentRss>
      <category>Windows</category>
      <category>CSharp</category>
      <description>After again searching for a script or tool that can easily delete files recursively down a folder hierarchy with a date filter and coming up with several 'almost there' solutions I sat down and created a small Console app that handles this task. I've posted the resulting project on Github, with both the binary and source code, in case you ever find yourself with the same need.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=Fb6ZfyB-hbk:-30zhVNYzRs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=Fb6ZfyB-hbk:-30zhVNYzRs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=Fb6ZfyB-hbk:-30zhVNYzRs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=Fb6ZfyB-hbk:-30zhVNYzRs:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=Fb6ZfyB-hbk:-30zhVNYzRs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=Fb6ZfyB-hbk:-30zhVNYzRs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=Fb6ZfyB-hbk:-30zhVNYzRs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=Fb6ZfyB-hbk:-30zhVNYzRs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=Fb6ZfyB-hbk:-30zhVNYzRs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/Fb6ZfyB-hbk" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Nov/30/A-Small-Utility-to-Delete-Files-recursively-by-Date</feedburner:origLink></item>
    <item>
      <title>Set-Cookie Headers getting stripped in ASP.NET HttpHandlers</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/sp7QuFdX2rI/SetCookie-Headers-getting-stripped-in-ASPNET-HttpHandlers</link>
      <guid isPermaLink="false">1538673_201211300138</guid>
      <pubDate>Fri, 30 Nov 2012 01:38:26 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Nov/29/SetCookie-Headers-getting-stripped-in-ASPNET-HttpHandlers#Comments</comments>
      <slash:comments>3</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1538673</wfw:commentRss>
      <category>ASP.NET</category>
      <category> IIS7</category>
      <description>Ran into a nasty problem with Cookies not getting sent in HttpHandler code when using Response.AppendHandler() with the Set-Cookie key. It turns out it's a very narrow edge case, but one that can bite in unexpected system level applications.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=sp7QuFdX2rI:dmxCrte4GAk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=sp7QuFdX2rI:dmxCrte4GAk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=sp7QuFdX2rI:dmxCrte4GAk:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=sp7QuFdX2rI:dmxCrte4GAk:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=sp7QuFdX2rI:dmxCrte4GAk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=sp7QuFdX2rI:dmxCrte4GAk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=sp7QuFdX2rI:dmxCrte4GAk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=sp7QuFdX2rI:dmxCrte4GAk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=sp7QuFdX2rI:dmxCrte4GAk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/sp7QuFdX2rI" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Nov/29/SetCookie-Headers-getting-stripped-in-ASPNET-HttpHandlers</feedburner:origLink></item>
    <item>
      <title>WCF WS-Security and WSE Nonce Authentication</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/744pK_SH_zw/WCF-WSSecurity-and-WSE-Nonce-Authentication</link>
      <guid isPermaLink="false">1532939_201211241331</guid>
      <pubDate>Sat, 24 Nov 2012 13:31:00 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Nov/24/WCF-WSSecurity-and-WSE-Nonce-Authentication#Comments</comments>
      <slash:comments>5</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1532939</wfw:commentRss>
      <category>WCF</category>
      <category>Web Services</category>
      <description>I ran into a Web Service last week that required WS-Security headers with an embedded nonce value. Unfortunately WCF doesn't support this particular protocol directly. Here's how to create custom credentials and a tokenizer to write out the customized WS-Security header.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=744pK_SH_zw:BLNQ6k1i--Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=744pK_SH_zw:BLNQ6k1i--Y:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=744pK_SH_zw:BLNQ6k1i--Y:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=744pK_SH_zw:BLNQ6k1i--Y:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=744pK_SH_zw:BLNQ6k1i--Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=744pK_SH_zw:BLNQ6k1i--Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=744pK_SH_zw:BLNQ6k1i--Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=744pK_SH_zw:BLNQ6k1i--Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=744pK_SH_zw:BLNQ6k1i--Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/744pK_SH_zw" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Nov/24/WCF-WSSecurity-and-WSE-Nonce-Authentication</feedburner:origLink></item>
    <item>
      <title>Windows 8 Live Accounts and the actual Windows Account</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/hDgF3L02VRM/Windows-8-Live-Accounts-and-the-actual-Windows-Account</link>
      <guid isPermaLink="false">1528874_201211200410</guid>
      <pubDate>Tue, 20 Nov 2012 04:10:30 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Nov/19/Windows-8-Live-Accounts-and-the-actual-Windows-Account#Comments</comments>
      <slash:comments>2</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1528874</wfw:commentRss>
      <category>Windows</category>
      <description>When you log on with a Windows Live account in Windows 8, what really happens to your credentials? It's not quite obvious, so here are a few thoughts and examples that demonstrate the relationship between Windows and Live accounts.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hDgF3L02VRM:oUgiCFFxko8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hDgF3L02VRM:oUgiCFFxko8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hDgF3L02VRM:oUgiCFFxko8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=hDgF3L02VRM:oUgiCFFxko8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hDgF3L02VRM:oUgiCFFxko8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=hDgF3L02VRM:oUgiCFFxko8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hDgF3L02VRM:oUgiCFFxko8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=hDgF3L02VRM:oUgiCFFxko8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=hDgF3L02VRM:oUgiCFFxko8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/hDgF3L02VRM" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Nov/19/Windows-8-Live-Accounts-and-the-actual-Windows-Account</feedburner:origLink></item>
    <item>
      <title>DevConnections Session Slides, Samples and Links</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/JbGLCNkZ4jk/DevConnections-Session-Slides-Samples-and-Links</link>
      <guid isPermaLink="false">1518345_201211131320</guid>
      <pubDate>Tue, 13 Nov 2012 13:20:02 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Nov/13/DevConnections-Session-Slides-Samples-and-Links#Comments</comments>
      <slash:comments>2</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1518345</wfw:commentRss>
      <category>Conferences</category>
      <category>ASP.NET</category>
      <description>Finally getting around to posting links to my DevConnections session in Vegas a couple of weeks ago. It was a fun time after a long absence from speaking...&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=JbGLCNkZ4jk:kjZE18m_GyQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=JbGLCNkZ4jk:kjZE18m_GyQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=JbGLCNkZ4jk:kjZE18m_GyQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=JbGLCNkZ4jk:kjZE18m_GyQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=JbGLCNkZ4jk:kjZE18m_GyQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=JbGLCNkZ4jk:kjZE18m_GyQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=JbGLCNkZ4jk:kjZE18m_GyQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=JbGLCNkZ4jk:kjZE18m_GyQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=JbGLCNkZ4jk:kjZE18m_GyQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/JbGLCNkZ4jk" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Nov/13/DevConnections-Session-Slides-Samples-and-Links</feedburner:origLink></item>
    <item>
      <title>HTML5 Input type=date Formatting Issues</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/WRq49mua9ig/HTML5-Input-typedate-Formatting-Issues</link>
      <guid isPermaLink="false">1513858_201211090227</guid>
      <pubDate>Fri, 09 Nov 2012 02:27:09 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Nov/08/HTML5-Input-typedate-Formatting-Issues#Comments</comments>
      <slash:comments>3</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1513858</wfw:commentRss>
      <category>HTML5</category>
      <category>HTML</category>
      <description>The new HTML5 Input types make it easier to display special formatted input types like dates and email addresses. Browsers that support them display a nice UI for editing and can validate values. However, support currently is limited and date formatting especially is complex as it involves using an ISO date format that doesn't fall back nicely to non-supporting browsers.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=WRq49mua9ig:JgfrK-NiyFY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=WRq49mua9ig:JgfrK-NiyFY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=WRq49mua9ig:JgfrK-NiyFY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=WRq49mua9ig:JgfrK-NiyFY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=WRq49mua9ig:JgfrK-NiyFY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=WRq49mua9ig:JgfrK-NiyFY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=WRq49mua9ig:JgfrK-NiyFY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=WRq49mua9ig:JgfrK-NiyFY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=WRq49mua9ig:JgfrK-NiyFY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/WRq49mua9ig" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Nov/08/HTML5-Input-typedate-Formatting-Issues</feedburner:origLink></item>
    <item>
      <title>Back to Basics: When does a .NET Assembly Dependency get loaded</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/j0Hqfm81L1A/Back-to-Basics-When-does-a-NET-Assembly-Dependency-get-loaded</link>
      <guid isPermaLink="false">1509201_201211032339</guid>
      <pubDate>Sat, 03 Nov 2012 23:39:12 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Nov/03/Back-to-Basics-When-does-a-NET-Assembly-Dependency-get-loaded#Comments</comments>
      <slash:comments>4</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1509201</wfw:commentRss>
      <category>.NET</category>
      <category>CSharp</category>
      <description>Assembly loading in .NET is often a cause of confusion. So many times I've heard how evil it is to add a reference to some big assembly, if it's just a minor feature. But .NET is really smart in assembly loading and by default uses just in time loading of referenced assemblies. In this post I review when assemblies are loaded with a few simple examples that demonstrate the process.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=j0Hqfm81L1A:Q0adoX2wdR8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=j0Hqfm81L1A:Q0adoX2wdR8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=j0Hqfm81L1A:Q0adoX2wdR8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=j0Hqfm81L1A:Q0adoX2wdR8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=j0Hqfm81L1A:Q0adoX2wdR8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=j0Hqfm81L1A:Q0adoX2wdR8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=j0Hqfm81L1A:Q0adoX2wdR8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=j0Hqfm81L1A:Q0adoX2wdR8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=j0Hqfm81L1A:Q0adoX2wdR8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/j0Hqfm81L1A" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Nov/03/Back-to-Basics-When-does-a-NET-Assembly-Dependency-get-loaded</feedburner:origLink></item>
    <item>
      <title>Caveats with the runAllManagedModulesForAllRequests in IIS 7/8</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/6YRd7y82bT8/Caveats-with-the-runAllManagedModulesForAllRequests-in-IIS-78</link>
      <guid isPermaLink="false">1495164_201210260615</guid>
      <pubDate>Fri, 26 Oct 2012 06:15:00 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Oct/25/Caveats-with-the-runAllManagedModulesForAllRequests-in-IIS-78#Comments</comments>
      <slash:comments>5</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1495164</wfw:commentRss>
      <category> IIS7</category>
      <category> ASP.NET</category>
      <description>IIS 7 and 8 support using Managed Modules to handle access to all IIS request content which is very powerful. But sometimes you actually want to not handle non-ASP.NET content and it's not very obvious how to minimize access to non-ASP.NET requests in managed modules.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6YRd7y82bT8:ua2oO70Z0SU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6YRd7y82bT8:ua2oO70Z0SU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6YRd7y82bT8:ua2oO70Z0SU:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=6YRd7y82bT8:ua2oO70Z0SU:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6YRd7y82bT8:ua2oO70Z0SU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=6YRd7y82bT8:ua2oO70Z0SU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6YRd7y82bT8:ua2oO70Z0SU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=6YRd7y82bT8:ua2oO70Z0SU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6YRd7y82bT8:ua2oO70Z0SU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/6YRd7y82bT8" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Oct/25/Caveats-with-the-runAllManagedModulesForAllRequests-in-IIS-78</feedburner:origLink></item>
    <item>
      <title>Dynamic Code for type casting Generic Types 'generically' in C#</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/9QPrvhngzyo/Dynamic-Code-for-type-casting-Generic-Types-generically-in-C</link>
      <guid isPermaLink="false">1492890_201210230906</guid>
      <pubDate>Tue, 23 Oct 2012 09:06:26 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Oct/23/Dynamic-Code-for-type-casting-Generic-Types-generically-in-C#Comments</comments>
      <slash:comments>9</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1492890</wfw:commentRss>
      <category>CSharp</category>
      <description>Here's a short entry on how dynamic can be a life saver when you can't cast a type between multiple objects, specifically when the object in question is a generic type without a common base type to cast to.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=9QPrvhngzyo:7XJrpwN5v-I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=9QPrvhngzyo:7XJrpwN5v-I:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=9QPrvhngzyo:7XJrpwN5v-I:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=9QPrvhngzyo:7XJrpwN5v-I:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=9QPrvhngzyo:7XJrpwN5v-I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=9QPrvhngzyo:7XJrpwN5v-I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=9QPrvhngzyo:7XJrpwN5v-I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=9QPrvhngzyo:7XJrpwN5v-I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=9QPrvhngzyo:7XJrpwN5v-I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/9QPrvhngzyo" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Oct/23/Dynamic-Code-for-type-casting-Generic-Types-generically-in-C</feedburner:origLink></item>
    <item>
      <title>A tiny Utility to recycle an IIS Application Pool</title>
      <link>http://feedproxy.google.com/~r/RickStrahl/~3/6MQRQCu5VuY/A-tiny-Utility-to-recycle-an-IIS-Application-Pool</link>
      <guid isPermaLink="false">1474638_201210021029</guid>
      <pubDate>Tue, 02 Oct 2012 10:29:36 GMT</pubDate>
      <dc:creator>Rick Strahl</dc:creator>
      <comments>http://www.west-wind.com/weblog/posts/2012/Oct/02/A-tiny-Utility-to-recycle-an-IIS-Application-Pool#Comments</comments>
      <slash:comments>9</slash:comments>
      <wfw:commentRss>http://west-wind.com/weblog/commentrss.aspx?id=1474638</wfw:commentRss>
      <category> IIS7</category>
      <category>.NET</category>
      <category>Windows</category>
      <description>Here's a small console app to recycle an Application Pool which seems to be something I've needed to do repeatedly in the past.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6MQRQCu5VuY:DvUP4pZIHGU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6MQRQCu5VuY:DvUP4pZIHGU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6MQRQCu5VuY:DvUP4pZIHGU:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=6MQRQCu5VuY:DvUP4pZIHGU:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6MQRQCu5VuY:DvUP4pZIHGU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=6MQRQCu5VuY:DvUP4pZIHGU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6MQRQCu5VuY:DvUP4pZIHGU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?i=6MQRQCu5VuY:DvUP4pZIHGU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RickStrahl?a=6MQRQCu5VuY:DvUP4pZIHGU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RickStrahl?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RickStrahl/~4/6MQRQCu5VuY" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.west-wind.com/weblog/posts/2012/Oct/02/A-tiny-Utility-to-recycle-an-IIS-Application-Pool</feedburner:origLink></item>
  </channel>
</rss>
