<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Rob's Blog</title>
        <link>http://robrich.org/Default.aspx</link>
        <description>Rob's Blog</description>
        <language>en-US</language>
        <copyright>Rob Richardson</copyright>
        <generator>Subtext Version 2.5.0.3</generator>
        <image>
            <title>Rob's Blog</title>
            <url>http://robrich.org/images/RSS2Image.gif</url>
            <link>http://robrich.org/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Git, GitHub, and GitFlow at PhxJUG</title>
            <category>Events</category>
            <link>http://robrich.org/archive/2013/03/14/Git-GitHub-and-GitFlow-at-PhxJUG.aspx</link>
            <description>It was my pleasure to present the follow-up to &lt;a href="/archive/2012/04/27/Thinking-in-Git.aspx"&gt;Thinking in Git&lt;/a&gt;, "Git, GitHub, and GitFlow" at the Phoenix Java Users' Group last night.  It was a wonderful discussion.  We began by reviewing the basic methodology of Git, comparing it to SVN, and in general comparing distributed version control systems to client/server systems.  We then looked at the features and benefits of GitHub, an online Git repository and social coding community.  We then looked at GitFlow, a workflow for creating features and publishing versions.  You can download the slides &lt;a href="/content/git_github_gitflow.zip"&gt;here&lt;/a&gt;.&lt;img src="http://robrich.org/aggbug/97.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rob Richardson</dc:creator>
            <guid>http://robrich.org/archive/2013/03/14/Git-GitHub-and-GitFlow-at-PhxJUG.aspx</guid>
            <pubDate>Thu, 14 Mar 2013 17:13:11 GMT</pubDate>
            <comments>http://robrich.org/archive/2013/03/14/Git-GitHub-and-GitFlow-at-PhxJUG.aspx#feedback</comments>
            <wfw:commentRss>http://robrich.org/comments/commentRss/97.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Backbone.JS presentation at Phoenix JavaScript Meetup</title>
            <category>Events</category>
            <link>http://robrich.org/archive/2013/02/20/Backbone-JS-presentation-at-Phoenix-JavaScript-Meetup.aspx</link>
            <description>It's my pleasure to present &lt;a href="http://backbonejs.org"&gt;Backbone.JS&lt;/a&gt; at this evening's &lt;a href="http://www.phoenixjavascript.org/"&gt;Phoenix JavaScript Meetup&lt;/a&gt;.  Backbone is a great library for achieving separation of concerns in client-side code.  It is a great addition to your botique of client-side libraries, offering an a-la-carte, unopinionated framework for pub/sub eventing, declarative DOM event binding, one-way model binding, a great client REST mechanism for data persistence, and routers for "hash-bang" in-page view navigation.  You can get the slides and content &lt;a href="/content/Backbone-prez.zip"&gt;here&lt;/a&gt;.  Most of the pages work without a server-side data store, so you can safely ignore the node content.  When you're ready to fire up the full monty, run &lt;span style="font-family: Courier New;"&gt;npm install&lt;/span&gt; in the code directory, then &lt;span style="font-family: Courier New;"&gt;node server.js&lt;/span&gt; to launch the server, and connect with your favorite browser.  Happy coding!&lt;img src="http://robrich.org/aggbug/96.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rob Richardson</dc:creator>
            <guid>http://robrich.org/archive/2013/02/20/Backbone-JS-presentation-at-Phoenix-JavaScript-Meetup.aspx</guid>
            <pubDate>Wed, 20 Feb 2013 20:47:06 GMT</pubDate>
            <comments>http://robrich.org/archive/2013/02/20/Backbone-JS-presentation-at-Phoenix-JavaScript-Meetup.aspx#feedback</comments>
            <wfw:commentRss>http://robrich.org/comments/commentRss/96.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Git on-premise hosting</title>
            <category>Tools</category>
            <link>http://robrich.org/archive/2012/12/29/Git-on-premise-hosting.aspx</link>
            <description>All else being equal, you should use GitHub (&lt;a href="http://www.github.com/"&gt;http://www.github.com/&lt;/a&gt;) for Git hosting.  GitHub is indeed a cloud-hosted git repository, but it's so much more than that.  It has integrated issue tracking, comment on any line of any commit (social coding), and pull request (e.g. "will you please review and pull my content").  It's truly a revolution in source control, and there's really nothing like it.
&lt;p&gt;If you're forced into an on-premise solution, the natural draw is to facilitate "Git Smart HTTP" in IIS.  Git has native Apache bindings, but doesn't have anything native for IIS, so there's a plethora of home-grown answers.  The field is ripe for someone like Visual SVN to come through and make a good, GUI-driven Git webhost, though even Visual SVN is technically Apache.  You can use Git without http hosting as well (same as with SVN), though http hosted git servers are cool.  :D&lt;/p&gt;
&lt;p&gt;I use WebGit.NET: &lt;a href="https://github.com/otac0n/WebGitNet/wiki/Getting-Started"&gt;https://github.com/otac0n/WebGitNet/wiki/Getting-Started&lt;/a&gt;  It has no built-in authentication, but none of these really do.  &lt;a href="http://serverfault.com/questions/369573/what-iis-authentication-method-to-use-with-git-server-hosted-on-iis"&gt;http://serverfault.com/questions/369573/what-iis-authentication-method-to-use-with-git-server-hosted-on-iis&lt;/a&gt; has some descent ideas on how to secure it, but all add weight to each repository access operation.  I chose instead to only bind to 127.0.0.1, so you'd need to be physically on my machine to get to the site, and if you're that far, you may as well be in my repository.  You could do something similar by exposing it only to the LAN (and by extension VPN users).&lt;/p&gt;
&lt;p&gt;If I was to do it again, I'd investigate kudu: &lt;a href="http://blog.davidebbo.com/2012/06/introducing-open-source-engine-behind.html"&gt;http://blog.davidebbo.com/2012/06/introducing-open-source-engine-behind.html&lt;/a&gt; and &lt;a href="http://blog.davidebbo.com/2012/06/developing-kudu-locally-and-on-azure.html"&gt;http://blog.davidebbo.com/2012/06/developing-kudu-locally-and-on-azure.html&lt;/a&gt;  It's what Microsoft built for Azure git deployment.  But as part of that, it has a git web engine that may be useful separately.  It has one IIS site for administration, and a second for repository access.  That's a bit weird, but it does mean you can secure them separately.&lt;/p&gt;
&lt;p&gt;Other popular IIS-hosted Git solutions include:&lt;/p&gt;
- GitWebAccess: &lt;a href="http://gitweb.codeplex.com/"&gt;http://gitweb.codeplex.com/&lt;/a&gt;  I used this one for a time.
&lt;p&gt;- GitDotNet: &lt;a href="http://www.jeremyskinner.co.uk/2010/06/25/hosting-a-git-server-under-iis7-on-windows/"&gt;http://www.jeremyskinner.co.uk/2010/06/25/hosting-a-git-server-under-iis7-on-windows/&lt;/a&gt;  The author recommends against his solution.   &lt;/p&gt;
&lt;p&gt;- GitAspx: &lt;a href="http://www.jeremyskinner.co.uk/2010/10/19/gitaspx-0-3-available/"&gt;http://www.jeremyskinner.co.uk/2010/10/19/gitaspx-0-3-available/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- Bonobo: &lt;a href="http://www.chodounsky.net/bonobo-git-server/"&gt;http://www.chodounsky.net/bonobo-git-server/&lt;/a&gt;  I recall looking at it early on, but don't recall why I didn't like it.  Perhaps it's due a second look.   &lt;/p&gt;
&lt;p&gt;- GitStack: &lt;a href="http://gitstack.com/gitstack-and-other-web-servers/"&gt;http://gitstack.com/gitstack-and-other-web-servers/&lt;/a&gt;  If I remember correctly, this is a paid installer of some cobbled open-source tools.&lt;/p&gt;
&lt;p&gt;- SCM Manager: &lt;a href="http://www.helicontech.com/articles/hosting-git-svn-and-hg-mercurial-repositories-on-windows-with-iis/"&gt;http://www.helicontech.com/articles/hosting-git-svn-and-hg-mercurial-repositories-on-windows-with-iis/&lt;/a&gt;  It does SVN, Mercurial, and Git as a Java website.   &lt;/p&gt;
&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/51619/how-to-setup-git-bare-http-available-repository-on-iis-machine"&gt;http://stackoverflow.com/questions/51619/how-to-setup-git-bare-http-available-repository-on-iis-machine&lt;/a&gt; includes some more.&lt;/p&gt;
&lt;p&gt;Rob&lt;/p&gt;&lt;img src="http://robrich.org/aggbug/95.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rob Richardson</dc:creator>
            <guid>http://robrich.org/archive/2012/12/29/Git-on-premise-hosting.aspx</guid>
            <pubDate>Sat, 29 Dec 2012 20:41:10 GMT</pubDate>
            <comments>http://robrich.org/archive/2012/12/29/Git-on-premise-hosting.aspx#feedback</comments>
            <wfw:commentRss>http://robrich.org/comments/commentRss/95.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Comparing version control systems: SVN, HG, and GIT</title>
            <category>Events</category>
            <link>http://robrich.org/archive/2012/07/25/Comparing-version-control-systems-SVN-HG-and-GIT.aspx</link>
            <description>It was my pleasure to talk about version control systems: svn (subversion), hg (mercurial), and git at the NWVDNUG.  It was a great discussion about the value of DCVS (Distributed Version Control Systems) vs. Centralized Version Control Systems.  We also hit the main purposes of source control: (1) to facilitate collaboration among developers and (2) keep an audit history of the code changes.  Our purpose was a paradigm change, so our content was really driven by slides, the corresponding discussion, and the questions and answers we delved into.  You can download the slides from &lt;a href="/content/SVN-HG-and-GIT.zip"&gt;SVN-HG-and-GIT.zip&lt;/a&gt;.  Enjoy!&lt;br /&gt;
&lt;br /&gt;
Rob&lt;img src="http://robrich.org/aggbug/94.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rob Richardson</dc:creator>
            <guid>http://robrich.org/archive/2012/07/25/Comparing-version-control-systems-SVN-HG-and-GIT.aspx</guid>
            <pubDate>Wed, 25 Jul 2012 17:51:28 GMT</pubDate>
            <comments>http://robrich.org/archive/2012/07/25/Comparing-version-control-systems-SVN-HG-and-GIT.aspx#feedback</comments>
            <wfw:commentRss>http://robrich.org/comments/commentRss/94.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Git Tools for Windows</title>
            <category>Tools</category>
            <link>http://robrich.org/archive/2012/07/21/Git-Tools-for-Windows.aspx</link>
            <description>I get asked from time to time what tools I would install to use Git on Windows.  I randomly spout off a list that looks something like this.  In time, this list grew to something bigger than just a list.  It seems natural for it to evolve into a post.  In no particular order, here are installers for getting Git running on both/either client and server.  (Granted, the philosophical discussion of "client" and "server" are not technically relevant in distributed source control systems as everything is technically both, but it's good to designate one of the "clients" as a "server" by policy so there's a "canonical truth" all can go to for the latest official copy.)&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Client tools:&lt;/h3&gt;
&lt;span style="font-weight: bold;"&gt;Needed:&lt;/span&gt;&lt;br /&gt;
- mSysGit (&lt;a href="http://code.google.com/p/msysgit/"&gt;http://code.google.com/p/msysgit/&lt;/a&gt;) is the base engine, and is needed to do anything git related.  Most other tools presume this is installed.  The CygWin route is a trap.  I install with these options:&lt;br /&gt;
   - Run Git from the Windows Command Prompt (middle option)&lt;br /&gt;
   - Checkout Windows-style, commit Unix-style&lt;br /&gt;
   - Use OpenSSH (unless you've previously installed Putty, you don't need it for Git with this option)&lt;br /&gt;
- Git Extensions (&lt;a href="http://code.google.com/p/gitextensions/"&gt;http://code.google.com/p/gitextensions/&lt;/a&gt;) is GUI tools for both Explorer and Visual Studio (and Eclipse and a few other things). Includes kdiff3, a diff tool for Windows.  Ensure you choose the same options you did for mSysGit.  (Note that by default mSysGit says "OpenSSH" and Git Extensions says "TortoisePlink".)&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Optional:&lt;/span&gt;&lt;br /&gt;
- git-flow (&lt;a href="https://github.com/nvie/gitflow/wiki/Windows"&gt;https://github.com/nvie/gitflow/wiki/Windows&lt;/a&gt;) is a great workflow for git&lt;br /&gt;
- TortoiseGit provides icon overlays in Windows Explorer but their commit dialog "simplifies" the difference between push and commit making it &lt;strong&gt;absolutely useless&lt;/strong&gt; aside from the icon overlays&lt;br /&gt;
- Git Source Control Provider (&lt;a href="http://gitscc.codeplex.com/"&gt;http://gitscc.codeplex.com/&lt;/a&gt;) provides icon overlays in Visual Studio&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Alternatives:&lt;/span&gt;&lt;br /&gt;
- SmartGit (&lt;a href="http://www.syntevo.com/smartgit/index.html"&gt;http://www.syntevo.com/smartgit/index.html&lt;/a&gt;): "smartgit" is also a protocol, making this a confusing name, client also does hg and svn&lt;br /&gt;
- GitHub for Windows: "simplifies" git for Windows users -- that sounds like the buzz word for "doesn't quite do it right", I have no experience with it.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Server tools:&lt;/h3&gt;
&lt;span style="font-weight: bold;"&gt;file urls&lt;/span&gt; (not preferred, only works on a lan, e.g. \\server\folder\git\repo):&lt;br /&gt;
- mSysGit&lt;br /&gt;
- share the git repository on a file share&lt;br /&gt;
&lt;br style="font-weight: bold;" /&gt;
&lt;span style="font-weight: bold;"&gt; http(s):// protocol&lt;/span&gt; (pick one):&lt;br /&gt;
- (prefered) WebGit.NET (&lt;a href="https://github.com/otac0n/WebGitNet/wiki/Getting-Started"&gt;https://github.com/otac0n/WebGitNet/wiki/Getting-Started&lt;/a&gt;)&lt;br /&gt;
- Azure's http git server (&lt;a href="https://github.com/projectkudu/kudu/"&gt;https://github.com/projectkudu/kudu/&lt;/a&gt;): If only I had another 854 hours in the day, I'd get this running and make it the preferred mechanism. It is the newest and best supported of the bunch.&lt;br /&gt;
- Bonobo (&lt;a href="http://www.chodounsky.net/bonobo-git-server/"&gt;http://www.chodounsky.net/bonobo-git-server/&lt;/a&gt;): It's abandon-ware and didn't have many features.&lt;br /&gt;
- GitWebAccess (&lt;a href="http://gitweb.codeplex.com/"&gt;http://gitweb.codeplex.com/&lt;/a&gt;): The website is great for configuring http access to git, but the admin interface has no authentication. Thus anyone with a web browser can reconfigure my server. Oops.&lt;br /&gt;
- GitStack (&lt;a href="http://gitstack.com/"&gt;http://gitstack.com/&lt;/a&gt;): It runs on Apache, the rest of these run on IIS.  Granted one can proxy Apache behind IIS: &lt;a href="http://blog.endjin.com/2010/11/a-step-by-step-guide-to-hosting-teamcity-in-iis-7/"&gt;http://blog.endjin.com/2010/11/a-step-by-step-guide-to-hosting-teamcity-in-iis-7/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;git:// protocol&lt;/span&gt; (basically ssh://):&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;Guides&lt;/span&gt;: (follow them all -- more-or-less)&lt;br /&gt;
- &lt;a href="http://www.codeproject.com/Articles/296398/Step-by-Step-Setup-Git-Server-on-Windows-with-CopS"&gt;http://www.codeproject.com/Articles/296398/Step-by-Step-Setup-Git-Server-on-Windows-with-CopS&lt;/a&gt;&lt;br /&gt;
- &lt;a href="http://www.timdavis.com.au/git/setting-up-a-msysgit-server-with-copssh-on-windows/"&gt;http://www.timdavis.com.au/git/setting-up-a-msysgit-server-with-copssh-on-windows/&lt;/a&gt;&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;Theory&lt;/span&gt;:&lt;br /&gt;
- expose mSysGit over CopSSH daemon&lt;br /&gt;
- GitExtensions and Putty aren't needed server-side, but may make debugging easier&lt;br /&gt;
- CopSSH is OpenSSHD compiled for Windows, doesn't need cygwin, daemon is built-in, can be configured for user/pass or preshared keys&lt;br /&gt;
- point this to the same Git repositories hosted in http(s) above and now it works both ways&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;Alternatives:&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;a href="http://windowsgit.com/"&gt;http://windowsgit.com/&lt;/a&gt; does this setup for you, purchase for 14 euro, docs are very thin, probably better to do it yourself to learn more about what's going on under the hood.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;alternatives / hosted providers:&lt;/span&gt;&lt;br /&gt;
Most of these providers host open-source projects for free, and closed-source projects for a price, and include both https:// and git://&lt;br /&gt;
- GitHub (&lt;a href="https://github.com/"&gt;https://github.com/&lt;/a&gt;)&lt;br /&gt;
- BitBucket&lt;br /&gt;
- CodePlex&lt;br /&gt;
- Pretty much any source code hosting provider&lt;img src="http://robrich.org/aggbug/93.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rob Richardson</dc:creator>
            <guid>http://robrich.org/archive/2012/07/21/Git-Tools-for-Windows.aspx</guid>
            <pubDate>Sat, 21 Jul 2012 19:36:27 GMT</pubDate>
            <comments>http://robrich.org/archive/2012/07/21/Git-Tools-for-Windows.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://robrich.org/comments/commentRss/93.aspx</wfw:commentRss>
        </item>
        <item>
            <title>HTML5: A Primer</title>
            <category>Code</category>
            <category>Events</category>
            <link>http://robrich.org/archive/2012/07/11/HTML5-A-Primer.aspx</link>
            <description>It was my pleasure to speak at the Phoenix Java User Group this evening, discussing HTML5.  By all accounts, it was a very fun evening, and of course, I'm sure I enjoyed it most of all.  The slides for this evening's discussion are available &lt;a href="/content/HTML5.zip"&gt;here&lt;/a&gt;.  If you're really curious about HTML5, I suggest you watch the &lt;a href="http://www.palermo4.com/page/HTML5-Web-Camp-Videos.aspx"&gt;HTML5 Camp Videos&lt;/a&gt; and in particular &lt;a href="http://www.palermo4.com/page/Video-Intro-to-HTML5.aspx"&gt;Stephanie (Sullivan) Rewis&lt;/a&gt;, a great HTML5 intro.&lt;img src="http://robrich.org/aggbug/92.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rob Richardson</dc:creator>
            <guid>http://robrich.org/archive/2012/07/11/HTML5-A-Primer.aspx</guid>
            <pubDate>Thu, 12 Jul 2012 06:06:53 GMT</pubDate>
            <comments>http://robrich.org/archive/2012/07/11/HTML5-A-Primer.aspx#feedback</comments>
            <wfw:commentRss>http://robrich.org/comments/commentRss/92.aspx</wfw:commentRss>
        </item>
        <item>
            <title>IIS Express /protocol:https</title>
            <category>Code</category>
            <category>Tools</category>
            <link>http://robrich.org/archive/2012/07/06/IIS-Express-protocolhttps.aspx</link>
            <description>IIS Express is awesome, a great upgrade from Cassini.  It supports &lt;a href="http://robrich.org/archive/2012/06/04/Moving-to-IIS-Express-and-https.aspx"&gt;https&lt;/a&gt;, Windows Authentication, persistent sites even if Visual Studio is closed, command-line launching, it's great.  However combining them sometimes doesn't work too well.&lt;br /&gt;
&lt;br /&gt;
In Cassini (Visual Web Developer) I could launch it like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Courier New;"&gt;WebDev.WebServer40.EXE /port:1234 /path:C:\path\to\site&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
This works wonderfully in IIS Express as well:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Courier New;"&gt;iisexpress.exe /port:1234 /path:C:\path\to\site&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
This gets awkward when moving to https.  This doesn't work:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Courier New;"&gt;iisexpress.exe /port:1234 /path:C:\path\to\site &lt;span style="text-decoration: line-through;"&gt;/protocol:https&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
Why doesn't it work?  Because iisexpress has no &lt;span style="font-family: Courier New;"&gt;/protocol&lt;/span&gt; switch.  Bummer.  I flung a request for this and got a great response from &lt;a href="http://blogs.msdn.com/b/robert_mcmurray/archive/2012/07/03/working-with-the-different-iis-express-modes-and-https.aspx"&gt;Robert McMurray&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;A Step Back&lt;/h3&gt;
Robert McMurray summarizes the two modes of IIS Express nicely as "Personal Web Server Mode" (e.g. "IIS Lite") and "Application Server Mode" (e.g. "just launch this").&lt;br /&gt;
&lt;br /&gt;
"Personal Web Server Mode" is a durable version of (almost all of) IIS launched in the user's context.  There's a great system tray icon that centralizes all the running sites, and the &lt;a href="http://robrich.org/archive/2012/04/12/Configuring-other-IIS-boxes-in-the-web-farm.aspx"&gt;applicationHost.config&lt;/a&gt; file is identical to regular IIS.  One can rig Windows Authentication, HTTPS, tracing, classic ASP, the works.  (Why "almost"?  Because there's no tooling for configuration.  There are a few settings in Visual Studio, but nothing of consequence.  The perfect solution would be a way to point IIS Manager at it.  Unfortunately, typically the easiest way to configure IIS Express is to configure IIS proper, then diff their config files.  But I digress.)&lt;br /&gt;
&lt;br /&gt;
"Application Server Mode" is much like Cassini was.  When you launch it, you specify &lt;span style="font-family: Courier New;"&gt;/port:&lt;/span&gt; and &lt;span style="font-family: Courier New;"&gt;/path:&lt;/span&gt;.  The unfortunate part of this mode is it presumes http.  To their credit, this mode is likely solely for backwards compatibility with Cassini, and Cassini didn't support https at all.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Now What?&lt;/h3&gt;
My goal is to run IIS Express in "just do it" mode, pass in a  &lt;span style="font-family: Courier New;"&gt;/port:&lt;/span&gt; and &lt;span style="font-family: Courier New;"&gt;/path:&lt;/span&gt;, and test my https site.  All else being equal, a &lt;span style="font-family: Courier New;"&gt;/protocol:&lt;/span&gt; parameter to &lt;span style="font-family: Courier New;"&gt;iisexpress.exe&lt;/span&gt; would be easiest.  In its absence, let's go hacking.  Back to &lt;a href="http://blogs.msdn.com/b/robert_mcmurray/archive/2012/07/03/working-with-the-different-iis-express-modes-and-https.aspx"&gt;Robert McMurray&lt;/a&gt;.  He proposes a batch file that uses &lt;span style="font-family: Courier New;"&gt;appcmd.exe&lt;/span&gt; to rig adjustments to a cloned &lt;span style="font-family: Courier New;"&gt;applicationHost.config&lt;/span&gt;, passing in IIS Express 8's new &lt;span style="font-family: Courier New;"&gt;/apphostconfig:&lt;/span&gt; flag, which specifies the config to modify.  It's a bit of a long way around, but ok.  In theory it's easier than brute-forcing some XPath.&lt;br /&gt;
&lt;br /&gt;
A bit of tinkering, a lot of elbow grease, and an extra quarter or two into the command-line meter, and I have a batch file that allows me to launch IIS Express like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family: Courier New;"&gt;iisexpress.bat /port:1234 /path:C:\path\to\site /protocol:https&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
The batch file takes care of shimming the difference between me using it like "Application Server Mode" and it running in "Personal Web Server Mode" (with a temporary config).  Thanks to Robert McMurray for pointing me in the right direction.&lt;br /&gt;
&lt;br /&gt;
For compatibility's sake, it has a PowerShell XPath mechanism for users of IIS Express 7.x, though for those with IIS Express 8, flip over into &lt;span style="font-family: Courier New;"&gt;appcmd&lt;/span&gt; and you're golden.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;The Batch File&lt;/h3&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;@echo off&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;setlocal enabledelayedexpansion&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;pushd "%~dp0"&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;REM because we're shifting this off the grid soon&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set script_name=%0&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if '%1'=='' GOTO help&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:defaults&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set site_port=8080&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set site_protocol=http&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:get_args&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if '%1'=='' GOTO :args_done&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set arg="%1"&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set argv=%arg:/path:=%&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if "%argv%"=="%arg%" goto not_path&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set site_path=%argv:"=%&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;shift&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;goto get_args&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:not_path&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set argv=%arg:/port:=%&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if "%argv%"=="%arg%" goto not_port&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set site_port=%argv:"=%&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;shift&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;goto get_args&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:not_port&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set argv=%arg:/protocol:=%&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if "%argv%"=="%arg%" goto not_https&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set site_protocol=%argv:"=%&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;shift&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;goto get_args&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:not_https&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if '%1'=='/?' GOTO help&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if '%1'=='/h' GOTO help&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if '%1'=='-?' GOTO help&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if '%1'=='-h' GOTO help&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;echo Invalid parameter: %1&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;goto help&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:args_done&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if "%site_path%"=="" GOTO no_path&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if "%site_port%"=="" GOTO no_port&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if not exist "%site_path%" GOTO invalid_path&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:get_tempdir&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set sitename=%TIME::=.%-%RANDOM%&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set tempdir=%TEMP%\iisexpress-temp\%sitename%&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if exist "%tempdir%" GOTO :get_tempdir&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;mkdir "%tempdir%"&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:get_iisdir&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if "%PROGRAMFILES(x86)%"=="" goto x86&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set iis_dir=%PROGRAMFILES(x86)%\IIS Express&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;goto iis_done&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:x86&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;set iis_dir=%PROGRAMFILES%\IIS Express&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:iis_done&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;if not exist "%iis_dir%\iisexpress.exe" GOTO iis_missing&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:setup_iis&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;copy "%iis_dir%\AppServer\applicationHost.config" "%tempdir%"&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;REM Mangle 'Development Web Site' to match what we're after&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;REM These need IIS Express 8:&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;REM "%iis_dir%\appcmd.exe" set config -section:system.applicationHost/sites /"[name='Development Web Site'].[path='/'].[path='/'].physicalPath:%site_path%" /commit:apphost /apphostconfig:%tempdir%\applicationHost.config&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;REM "%iis_dir%\appcmd.exe" set config -section:system.applicationHost/sites /~"[name='Development Web Site'].bindings" /commit:apphost /apphostconfig:%tempdir%\applicationHost.config&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;REM "%iis_dir%\appcmd.exe" set config -section:system.applicationHost/sites /+"[name='Development Web Site'].bindings.[protocol='%site_protocol%',bindingInformation='127.0.0.1:%site_port%:']" /commit:apphost /apphostconfig:%tempdir%\applicationHost.config&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;REM This doesn't&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;Powershell.exe -Command "&amp;amp; {$a=New-Object System.Xml.XmlDocument;$a.Load(\"%tempdir%\applicationHost.config\");$b=$a.SelectSingleNode(\"//sites/site[@id='1']//virtualDirectory\");$b.physicalPath=\"%site_path%\";$c=$a.SelectSingleNode(\"//sites/site[@id='1']//binding\");$c.protocol=\"%site_protocol%\";$c.bindingInformation=\":%site_port%:localhost\";$a.Save(\"%tempdir%\applicationHost.config\")}"&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:run_iis&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;echo Running IIS Express: /port:%site_port% /protocol:%site_protocol% /path:%site_path%, temp-config: %tempdir%\applicationHost.config&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;"%iis_dir%\iisexpress.exe" /config:%tempdir%\applicationHost.config /siteid:1 /systray:false&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:cleanup&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;rd /q /s %tempdir%&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;goto exit&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:no_port&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;echo /port not specified&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;goto help&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:no_path&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;echo /path not specified&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;goto help&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:invalid_path&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;echo /path doesn't exist: %site_path%&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;exit /b 2&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:iis_missing&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;echo can't find iisexpress.exe in %iis_dir%&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;exit /b 3&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:help&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;echo %script_name% [/port:1234] [/protocol:https] "/path:C:\path\to\site\dir"&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;echo default: /port:8080 /protocol:http&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;exit /b 1&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;GOTO exit&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;:exit&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;popd&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;endlocal&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;exit /b&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Here's hoping this solution works as well for you as it does for me.  Enjoy!&lt;br /&gt;
&lt;br /&gt;
Rob&lt;img src="http://robrich.org/aggbug/91.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rob Richardson</dc:creator>
            <guid>http://robrich.org/archive/2012/07/06/IIS-Express-protocolhttps.aspx</guid>
            <pubDate>Fri, 06 Jul 2012 21:58:09 GMT</pubDate>
            <comments>http://robrich.org/archive/2012/07/06/IIS-Express-protocolhttps.aspx#feedback</comments>
            <wfw:commentRss>http://robrich.org/comments/commentRss/91.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Moving to IIS Express and https</title>
            <category>Code</category>
            <category>Tools</category>
            <link>http://robrich.org/archive/2012/06/04/Moving-to-IIS-Express-and-https.aspx</link>
            <description>&lt;p&gt;I've been asked a few times to help people move from their current use of the Web Development Server to https.  This requires one also move to IIS Express as the old Web Development Server (Cassini) doesn't support https.  Here's a brief tutorial on making the changes.  This will allow you to test the sites using a very similar mechanism to a production deployment.  We'll also discuss certificates and Fiddler concerns.&lt;/p&gt;
&lt;h2&gt;Step 1: Setup&lt;/h2&gt;
&lt;p&gt;Get your environment setup:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Startup Visual Studio, and load the target project and/or solution&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Step 2: Configure IIS Express&lt;/h2&gt;
&lt;p&gt;For each website you'd like to convert to IIS Express and https:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;In the Solution Explorer, right-click on Web project, and choose "Use IIS Express" (just under "Set as Startup Project")&lt;strong&gt;  NOTE:&lt;/strong&gt; If you don't have this option, you don't have Visual Studio 2010 Service Pack 1 installed.  Install VS 2010 SP 1 then retry this procedure.&lt;/li&gt;
    &lt;li&gt;Go to the project properties by right-clicking the project, and choosing properties at the very bottom.&lt;/li&gt;
    &lt;li&gt;In the Web tab, choose "Use Local IIS Web Server" and check "Use IIS Express".  Set the Project Url as necessary.&lt;/li&gt;
    &lt;li&gt;Ensure "Apply server settings to all users" is unchecked.  If this is checked, these changes will be inflicted on all users of the solution including any user-specific derivations (such as the location of your solution).&lt;/li&gt;
    &lt;li&gt;Enable SSL by selecting the project in the Solution Explorer, switching to the Properties window, and setting "SSL Enabled: True".  You will be assigned a random port, probably localhost:44300, but you can't change that here.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Step 3: Change IIS Express SSL Ports&lt;/h2&gt;
&lt;ol&gt;
    &lt;li&gt;Close Visual Studio so it doesn't get confused as we change IIS Express files.&lt;/li&gt;
    &lt;li&gt;Open The IIS Express configuration file in your favorite text editor such as Notepad.  It is in a path similar to &lt;span style="font-family: Courier New;"&gt;C:\Users\{myusername}\Documents\IISExpress\config\applicationhost.config&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;Scroll down to the &amp;lt;sites&amp;gt; node.&lt;/li&gt;
    &lt;li&gt;Alter the bindings lines for each of the sites to include your preferred ports.&lt;/li&gt;
    &lt;li&gt;Save and close the file.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Step 4: Update the Project's port if necessary&lt;/h2&gt;
&lt;p&gt;Back inside Visual Studio, we'll tweak the last few things, and we'll be ready to roll:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Startup Visual Studio, and load the target project and/or solution&lt;/li&gt;
    &lt;li&gt;Go into the project's settings: Solution Explorer -&amp;gt; right-click on project -&amp;gt; Properties at the very bottom -&amp;gt; Web tab&lt;/li&gt;
    &lt;li&gt;Update the Project Url if necessary to match the details you set in applicationhost.config&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Step 5: Update configuration values&lt;/h2&gt;
&lt;p&gt;If your project uses any configuration values that reference the site url or port, you'll need to update them to point to the new https url.&lt;/p&gt;
&lt;h2&gt;Step 6: Try it Out&lt;/h2&gt;
&lt;p&gt;We're ready to roll:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Debug the target project / solution&lt;/li&gt;
    &lt;li&gt;In your browser, go to the https url you specified (example: https://localhost:44300/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It works, but you'll quickly discover failures because the cert isn't trusted.&lt;/p&gt;
&lt;p&gt;You'll also notice that IIS Express binds specifically to "localhost:port#", and doesn't listen on "localhost.:port#".  (Note the dot in the second url.)  Adding this dot is a great tool for debugging with fiddler as it makes the browser use DNS to resolve the site, which happily makes it use the configured proxy – Fiddler.  Without this dot, it's really easy to make web requests and get absolutely nowhere.  Unfortunately, this no longer works with IIS Express.  Sadly, you'll need to remove the dot. &lt;/p&gt;
&lt;h2&gt;Step 7: Trust IIS Express Certificate in your chosen browser(s)&lt;/h2&gt;
&lt;p&gt;Unfortunately, Chrome will use the local certificate store, but has no way to alter the local certificate store, so we must use Internet Explorer to configure the certificate trust.  These steps are pulled from &lt;a href="http://stackoverflow.com/questions/681695/what-do-i-need-to-do-to-get-internet-explorer-8-to-accept-a-self-signed-certific"&gt;http://stackoverflow.com/questions/681695/what-do-i-need-to-do-to-get-internet-explorer-8-to-accept-a-self-signed-certific&lt;/a&gt; and &lt;a href="http://productforums.google.com/forum/#!topic/chrome/bds-Ao9LigA"&gt;http://productforums.google.com/forum/#!topic/chrome/bds-Ao9LigA&lt;/a&gt;.  The former (quoted here) shows you how to get IE (and thus .NET) to trust the self-signed certificate, the latter, targeted towards Chrome, puts the certificate in "Third-party Certificate Store" instead of "Trusted Root Certification Authorities".&lt;/p&gt;
&lt;p&gt;How to make IE8 trust a self-signed certificate in 20 irritating steps: (source: &lt;a href="http://stackoverflow.com/questions/681695/what-do-i-need-to-do-to-get-internet-explorer-8-to-accept-a-self-signed-certific"&gt;http://stackoverflow.com/questions/681695/what-do-i-need-to-do-to-get-internet-explorer-8-to-accept-a-self-signed-certific&lt;/a&gt;)&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Browse to the site whose certificate you want to trust.&lt;/li&gt;
    &lt;li&gt;When told "There is a problem with this website's security certificate.", choose "Continue to this website (not recommended)."&lt;/li&gt;
    &lt;li&gt;Select Tools-&amp;gt;Internet Options.&lt;/li&gt;
    &lt;li&gt;Select Security-&amp;gt;Trusted sites-&amp;gt;Sites.&lt;/li&gt;
    &lt;li&gt;Confirm the URL matches, and click "Add" then "Close".&lt;/li&gt;
    &lt;li&gt;Close the "Internet Options" dialog box with either "OK" or "Cancel".&lt;/li&gt;
    &lt;li&gt;Refresh the current page.&lt;/li&gt;
    &lt;li&gt;When told "There is a problem with this website's security certificate.", choose "Continue to this website (not recommended)."&lt;/li&gt;
    &lt;li&gt;Click on "Certificate Error" at the right of the address bar and select "View certificates".&lt;/li&gt;
    &lt;li&gt;Click on "Install Certificate...", then in the wizard, click "Next".&lt;/li&gt;
    &lt;li&gt;On the next page select "Place all certificates in the following store".&lt;/li&gt;
    &lt;li&gt;Click "Browse", select "Trusted Root Certification Authorities", and click "OK".&lt;/li&gt;
    &lt;li&gt;Back in the wizard, click "Next", then "Finish".&lt;/li&gt;
    &lt;li&gt;If you get a "Security Warning" message box, click "Yes".&lt;/li&gt;
    &lt;li&gt;Dismiss the message box with "OK".&lt;/li&gt;
    &lt;li&gt;Select Tools-&amp;gt;Internet Options.&lt;/li&gt;
    &lt;li&gt;Select Security-&amp;gt;Trusted sites-&amp;gt;Sites.&lt;/li&gt;
    &lt;li&gt;Select the URL you just added, click "Remove", then "Close".&lt;/li&gt;
    &lt;li&gt;Now shut down all running instances of IE, and start up IE again.&lt;/li&gt;
    &lt;li&gt;The site's certificate should now be trusted.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After this procedure is done, Chrome will note that the url is "localhost", that it isn't routable across the internet, and thus it is impossible for a trusted certificate store to issue such a certificate.  It will also note that the certificate's domain and page's domain match, and will no longer prompt you to "proceed anyway".&lt;/p&gt;
&lt;h2&gt;Step 8: (Optional, Advanced) Use IIS instead of IIS Express&lt;/h2&gt;
&lt;p&gt;Getting IIS Express to start when you begin debugging and stop when you end debugging is very, very handy.  But there are times when you'll want to use the site but don't want to have to launch Visual Studio first – e.g. to demo the project to a potential client.  In that case, you can use the full IIS 7.5 installed in Windows instead of IIS Express with these modifications:&lt;/p&gt;
&lt;p&gt;Configure the project to use IIS:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Right-click on the project in Visual Studio, choose properties, switch to the Web tab, and uncheck "Use IIS Express".&lt;/li&gt;
    &lt;li&gt;Change the Project Url to use your chosen IIS url.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Install IIS 7.5 on Windows 7 (if it isn't there already):&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Start -&amp;gt; Control Panels.&lt;/li&gt;
    &lt;li&gt;On the left, choose "Turn Windows Features on or off".&lt;/li&gt;
    &lt;li&gt;Inside Internet Information Services, inside Web Management Tools, check on IIS Management Console.&lt;/li&gt;
    &lt;li&gt;Inside Internet Information Services, inside World Wide Web Services, check on at least ASP and ASP.NET.&lt;/li&gt;
    &lt;li&gt;Troll through the other settings inside Internet Information Services, checking on anything that looks interesting.&lt;/li&gt;
    &lt;li&gt;Ensure WebDAV is &lt;span style="background:yellow;"&gt;/NOT/&lt;/span&gt; installed: Internet Information Services -&amp;gt; World Wide Web Services -&amp;gt; Common HTTP Features -&amp;gt; WebDAV Publishing to off. You likely don't need it, and it's a great security hole.&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Ensure FTP is &lt;span style="background:yellow"&gt;/NOT/&lt;/span&gt; installed: Internet Information Services -&amp;gt; FTP must be off. Same thing, reduce the attack service.&lt;br /&gt;
    &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Configure IIS:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Start -&amp;gt; Administrative Tools -&amp;gt; Internet Information Services. &lt;strong&gt;NOTE:&lt;/strong&gt; If you don't have this option, you need to first install IIS.&lt;/li&gt;
    &lt;li&gt;Right click on Sites, and choose Add Website.&lt;/li&gt;
    &lt;li&gt;Add the website details.&lt;/li&gt;
    &lt;li&gt;Click Application Pools, and ensure the app pool settings are appropriate to your use.&lt;/li&gt;
    &lt;li&gt;If any of the settings for the App Pool aren't as specified, choose the app pool, click "Basic Settings…" on the right, and alter as needed.&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://robrich.org/aggbug/90.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rob Richardson</dc:creator>
            <guid>http://robrich.org/archive/2012/06/04/Moving-to-IIS-Express-and-https.aspx</guid>
            <pubDate>Mon, 04 Jun 2012 23:23:37 GMT</pubDate>
            <comments>http://robrich.org/archive/2012/06/04/Moving-to-IIS-Express-and-https.aspx#feedback</comments>
            <wfw:commentRss>http://robrich.org/comments/commentRss/90.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Both Forms Authentication and Basic Authentication</title>
            <category>Code</category>
            <link>http://robrich.org/archive/2012/05/22/Both-Forms-Authentication-and-Basic-Authentication.aspx</link>
            <description>The &lt;a href="http://stackoverflow.com/questions/10552736/restricting-a-public-facing-demo-site-for-an-asp-net-application"&gt;question&lt;/a&gt; was asked:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt; Given an asp.net application that in itself uses Forms Authentication, what is the best practice for securing a public-facing demo site such that nobody who is not in the "in crowd" can see the site at all?&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
My &lt;a href="http://stackoverflow.com/questions/10552736/restricting-a-public-facing-demo-site-for-an-asp-net-application/10671245#10671245"&gt;answer&lt;/a&gt; was pretty cool, and I wanted to remember it someday when I had a similar question.  Up-vote it if you too think it's cool:&lt;br /&gt;
&lt;br /&gt;
Typically the "demo sites" are secured with Basic Authentication.  e.g. return a 401 to the browser with a basic authentication challenge that it turns into prompting for credentials.  In theory, once this is done, the rest of the site is just regular stuff -- forms auth when needed.&lt;br /&gt;
&lt;br /&gt;
The difficulty with this approach in ASP.NET comes in the fact that the default FormsAuthenticationProvider is hard-wired to interpret a 401 as "need to 302 to the login page."  With that as a premise, getting both Forms Authentication and Basic Authentication to happen simultaneously is a challenge.&lt;br /&gt;
&lt;br /&gt;
Also, the Basic Authentication built-in to IIS uses Windows as the authentication store (Active Directory or local windows accounts.)  Getting it to use a different credential store is not easy to do "in the box".&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://custombasicauth.codeplex.com/"&gt;http://custombasicauth.codeplex.com/&lt;/a&gt; is a project I've been watching that is quite intriguing.  It provides a custom Basic Authentication provider that allows you to rig up Basic Authentication from a different provider store.  Pop open the source to &lt;a href="http://custombasicauth.codeplex.com/SourceControl/changeset/view/53965#183990"&gt;http://custombasicauth.codeplex.com/SourceControl/changeset/view/53965#183990&lt;/a&gt; and &lt;a href="http://custombasicauth.codeplex.com/SourceControl/changeset/view/53965#183995"&gt;http://custombasicauth.codeplex.com/SourceControl/changeset/view/53965#183995&lt;/a&gt; and see that they're just extracting the Base64-encoded header, and comparing it to an ASP.NET Membership Provider.  With that as a premise, you could rig up a similar HttpModule to compare the header data to a user/pass stored in AppSettings, and include the module in your demo site.  The magic sauce is that you don't set the 401 status on Authenticate, you do so at EndRequest -- after the FormsAuthenticationModule has finished it's "401 to 302 to login page".  The only down-side is the &amp;lt;location&amp;gt; tags have to be used by Forms Auth or by Basic Auth, but not both.  If the use-case is truly "secure the entire demo site", then it's sufficient to code the Basic Auth module to "just do it all".  I'm about 2/3 of the way doing exactly this.  When I'm done, I'll likely post it to GitHub as it's turning out pretty cool.  Alas, the technique isn't that hard, and perhaps the description of the solution is sufficient.&lt;br /&gt;
&lt;br /&gt;
And if you really want a hands-off, no-code solution, install &lt;a href="http://custombasicauth.codeplex.com/"&gt;http://custombasicauth.codeplex.com/&lt;/a&gt;.  It even gives you pretty config windows in IIS.  :D &lt;img src="http://robrich.org/aggbug/89.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rob Richardson</dc:creator>
            <guid>http://robrich.org/archive/2012/05/22/Both-Forms-Authentication-and-Basic-Authentication.aspx</guid>
            <pubDate>Wed, 23 May 2012 06:20:40 GMT</pubDate>
            <comments>http://robrich.org/archive/2012/05/22/Both-Forms-Authentication-and-Basic-Authentication.aspx#feedback</comments>
            <wfw:commentRss>http://robrich.org/comments/commentRss/89.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Elmah: return the ErrorId from Signal.Raise()</title>
            <category>Code</category>
            <category>Rants</category>
            <link>http://robrich.org/archive/2012/05/02/Elmah-return-the-ErrorId-from-Signal-Raise.aspx</link>
            <description>&lt;a href="http://code.google.com/p/elmah"&gt;ELMAH&lt;/a&gt; is an awesome error logging framework for ASP.NET.  It provides both an elegant way of capturing errors, and an elegant way of displaying them later.  It's available as a NuGet package, and is both Web Forms and MVC friendly.&lt;br /&gt;
&lt;br /&gt;
Generally, Elmah "just works" and you can walk away happy as a clam.  But there's &lt;a href="http://stackoverflow.com/questions/766610/how-to-get-elmah-to-work-with-asp-net-mvc-handleerror-attribute/779961#779961"&gt;times&lt;/a&gt; where you want to do custom error logging.  The general solution is to do something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;ErrorSignal.FromContext(HttpContext.Current).Raise(ex, HttpContext.Current);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The up-side is you can log anything you want then gently recover.  The down-side is you can't get the logged ErrorId.  Granted, based on your Elmah filters, maybe it wasn't logged.  But if it was and that location stores an id (see Elmah's SqlErrorLog) then it'd be really nice for &lt;span style="font-family: Courier New;"&gt;Raise()&lt;/span&gt; to return that Id.&lt;br /&gt;
&lt;br /&gt;
The problem is elegantly described &lt;a href="http://code.google.com/p/elmah/issues/detail?id=148"&gt;http://code.google.com/p/elmah/issues/detail?id=148&lt;/a&gt; and &lt;a href="http://stackoverflow.com/questions/7895271/getting-the-id-of-an-error-in-elmah-after-calling-raise/7902138"&gt;http://stackoverflow.com/questions/7895271/getting-the-id-of-an-error-in-elmah-after-calling-raise/7902138&lt;/a&gt; with nearly identical results: "You can't get there from here, don't bother."&lt;br /&gt;
&lt;br /&gt;
The closest work-around is to listen to the ErrorLogModule's Logged event, and shim it to where you need it:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args) {&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         string key = args.Entry.Id;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         // stash this somewhere&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Then after the .Raise() call, you pull it from the stash location.  HttpRequest.Items is request-specific cache, and provides a descent stash location.  But this is at best a fragile hack.&lt;br /&gt;
&lt;br /&gt;
As any good programmer would say, this is a problem that can easily be solved with code.  I downloaded the Elmah source, made some quick adjustments, and posted the solution to &lt;a href="http://code.google.com/p/elmah/issues/detail?id=148#c3"&gt;http://code.google.com/p/elmah/issues/detail?id=148#c3&lt;/a&gt;.  On the off chance that post gets deleted and to add more visibility to the simplicity to the solution, here's the patch file that shows the (not kidding) 14 lines that made this feature a reality.  If you like this patch too, log into Elmah's project site and "me too" comment to the ticket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;diff -r 2482ebd0a4ae src/Elmah/ErrorLogModule.cs&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;--- a/src/Elmah/ErrorLogModule.cs    Tue May 01 19:31:20 2012 +0200&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+++ b/src/Elmah/ErrorLogModule.cs    Wed May 02 16:13:53 2012 -0700&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;@@ -84,15 +84,21 @@&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         protected virtual void OnErrorSignaled(object sender, ErrorSignalEventArgs args)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         {&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;-            LogException(args.Exception, args.Context);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            string id = LogException(args.Exception, args.Context);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            if (!string.IsNullOrEmpty(id)) {&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+                args.ErrorId = id;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         /// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         /// Logs an exception and its context to the error log.&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         /// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+        /// &amp;lt;returns&amp;gt;ErrorId, may be null since not all errors are logged&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;-        protected virtual void LogException(Exception e, HttpContextBase context)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+        protected virtual string LogException(Exception e, HttpContextBase context)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         {&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            string id = null;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             if (e == null)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;                 throw new ArgumentNullException("e");&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;@@ -105,7 +111,7 @@&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             OnFiltering(args);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             if (args.Dismissed)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;-                return;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+                return id;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             //&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             // Log away...&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;@@ -118,7 +124,7 @@&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;                 Error error = new Error(e, context);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;                 ErrorLog log = GetErrorLog(context);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;                 error.ApplicationName = log.ApplicationName;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;-                string id = log.Log(error);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+                id = log.Log(error);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;                 entry = new ErrorLogEntry(log, id, error);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             catch (Exception localException)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;@@ -137,6 +143,8 @@&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             if (entry != null)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;                 OnLogged(new ErrorLoggedEventArgs(entry));&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            return id;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         /// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;diff -r 2482ebd0a4ae src/Elmah/ErrorSignal.cs&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;--- a/src/Elmah/ErrorSignal.cs    Tue May 01 19:31:20 2012 +0200&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+++ b/src/Elmah/ErrorSignal.cs    Wed May 02 16:13:53 2012 -0700&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;@@ -46,15 +46,19 @@&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             Raise(e, null);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;-        public void Raise(Exception e, HttpContextBase context)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+        public string Raise(Exception e, HttpContextBase context)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         {&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             if (context == null)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;                 context = new HttpContextWrapper(HttpContext.Current);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             ErrorSignalEventHandler handler = Raised;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            ErrorSignalEventArgs args = new ErrorSignalEventArgs(e, context);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             if (handler != null)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;-                handler(this, new ErrorSignalEventArgs(e, context));&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+                handler(this, args);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            return args.ErrorId;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         public static ErrorSignal FromCurrentContext()&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;@@ -154,6 +158,11 @@&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             get { return _context; }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+        /// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+        /// When you handle the signal, update this with the resulting ErrorId (if any)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+        /// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+        public string ErrorId { get; set; }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         public override string ToString()&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         {&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             return Mask.EmptyString(Exception.Message, Exception.GetType().FullName);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;diff -r 2482ebd0a4ae src/Elmah/ErrorTweetModule.cs&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;--- a/src/Elmah/ErrorTweetModule.cs    Tue May 01 19:31:20 2012 +0200&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+++ b/src/Elmah/ErrorTweetModule.cs    Wed May 02 16:13:53 2012 -0700&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;@@ -129,15 +129,20 @@&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         protected virtual void OnErrorSignaled(object sender, ErrorSignalEventArgs args)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         {&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;-            LogException(args.Exception, args.Context);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            string id = LogException(args.Exception, args.Context);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            if (!string.IsNullOrEmpty(id)) {&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+                args.ErrorId = id;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            }        &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         /// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         /// Logs an exception and its context to the error log.&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         /// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;-        protected virtual void LogException(Exception e, HttpContextBase context)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+        protected virtual string LogException(Exception e, HttpContextBase context)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         {&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            string id = null;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             if (e == null)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;                 throw new ArgumentNullException("e");&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;@@ -150,7 +155,7 @@&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             OnFiltering(args);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             if (args.Dismissed)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;-                return;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+                return id;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             //&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             // Tweet away...&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;@@ -240,6 +245,8 @@&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;                 OnWebPostError(request, localException);&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;             }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;+            return id;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         }&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
&lt;span style="font-family: Courier New;"&gt;         private void OnWebPostError(WebRequest request, Exception e)&lt;/span&gt;&lt;img src="http://robrich.org/aggbug/88.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rob Richardson</dc:creator>
            <guid>http://robrich.org/archive/2012/05/02/Elmah-return-the-ErrorId-from-Signal-Raise.aspx</guid>
            <pubDate>Wed, 02 May 2012 23:38:27 GMT</pubDate>
            <comments>http://robrich.org/archive/2012/05/02/Elmah-return-the-ErrorId-from-Signal-Raise.aspx#feedback</comments>
            <wfw:commentRss>http://robrich.org/comments/commentRss/88.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>