<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>HamletCode's Weblog</title>
	<atom:link href="http://hamletcode.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://hamletcode.wordpress.com</link>
	<description>(to code) &#124;&#124; !(to code)</description>
	<lastBuildDate>Mon, 02 Jan 2012 06:09:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='hamletcode.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>HamletCode's Weblog</title>
		<link>http://hamletcode.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://hamletcode.wordpress.com/osd.xml" title="HamletCode&#039;s Weblog" />
	<atom:link rel='hub' href='http://hamletcode.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Visual Studio 2011&#8211;So Far</title>
		<link>http://hamletcode.wordpress.com/2011/11/25/visual-studio-2011so-far/</link>
		<comments>http://hamletcode.wordpress.com/2011/11/25/visual-studio-2011so-far/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 01:27:54 +0000</pubDate>
		<dc:creator>hamletcode</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://hamletcode.wordpress.com/?p=275</guid>
		<description><![CDATA[I’ve been using Visual Studio 2011 Developer Preview for a few days now. I haven’t specifically dug in to see what’s different, but just wanted to comment on the things I’ve bumped into. The Good Solution Explorer is now a combination of Solution Explorer and Class View. You can expand individual files to see the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=275&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I’ve been using Visual Studio 2011 Developer Preview for a few days now. I haven’t specifically dug in to see what’s different, but just wanted to comment on the things I’ve bumped into.</p>
<p><strong>The Good</strong></p>
<p>Solution Explorer is now a combination of Solution Explorer and Class View. You can expand individual files to see the classes and members within it.</p>
<p>Searching: When you search for something (I use CONTROL-SHIFT-F very often) the results are appended to the end of the list rather rather than clearing out the pane. So, all your search results are there until you clear them. I’d wish the separation between search results was clearer, though. Maybe an expand/collapse approach.</p>
<p>Solution Explorer has an icon to the right of each item when you hover over it. It allows you to zoom in on the particular item and hide the rest of the solution. To get back to where you started, you can click the HOME button, or you can click BACK the appropriate number of times.</p>
<p>This is a 4.5 thing rather than visual studio, but I was very excited to see that you can now request a WSDL as SingleFile. Nice</p>
<p>The WATCH windows has color syntaxing. I don’t’ know if I ever would of thought of that as a desired feature, but now that I have it, I appreciate it.</p>
<p>The installation is simpler; you just hit one button and it goes. But, it&#8217;s just as slow as it always was. I am always amazed that you can install Windows faster than you can install Visual Studio.</p>
<p><strong>The Bad</strong></p>
<p>I am unable to add multiple file references at once. I have to select each one individually.</p>
<p>To compound the previous point, the BROWSE dialog doesn’t remember your last folder, so you always have to browse back to it. (Cut and paste to the rescue)</p>
<p>It doesn’t seem any faster. Visual Studio 2010, despite any claims to the contrary, has always been slower than 2008 on every machine I’ve ever worked on. I tried to work in VMs alone, but had to drop that practice due to the performance issue. Currently, I’m running 2011 in a VM, so maybe I’m not giving it a fair shake. Maybe on the primary OS it’s better. But, it feels exactly the same so far.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hamletcode.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hamletcode.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hamletcode.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hamletcode.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hamletcode.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hamletcode.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hamletcode.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hamletcode.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hamletcode.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hamletcode.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hamletcode.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hamletcode.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hamletcode.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hamletcode.wordpress.com/275/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=275&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hamletcode.wordpress.com/2011/11/25/visual-studio-2011so-far/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/683d0f9adfd457dda7c0b3dfa4debe11?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hamletcode</media:title>
		</media:content>
	</item>
		<item>
		<title>Illustrating a Simple Request Using Visio</title>
		<link>http://hamletcode.wordpress.com/2011/09/23/illustrating-a-simple-request-using-visio/</link>
		<comments>http://hamletcode.wordpress.com/2011/09/23/illustrating-a-simple-request-using-visio/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 04:12:43 +0000</pubDate>
		<dc:creator>hamletcode</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://hamletcode.wordpress.com/2011/09/23/illustrating-a-simple-request-using-visio/</guid>
		<description><![CDATA[Sure, you can just send an email that says “please stay out of the ex1 development environment”. That will probably work. Or… or… Or you can make a flowchart that a person can walk through to determine if they may use the environment. Clearly, this approach is more fun. The following diagram resulted in some [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=274&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sure, you can just send an email that says “please stay out of the ex1 development environment”. That will probably work.</p>
<p>Or… or… Or you can make a flowchart that a person can walk through to determine if they may use the environment. Clearly, this approach is more fun.</p>
<p>The following diagram resulted in some funny banter. Anyhoo, enjoy. Or disregard. Your choice.</p>
<p><a href="http://hamletcode.files.wordpress.com/2011/09/ex1.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;margin:0 5px;" title="ex1" border="0" alt="ex1" src="http://hamletcode.files.wordpress.com/2011/09/ex1_thumb.jpg?w=188&#038;h=244" width="188" height="244"></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hamletcode.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hamletcode.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hamletcode.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hamletcode.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hamletcode.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hamletcode.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hamletcode.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hamletcode.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hamletcode.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hamletcode.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hamletcode.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hamletcode.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hamletcode.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hamletcode.wordpress.com/274/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=274&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hamletcode.wordpress.com/2011/09/23/illustrating-a-simple-request-using-visio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/683d0f9adfd457dda7c0b3dfa4debe11?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hamletcode</media:title>
		</media:content>

		<media:content url="http://hamletcode.files.wordpress.com/2011/09/ex1_thumb.jpg" medium="image">
			<media:title type="html">ex1</media:title>
		</media:content>
	</item>
		<item>
		<title>Adding Extension Methods to 2.0</title>
		<link>http://hamletcode.wordpress.com/2011/07/19/adding-extension-methods-to-2-0/</link>
		<comments>http://hamletcode.wordpress.com/2011/07/19/adding-extension-methods-to-2-0/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 03:35:35 +0000</pubDate>
		<dc:creator>hamletcode</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://hamletcode.wordpress.com/2011/07/19/adding-extension-methods-to-2-0/</guid>
		<description><![CDATA[Today, I was compiling a solution and attempting to get rid of all compiler warnings. There was one that I couldn’t get rid of. Warning 1 The predefined type &#8216;System.Runtime.CompilerServices.ExtensionAttribute&#8217; is defined in multiple assemblies in the global alias; using definition from &#8216;c:\temp\ConsoleApplication2\Program.cs&#8217; ConsoleApplication2 That one is from the sample code (below). The actual one [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=270&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Today, I was compiling a solution and attempting to get rid of all compiler warnings. There was one that I couldn’t get rid of.</p>
<blockquote><p>Warning 1 The predefined type &#8216;System.Runtime.CompilerServices.ExtensionAttribute&#8217; is defined in multiple assemblies in the global alias; using definition from &#8216;c:\temp\ConsoleApplication2\Program.cs&#8217; ConsoleApplication2</p>
</blockquote>
<p>That one is from the sample code (below). The actual one was produced by Gallio.</p>
<p>Extension methods were introduced in .NET 3.0. .NET 3 and 3.5 use the .NET 2 Runtime; they just add a ton of stuff to do it.</p>
<p>If you have 3.0 installed, but your project targets 2.0, you can still use extension methods by adding this code somewhere in your project:</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">namespace</span> System.Runtime.CompilerServices</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> ExtensionAttribute : Attribute</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>     {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>     }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>It creates an attribute that is part of the underlying magic that makes extension methods work. It doesn’t exist in 2.0 until you add it yourself. The compiler will find the attribute (not caring that it came from you), and will implement aforementioned magic. Sneaky.</p>
<p>To see this action:</p>
<ol>
<li>Create a new console project</li>
<li>Change it to target .net 2.0</li>
<li>Paste the following code</li>
</ol>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">namespace</span> ConsoleApplication2</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>     <span style="color:#0000ff;">class</span> Program</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>     {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>         <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main(<span style="color:#0000ff;">string</span>[] args)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span>     }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> IceCream</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span>     {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum12">  12:</span>     }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum13">  13:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum14">  14:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">class</span> ExtensionMethods</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum15">  15:</span>     {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum16">  16:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Melt(<span style="color:#0000ff;">this</span> IceCream iceCream)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum17">  17:</span>         {        </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum18">  18:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum19">  19:</span>     }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum20">  20:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>&nbsp;</p>
<p>Now Compile.</p>
<p>You will get this error:</p>
<blockquote>
<p>Error 1 Cannot define a new extension method because the compiler required type &#8216;System.Runtime.CompilerServices.ExtensionAttribute&#8217; cannot be found. Are you missing a reference to System.Core.dll? c:\temp\ConsoleApplication2\Program.cs 16 33 ConsoleApplication2</p>
</blockquote>
<p>Now, add to the code the ExtensionAttribute shown earlier in this post, and compile again. This time, it compiles. You now have extension methods in a 2.0 project. Why? Because 3.0 added the ability to the 2.0 compiler, and you exposed the ability by providing the essential attribute.</p>
<p>Here comes the itsy bitsy problem. Change the project to 4.0 and compile. It will compile, but you get this warning:</p>
<blockquote>
<p>Warning 1 The predefined type &#8216;System.Runtime.CompilerServices.ExtensionAttribute&#8217; is defined in multiple assemblies in the global alias; using definition from &#8216;c:\temp\ConsoleApplication2\Program.cs&#8217; ConsoleApplication2</p>
</blockquote>
<p>The problem is that you have declared the extension attribute yourself, and it also exists in mscore. So, there are two of the same attributes, and it doesn’t know which to use. I don’t know how it makes the decision on which to use, but in this case it chose mine. Mine must be cooler. I knew there was something special about it when I typed it.</p>
<h2>Gallio</h2>
<p>Now that we’re through all that: my specific problem earlier is that my project had a reference to GALLIO.DLL. Gallio.dll must define the attribute to make extension methods available for itself in 2.0. So, I can’t get rid of the warning without dropping the Gallio.</p>
<p>Or, perhaps there’s a newer version of Gallio that doesn’t add this attribute automatically. I haven’t looked into it.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hamletcode.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hamletcode.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hamletcode.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hamletcode.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hamletcode.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hamletcode.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hamletcode.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hamletcode.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hamletcode.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hamletcode.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hamletcode.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hamletcode.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hamletcode.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hamletcode.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=270&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hamletcode.wordpress.com/2011/07/19/adding-extension-methods-to-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/683d0f9adfd457dda7c0b3dfa4debe11?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hamletcode</media:title>
		</media:content>
	</item>
		<item>
		<title>Wcf and Unity Revisited</title>
		<link>http://hamletcode.wordpress.com/2011/07/12/wcf-and-unity-revisited/</link>
		<comments>http://hamletcode.wordpress.com/2011/07/12/wcf-and-unity-revisited/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 04:59:37 +0000</pubDate>
		<dc:creator>hamletcode</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://hamletcode.wordpress.com/2011/07/12/wcf-and-unity-revisited/</guid>
		<description><![CDATA[&#160; A couple years ago, when working on a service bus, I did a blog post on integrating unity and Wcf: http://hamletcode.wordpress.com/2009/09/02/injecting-into-a-wcf-service/ It’s a disaster of a post, but is hit frequently for some reason. That was all about figuring out how to do it and blabbering on as I did so. Well, I had [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=264&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>A couple years ago, when working on a service bus, I did a blog post on integrating unity and Wcf: </p>
<p><a href="http://hamletcode.wordpress.com/2009/09/02/injecting-into-a-wcf-service/">http://hamletcode.wordpress.com/2009/09/02/injecting-into-a-wcf-service/</a></p>
<p>It’s a disaster of a post, but is hit frequently for some reason. That was all about figuring out how to do it and blabbering on as I did so.</p>
<p>Well, I had to implement it again, so I thought I’d post the same information again more concisely, updated (very slightly) for Asp.Net MVC 3.</p>
<p><strong>Why Bother?</strong></p>
<p>Unity Is an IOC. IOC encourages loose coupling and helps keep things very testable. It allows you to wire up your objects at runtime rather than at code time. If you need to swap out one implementation with another (which makes your application more extensible), then you can do so via configuration.</p>
<p>I cringe quite a bit. Usually the cringing is prompted by static variables and singletons that are used to provide common functionality to a bunch of classes. In some cases, it’s the best way to do it, and it is often simpler. But, simpler isn’t always better. Simpler often results in less flexibility.</p>
<p>Here’s an example of something that I had to do, because the IOC wasn’t in place:</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#008000;">/// &lt;summary&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span> <span style="color:#008000;">/// I hate doing this, but lacking an IOC, we'll have to tolerate it for now</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span> <span style="color:#008000;">/// &lt;/summary&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span> <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">readonly</span> Commands defaultCommands = CommandXmlParser.Parse(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, <span style="color:#006080;">"Commands.xml"</span>));</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span> <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">readonly</span> Commands commands;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span> <span style="color:#008000;">/// &lt;summary&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span> <span style="color:#008000;">/// Initializes a new instance of the Command service, using the default</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span> <span style="color:#008000;">/// static commands.</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span> <span style="color:#008000;">/// &lt;/summary&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span> <span style="color:#0000ff;">public</span> CommandService()</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum12">  12:</span>     : <span style="color:#0000ff;">this</span>(CommandService.defaultCommands)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum13">  13:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum14">  14:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>defaultCommands is static due to the expense of parsing the xml file and loading it into the API. On one hand, this isn’t completely evil because the defaultCommands is private. When you use the default constructor, it defaults to using the static commands. If you use the other constructor (not shown), you can pass in your own. But, if you never use the default constructor, then that static object was loaded for no reason, which is evil.</p>
<p>I just don’t like statics for this type of thing at all. Whenever I have instance code and static code mixed, I feel unclean. I always want a layer in between, or an IOC.</p>
<p>So how would IOC help in this case? It fixes everything!</p>
<p>Here’s the other constructor:</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">public</span> CommandService(Commands commands)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>     <span style="color:#0000ff;">this</span>.commands = commands;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>We simply register a factory for the COMMANDS object in the container, and set it’s lifetime to SINGLETON. Now:</p>
<ul>
<li>The container will create the commands object when it’s needed (so it’s never created unnecessarily)
<li>The commands object doesn’t need to be static, because as a singleton the container will keep an instance alive
<li>The container will pass the commands instance to the constructor automatically</li>
</ul>
<p>So everything’s much neater. But, the setup is more complicated. You have to register all of the types. And that’s where some start to lose interest. The container configuration can quickly become unwieldy. People who don’t appreciate the benefit IOC can quickly become flustered by it. You can be simple and inflexible, or more complicated and completely flexible. (That said, there are ways to mitigate the complexity. Two that I often fall back on are: 1) let the container do most of the work. You don’t have to register every type and every constructor parameter. Unity does a lot without you having to be explicit. You can often delete a bunch of configuration and still be ok. 2) Provide default wiring. You’re objects don’t have to require that everything is injected, it just has to be able to support it for when it’s needed. If you know an object is usually going to be wired up a particular way, then have the default constructor do the wiring automatically (assuming no static resources). Or, provide a static create method that does the default wiring for you.)</p>
<p>All of the above applies to Wcf services as well. Wcf simply instantiates an instance of the service type. If that type has dependencies that you want to inject, then without something like this solution, your instance would have to rely on static factories, or a static IOC container (very bad) to get what it needs. </p>
<p>Now we’re back to where we started: integrate Wcf and Unity.</p>
<p>There are several pieces to get this going. It’s shown below going from the Global.asax and through the Wcf pipeline. To implement it, though, you’ll have to work backwards.</p>
<p><strong>Global.asax, RegisterRoutes()</strong></p>
<p>The RegisterRoutes() method is standard in the Mvc3 Global.asax. I’m registering a route to a service with the name of Configuration.svc. The routing engine prevents the need for an actual svc file. However, to drop the .SVC part, changes are needed in IIS configuration, so I left the SVC. We instruct the routes api to use the UnityWebServiceHostFactory to create the service host. We pass it our Unity container.</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#008000;">// load the container</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span> var container = <span style="color:#0000ff;">new</span> UnityContainer();</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span> var section = (UnityConfigurationSection)ConfigurationManager.GetSection(<span style="color:#006080;">"unity"</span>);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span> section.Configure(container, <span style="color:#006080;">"WebSite"</span>);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>  </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>  </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span> <span style="color:#008000;">// service registrations</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span> <span style="color:#008000;">// rest</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span> routes.Add(<span style="color:#0000ff;">new</span> ServiceRoute(<span style="color:#006080;">"Configuration.svc"</span>, <span style="color:#0000ff;">new</span> UnityWebServiceHostFactory(container), <span style="color:#0000ff;">typeof</span>(ConfigurationService)));</pre>
<p><!--CRLF--></div>
</div>
<p><strong>UnityWebServiceHostFactory</strong></p>
<p>This is the class that instantiates the service host. The service host we’re instantiating is a new class that extends WebServiceHost.</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">namespace</span> SomeGuySoftware.DevDash.Mvc.Unity</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>     <span style="color:#0000ff;">using</span> System;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel.Activation;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>     <span style="color:#0000ff;">using</span> Microsoft.Practices.Unity;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> UnityWebServiceHostFactory : WebServiceHostFactory</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span>     {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span>         <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">readonly</span> IUnityContainer container;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span>         <span style="color:#0000ff;">public</span> UnityWebServiceHostFactory(IUnityContainer unity)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum12">  12:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum13">  13:</span>             <span style="color:#0000ff;">if</span> (unity == <span style="color:#0000ff;">null</span>)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum14">  14:</span>             {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum15">  15:</span>                 <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> ArgumentNullException(<span style="color:#006080;">"unity"</span>);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum16">  16:</span>             }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum17">  17:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum18">  18:</span>             <span style="color:#0000ff;">this</span>.container = unity;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum19">  19:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum20">  20:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum21">  21:</span>         <span style="color:#0000ff;">protected</span> <span style="color:#0000ff;">override</span> ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum22">  22:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum23">  23:</span>             <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">new</span> UnityWebServiceHost(<span style="color:#0000ff;">this</span>.container, serviceType, baseAddresses);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum24">  24:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum25">  25:</span>     }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum26">  26:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p><strong>UnityWebServiceHost</strong></p>
<p>This is the service host. It is a subclass of WebServiceHost, which provides restful services. We override the OnOpening method and insert a behavior.</p>
<p>You can add the behavior many different ways, but this one is nice because you wrap it all up in the service host. The host also hangs on the the container, which we will use later in the instance provider.</p>
<p>Strictly speaking, you don’t need to create this service host subclass. You could instead always add the behavior manually either through code or through attributes. But, this is better.</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">namespace</span> SomeGuySoftware.DevDash.Mvc.Unity</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>     <span style="color:#0000ff;">using</span> System;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel.Web;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>     <span style="color:#0000ff;">using</span> Microsoft.Practices.Unity;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span>     <span style="color:#008000;">/// &lt;summary&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span>     <span style="color:#008000;">/// A WebServiceHost with a unity container.</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span>     <span style="color:#008000;">/// The unity container is used to create the service instances.</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span>     <span style="color:#008000;">/// &lt;/summary&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> UnityWebServiceHost : WebServiceHost</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum12">  12:</span>     {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum13">  13:</span>         <span style="color:#008000;">/// &lt;summary&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum14">  14:</span>         <span style="color:#008000;">/// Initializes a new instance of the UnityWebServiceHost class.</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum15">  15:</span>         <span style="color:#008000;">/// &lt;/summary&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum16">  16:</span>         <span style="color:#008000;">/// &lt;param name="container"&gt;Required. The unity container that provides the service instances.&lt;/param&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum17">  17:</span>         <span style="color:#008000;">/// &lt;param name="serviceType"&gt;Required. The type of the service.&lt;/param&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum18">  18:</span>         <span style="color:#008000;">/// &lt;param name="baseAddresses"&gt;The service's base addresses.&lt;/param&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum19">  19:</span>         <span style="color:#0000ff;">public</span> UnityWebServiceHost(IUnityContainer container, Type serviceType, <span style="color:#0000ff;">params</span> Uri[] baseAddresses)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum20">  20:</span>             : <span style="color:#0000ff;">base</span>(serviceType, baseAddresses)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum21">  21:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum22">  22:</span>             <span style="color:#0000ff;">if</span> (container == <span style="color:#0000ff;">null</span>)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum23">  23:</span>             {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum24">  24:</span>                 <span style="color:#0000ff;">throw</span> <span style="color:#0000ff;">new</span> ArgumentNullException(<span style="color:#006080;">"container"</span>);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum25">  25:</span>             }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum26">  26:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum27">  27:</span>             <span style="color:#0000ff;">this</span>.Unity = container;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum28">  28:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum29">  29:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum30">  30:</span>         <span style="color:#008000;">/// &lt;summary&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum31">  31:</span>         <span style="color:#008000;">/// Gets the unity container that's responsible for the service host's intance management.</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum32">  32:</span>         <span style="color:#008000;">/// &lt;/summary&gt;</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum33">  33:</span>         <span style="color:#0000ff;">public</span> IUnityContainer Unity</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum34">  34:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum35">  35:</span>             get;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum36">  36:</span>             <span style="color:#0000ff;">private</span> set;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum37">  37:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum38">  38:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum39">  39:</span>         <span style="color:#0000ff;">protected</span> <span style="color:#0000ff;">override</span> <span style="color:#0000ff;">void</span> OnOpening()</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum40">  40:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum41">  41:</span>             <span style="color:#0000ff;">base</span>.OnOpening();</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum42">  42:</span>             <span style="color:#0000ff;">this</span>.Description.Behaviors.Add(<span style="color:#0000ff;">new</span> UnityInstanceProviderBehavior());</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum43">  43:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum44">  44:</span>     }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum45">  45:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p><strong>UnityInstanceProviderBehavior</strong></p>
<p>The behavior iterates all of the endpoint dispatchers and assigns a new instance provider. Now, whenever Wcf needs to create a service instance, it’s going to call our class instead of it’s own.</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">namespace</span> SomeGuySoftware.DevDash.Mvc.Unity</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>     <span style="color:#0000ff;">using</span> System.Linq;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel.Description;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel.Dispatcher;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> UnityInstanceProviderBehavior : IServiceBehavior</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span>     {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum12">  12:</span>             <span style="color:#0000ff;">foreach</span> (ChannelDispatcher dispatcher <span style="color:#0000ff;">in</span> serviceHostBase.ChannelDispatchers.OfType&lt;ChannelDispatcher&gt;())</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum13">  13:</span>             {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum14">  14:</span>                 <span style="color:#0000ff;">foreach</span> (EndpointDispatcher ed <span style="color:#0000ff;">in</span> dispatcher.Endpoints)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum15">  15:</span>                 {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum16">  16:</span>                     ed.DispatchRuntime.InstanceProvider = <span style="color:#0000ff;">new</span> UnityInstanceProvider(serviceDescription.ServiceType);                    </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum17">  17:</span>                 }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum18">  18:</span>             }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum19">  19:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum20">  20:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum21">  21:</span>         <span style="color:#cc6633;">#region</span> Not Used</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum22">  22:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum23">  23:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum24">  24:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum25">  25:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum26">  26:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection&lt;ServiceEndpoint&gt; endpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum27">  27:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum28">  28:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum29">  29:</span>         <span style="color:#cc6633;">#endregion</span></pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum30">  30:</span>     }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum31">  31:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p><strong>UnityInstanceProvider</strong></p>
<p>At long last, we get to use the unity container. Recall that the unity container was passed into the service host. The instance provider will work its way back to the service host to get the container and use it to provide the service class.</p>
<p>GetInstance and ReleaseInstance both use a GetUnityContainer() extension method. I added the extension method just because it’s more easily readable than casting inline.</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">namespace</span> SomeGuySoftware.DevDash.Mvc.Unity</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>     <span style="color:#0000ff;">using</span> System;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel.Channels;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel.Dispatcher;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span>  </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> UnityInstanceProvider : IInstanceProvider</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span>     {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span>         <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">readonly</span> Type type;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span>         <span style="color:#0000ff;">public</span> UnityInstanceProvider(Type type)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum12">  12:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum13">  13:</span>             <span style="color:#0000ff;">this</span>.type = type;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum14">  14:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum15">  15:</span>  </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum16">  16:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> GetInstance(InstanceContext instanceContext)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum17">  17:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum18">  18:</span>             <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">this</span>.GetInstance(instanceContext, <span style="color:#0000ff;">null</span>);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum19">  19:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum20">  20:</span>  </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum21">  21:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">object</span> GetInstance(InstanceContext instanceContext, Message message)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum22">  22:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum23">  23:</span>             <span style="color:#0000ff;">return</span> instanceContext.GetUnityContainer().Resolve(<span style="color:#0000ff;">this</span>.type, <span style="color:#0000ff;">null</span>);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum24">  24:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum25">  25:</span>  </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum26">  26:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> ReleaseInstance(InstanceContext instanceContext, <span style="color:#0000ff;">object</span> instance)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum27">  27:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum28">  28:</span>             instanceContext.GetUnityContainer().Teardown(instance);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum29">  29:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum30">  30:</span>     }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum31">  31:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p><strong>Extension Method</strong></p>
<p>This is the extension method that digs the instance context out of the service host.</p>
<p>Earlier, I mentioned that you don’t need to create a service host subclass. If you didn’t, then you wouldn’t be able to retrieve the container this way. But, you could instead drill into host.description.behaviors, and pull it off the UnityInstanceProviderBehavior. (You should definitely use the service host subclass, though. This is just completing an earlier thought.)</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">namespace</span> SomeGuySoftware.DevDash.Mvc.Unity</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>     <span style="color:#0000ff;">using</span> Microsoft.Practices.Unity;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">class</span> ExtensionMethods</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span>     {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> IUnityContainer GetUnityContainer(<span style="color:#0000ff;">this</span> InstanceContext instanceContext)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span>         {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span>             <span style="color:#0000ff;">return</span> ((UnityWebServiceHost)instanceContext.Host).Unity;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span>         }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum12">  12:</span>     }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum13">  13:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>And there you go.</p>
<h2><strong>But wait, There’s More!</strong></h2>
<p>Update: 7/12/2011</p>
<p>I started swapping over my services to use it and ran into a glitch.</p>
<p>Typically when dealing with Wcf services, the abstraction you want to deal with is the service contract, which is an interface.</p>
<p>I wanted to register the service like this:</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> routes.Add(<span style="color:#0000ff;">new</span> ServiceRoute(<span style="color:#006080;">"Configuration.svc"</span>, <span style="color:#0000ff;">new</span> UnityWebServiceHostFactory(container), <span style="color:#0000ff;">typeof</span>(IConfigurationService)));</pre>
<p><!--CRLF--></div>
</div>
<p>The problem arises when the UnityWebServiceHost passes IConfigurationService up to the base. It can’t do it; the WebServiceHost only accepts service types, which is an actual type, not an interface. Somehow, we need to pass it a type that is either the service contract interface (ideal), or something compatible with our actual implementation (ie: a base class.)</p>
<p>There are least two solutions to this problem.</p>
<h3>Change the Constructor – I don’t like this one</h3>
<p>We can change the constructor on UnityWebServiceHost to resolve the service type, and then get a type.</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">public</span> UnityWebServiceHost(IUnityContainer container, Type serviceType, <span style="color:#0000ff;">params</span> Uri[] baseAddresses)</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span>     : <span style="color:#0000ff;">base</span>(container.Resolve(serviceType, <span style="color:#0000ff;">null</span>).GetType())</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>    <span style="color:#0000ff;">this</span>.Unity = container;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>I don’t like it for a couple of reasons:</p>
<ul>
<li>You resolve the instance just to call GetType() on it. You don’t need the resolved object, just it’s type. It’d be handy if Unity provided a type lookup in addition to the resolve.</li>
<li>You can’t validate the container before using it.</li>
</ul>
<h3>Register a Base Class Instead</h3>
<p>This is the one I’m going with. It’s not great, but it’s better than the previous option. Instead of registering the interface type, register an abstract class that implements the interface, then assign it to an implementation of the subclass.</p>
<p>My interface is IConfigurationService. I have an abstract class named ConfigurationService that implements the interface. Then, ConfigurationServiceXml is a subclass of Configuration service.</p>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:97.5%;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> routes.Add(<span style="color:#0000ff;">new</span> ServiceRoute(<span style="color:#006080;">"Configuration.svc"</span>, <span style="color:#0000ff;">new</span> UnityWebServiceHostFactory(container), <span style="color:#0000ff;">typeof</span>(ConfigurationService)));</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span> <span style="color:#0000ff;">namespace</span> SomeGuySoftware.DevDash.Contracts</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>     <span style="color:#0000ff;">using</span> System.Collections.Generic;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel.Web;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span>     [ServiceContract]</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">interface</span> IConfigurationService</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span>     {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum12">  12:</span>         [OperationContract]</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum13">  13:</span>         [WebGet(UriTemplate=<span style="color:#006080;">"Environments?getServers={getServers}&amp;getFeatureGroups={getFeatureGroups}"</span>)]</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum14">  14:</span>         IEnumerable&lt;DevEnvironment&gt; GetAllEnvironments(<span style="color:#0000ff;">bool</span> getServers, <span style="color:#0000ff;">bool</span> getFeatureGroups);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum15">  15:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum16">  16:</span>         [OperationContract]</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum17">  17:</span>         [WebGet(UriTemplate=<span style="color:#006080;">"Environment/{environmentName}?getServers={getServers}&amp;getFeatureGroups={getFeatureGroups}"</span>)]</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum18">  18:</span>         DevEnvironment GetEnvironment(<span style="color:#0000ff;">string</span> environmentName, <span style="color:#0000ff;">bool</span> getServers, <span style="color:#0000ff;">bool</span> getFeatureGroups);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum19">  19:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum20">  20:</span>         [OperationContract]</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum21">  21:</span>         [WebGet(UriTemplate=<span style="color:#006080;">"Server/{ServerName}?getFeatureGroups={getFeatureGroups}"</span>)]</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum22">  22:</span>         Server GetServer(<span style="color:#0000ff;">string</span> serverName, <span style="color:#0000ff;">bool</span> getFeatureGroups);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum23">  23:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum24">  24:</span>         [OperationContract]</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum25">  25:</span>         [WebGet(UriTemplate = <span style="color:#006080;">"FeaturePage/?serverTypeName={serverTypeName}&amp;serverName={serverName}&amp;featureGroupName={featureGroupName}&amp;pageName={pageName}"</span>)]</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum26">  26:</span>         FeaturePage GetFeaturePage(<span style="color:#0000ff;">string</span> serverTypeName, <span style="color:#0000ff;">string</span> serverName, <span style="color:#0000ff;">string</span> featureGroupName, <span style="color:#0000ff;">string</span> pageName);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum27">  27:</span>     }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum28">  28:</span> }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum29">  29:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum30">  30:</span> <span style="color:#0000ff;">namespace</span> SomeGuySoftware.DevDash.Contracts</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum31">  31:</span> {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum32">  32:</span>     <span style="color:#0000ff;">using</span> System.Collections.Generic;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum33">  33:</span>     <span style="color:#0000ff;">using</span> System.ServiceModel.Activation;</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum34">  34:</span>&nbsp; </pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum35">  35:</span>     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum36">  36:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">abstract</span> <span style="color:#0000ff;">class</span> ConfigurationService : IConfigurationService</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum37">  37:</span>     {</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum38">  38:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">abstract</span> IEnumerable&lt;DevEnvironment&gt; GetAllEnvironments(<span style="color:#0000ff;">bool</span> getServers, <span style="color:#0000ff;">bool</span> getFeatureGroups);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum39">  39:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">abstract</span> DevEnvironment GetEnvironment(<span style="color:#0000ff;">string</span> environmentName, <span style="color:#0000ff;">bool</span> getServers, <span style="color:#0000ff;">bool</span> getFeatureGroups);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum40">  40:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">abstract</span> Server GetServer(<span style="color:#0000ff;">string</span> serverName, <span style="color:#0000ff;">bool</span> getFeatureGroups);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum41">  41:</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">abstract</span> FeaturePage GetFeaturePage(<span style="color:#0000ff;">string</span> serverTypeName, <span style="color:#0000ff;">string</span> serverName, <span style="color:#0000ff;">string</span> featureGroupName, <span style="color:#0000ff;">string</span> pageName);</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum42">  42:</span>     }</pre>
<p><!--CRLF-->
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum43">  43:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>Now, you can swap out the service via configuration only; no need to change the global.asax when you write a new implementation of the service.</p>
<p>I put the abstract class in the CONTRACTS assembly next to the service contract. It doesn’t provide any implementation, so nothing is revealed. Anyone write a new implementation would have the contracts assembly already (that’s where the service contract is).</p>
<p>This extra step isn’t great. Does anyone have a better idea?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hamletcode.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hamletcode.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hamletcode.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hamletcode.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hamletcode.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hamletcode.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hamletcode.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hamletcode.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hamletcode.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hamletcode.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hamletcode.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hamletcode.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hamletcode.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hamletcode.wordpress.com/264/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=264&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hamletcode.wordpress.com/2011/07/12/wcf-and-unity-revisited/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/683d0f9adfd457dda7c0b3dfa4debe11?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hamletcode</media:title>
		</media:content>
	</item>
		<item>
		<title>Actually Agile?</title>
		<link>http://hamletcode.wordpress.com/2011/06/27/actually-agile/</link>
		<comments>http://hamletcode.wordpress.com/2011/06/27/actually-agile/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 14:15:01 +0000</pubDate>
		<dc:creator>hamletcode</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hamletcode.wordpress.com/?p=261</guid>
		<description><![CDATA[I&#8217;ve been working with a third party product, that shall remain nameless, at work. A couple weeks ago, we installed the latest version in our test environment. I&#8217;ve been rewriting an application that moves data from our software to their software. It&#8217;s mostly been going well, but someone else noticed a bug. She jumped on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=261&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working with a third party product, that shall remain nameless, at work.</p>
<p>A couple weeks ago, we installed the latest version in our test environment. I&#8217;ve been rewriting an application that moves data from our software to their software. It&#8217;s mostly been going well, but someone else noticed a bug. She jumped on their website and saw that their have been 4 patches since we deployed to my test environment.</p>
<p>When I hard that, my first reaction was cynical. I almost laughed at it because my gut reaction was that it was ridiculous to have that many bug fixes in such a short time.</p>
<p>Then, I came across a performance problem with an operation on their web service. It worked ok at the beginning of the move, but slowed down over time. I got in touch with them to find out what they can do about it. They responded stating they could add a new operation that takes an array of objects instead of a single object. Then, we can just pass them all at once rather than one at a time. I responded &#8220;ok&#8221;. A while after, that, I was informed that the feature request had been implemented in patch 7 and was ready for download.</p>
<p>That&#8217;s when I realized my cynicism was unwarranted. For the last 10 years, I&#8217;ve worked for &#8220;agile&#8221; companies, but said agility never makes it to the clients. I&#8217;ve always been on scheduled releases even while, internally, we make daily deliverables. This vendor is differnet. They&#8217;re agile to the immediate benefit of the customer. They were able to turn around that request very quickly.</p>
<p>Anyway, I thought that was pretty cool and wanted to share.</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hamletcode.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hamletcode.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hamletcode.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hamletcode.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hamletcode.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hamletcode.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hamletcode.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hamletcode.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hamletcode.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hamletcode.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hamletcode.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hamletcode.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hamletcode.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hamletcode.wordpress.com/261/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=261&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hamletcode.wordpress.com/2011/06/27/actually-agile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/683d0f9adfd457dda7c0b3dfa4debe11?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hamletcode</media:title>
		</media:content>
	</item>
		<item>
		<title>Old Code and Documentation</title>
		<link>http://hamletcode.wordpress.com/2011/04/19/old-code-and-documentation/</link>
		<comments>http://hamletcode.wordpress.com/2011/04/19/old-code-and-documentation/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 01:13:12 +0000</pubDate>
		<dc:creator>hamletcode</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://hamletcode.wordpress.com/2011/04/19/old-code-and-documentation/</guid>
		<description><![CDATA[I’ve been moving all of my stuff over to a NAS, and moving some stuff around. I found a program I wrote in 1993. I can’t actually run it, but I’m looking through all the text file that comprise it. It was a host program for a computer. You fire it up, and it answers [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=260&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I’ve been moving all of my stuff over to a NAS, and moving some stuff around.</p>
<p>I found a program I wrote in 1993. I can’t actually run it, but I’m looking through all the text file that comprise it.</p>
<p>It was a host program for a computer. You fire it up, and it answers the modem and gives the remote user access to your system. It’s a mini-bbs, but it’s intent was to remotely operate your DOS based computer. You could upload, download, zip things up, leave files for the SYSOP, etc. I really wish I could get it to execute.</p>
<p>1993 was 3 years after I graduated high school, 1 year after basic training, and 3 years before getting a real job that paid me to program. I was but a wee lad. But, even at that tender age of 21, you can tell how obnoxious I was. The following are some of the uneditted files from that bbs system. You can see that I was using Allard-Works even back then.</p>
<p>The one thing that screams at me is multiple uses of the word IDOL instead of IDLE. Ah, to be young again.</p>
<p><strong>WELCOME – when you login</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allard-Works Presents<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J-HOST!!!<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If you are interested in this HOST Software,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Leave the sysop a message.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jay Allard<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; President/Founder<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; of<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allard-Works ENT.</p>
<p>Ben, Hi.. don&#8217;t know what&#8217;s going on.&nbsp; I went to bed.&nbsp;&nbsp; Feel free<br />to goof around as much as you want, the ringers are off.<br />&nbsp;<br />Good luck!<br />&nbsp;</p>
<p><strong>GOOD BYE – when you log off</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =============<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Farewell!<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =============</p>
<p>As the final seconds slowly tick away, your modem losing carrier,<br />I hope you are left with good feelings, joy, and the satisfaction<br />of knowing that you have just called a quality HOST system.&nbsp; May<br />your day proceed in a splendid fashion, and may all your future<br />&nbsp;&nbsp;&nbsp; telecommunication sessions be as triumphant as this one.<br />&nbsp;<br /> Go now&#8230; your time is done.&nbsp; Live a happy and prosperous life,<br />&nbsp; and I eagerly await your next call to JBBS, where I strive to<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bring you the upmost in communication satisfaction. <br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Happy trails!</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jay Allard.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; President/Founder Allard-Works Ent.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; He wrote this program, too.</p>
<p><strong>NEW USER</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Greetings.</p>
<p>&nbsp; This is the J-Host program.&nbsp; It is not your typical BBS.&nbsp; This<br /> program is designed for easy installation, and instant set up. <br />&nbsp; It&#8217;s sole purpose is so that people can call my system, look<br />&nbsp; around, and download something if they need it.&nbsp; It&#8217;s a host<br />&nbsp; program which should kick the butts of Telemate&#8217;s and Telix&#8217;s<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host Script Files.</p>
<p>&nbsp; It is also the prelude to the more complex, fully operational<br />JBBS.&nbsp; That has color, message bases, file transfer bases, and it<br />&nbsp; eliminates the DOS LIKE format of operation.&nbsp; That will limit<br />where you can go, and what you can take, just like a regular BBS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; system.&nbsp; This, however, is strictly for personal use.</p>
<p> If this host program appeals to you and you would like a copy,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; leave me a message and I&#8217;ll get back to you.<br />&nbsp;<br />&nbsp;&nbsp; By the way&#8230;&nbsp; you should see the sysops end of this baby.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jay Allard<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; President/Founder<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; of<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allard-Works Enterprises.</p>
<p><strong>HELP</strong></p>
<p>Greetings.&nbsp; Bad news!&nbsp; I had a nice help file&#8230; funny, yet informative.<br />&nbsp;<br />But!&nbsp; I accidentally deleted it, and I&#8217;m too lazy to type it over.</p>
<p>So&#8230; deal with this for now.<br />&nbsp;<br />Peace.<br />Type M for Menu.</p>
<p>Hey Darke, if you&#8217;re reading this, type M.</p>
<p><strong>The Main Menu</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[32mÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ³&nbsp; ~[34mJay's Computer.&nbsp; ~[32m³<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ</p>
<p> ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿&nbsp;&nbsp;&nbsp;&nbsp; ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿&nbsp;&nbsp;&nbsp;&nbsp; <br /> ³ ~[36mD&nbsp;&nbsp;&nbsp;&nbsp; ~[35mDirectory.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[32m³&nbsp;&nbsp;&nbsp;&nbsp; ³ ~[36mY&nbsp;&nbsp; ~[35mEdit your Account. ~[32m³&nbsp; <br /> ³ ~[36mCD&nbsp;&nbsp;&nbsp; ~[35mChange Directory. ~[32m³&nbsp;&nbsp;&nbsp;&nbsp; ³ ~[36mPP&nbsp; ~[35mToggle Page Pause. ~[32m³<br /> ³ ~[36mZV&nbsp;&nbsp;&nbsp; ~[35mZip View a File.&nbsp; ~[32m³&nbsp;&nbsp;&nbsp;&nbsp; ³ ~[36mC&nbsp;&nbsp; ~[35mClear the Screen.&nbsp; ~[32m³<br /> ³ ~[36mTYPE&nbsp; ~[35mType a file.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[32m³&nbsp;&nbsp;&nbsp;&nbsp; ³ ~[36mP&nbsp;&nbsp; ~[35mPage Jay.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[32m³<br /> ³ ~[36mDL&nbsp;&nbsp;&nbsp; ~[35mDownload A File.&nbsp; ~[32m³&nbsp;&nbsp;&nbsp;&nbsp; ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ<br /> ³ ~[36mUL&nbsp;&nbsp;&nbsp; ~[35mUpload A File.&nbsp;&nbsp;&nbsp; ~[32m³<br /> ³&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿<br /> ³ ~[36mM&nbsp;&nbsp;&nbsp;&nbsp; ~[35mThis Menu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[32m³ ³&nbsp;&nbsp; ~[33mJHOST v~[37m1.0.&nbsp; ~[35mCopyright 1993&nbsp; ~[32m³<br /> ³ ~[36m?&nbsp;&nbsp;&nbsp;&nbsp; ~[35mHelp Menu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[32m³ ³&nbsp;&nbsp;&nbsp;&nbsp; ~[31mAllard-Works Enterprises&nbsp;&nbsp; ~[32m³<br /> ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ³ ~[36mG&nbsp; ~[35mGood Bye ~[32m³<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ³ ~[36mF&nbsp; ~[35mFeedBack ~[32m³<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ<br />Presumably, those ascii characters show up as lines in DOS.</p>
<p><strong>Leave Feedback</strong></p>
<p>Greetings!<br />&nbsp;<br />Thank you for choosing to leave feed back to they SYSOP.<br />The really cool JEditor is still under construction,<br />so for now you're going to have to tolerate this primitive<br />little comment procedure.&nbsp; Just type a message, and press enter.<br />You have 250 characters.<br />&nbsp;<br />Party on.</p>
<p><strong>Sysop Menu</strong></p>
<p>~[33mÚÄÄÄÄÄÄÄÄÄÄÄÄ¿<br />³ ~[31mSysop Menu ~[33m³ <br />ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ<br />&nbsp; <br />&nbsp; ~[32mP&nbsp; ~[34mPkUnzip&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[32mA&nbsp; ~[34mAccess Levels<br />&nbsp; ~[32mU&nbsp; ~[34mUpload Setup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[32mE&nbsp; ~[34mEdit User<br />&nbsp; ~[32mD&nbsp; ~[34mDownload Setup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[32mL&nbsp; ~[34mList Users</p>
<p>&nbsp; ~[32mC&nbsp; ~[34mCleanup Functions&nbsp;&nbsp;&nbsp; ~[32mS&nbsp; ~[34mSystem Passwords<br />&nbsp; ~[32mQ&nbsp; ~[34mQuit</p>
<p><strong>Download Menu</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ³&nbsp; Download Protocols&nbsp; ³<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1) ZMODEM<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B) Batch<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Q) Quit.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Edit this so it matches your protocols.]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [D-MENU.JAY]</p>
<p><strong>Some Other Menu</strong></p>
<p>~[2J<br />This is a list of additional commands not included on the<br />Menu.</p>
<p>~[31m==================================================<br />~[36mSYSOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[34mSysop functions.&nbsp; Need high access.<br />~[36mFUNKY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[34mToggle Funky Cursor.&nbsp; (Ansi Must be on)<br />~[36mA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[34mToggle Ansi.<br />~[36mDB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~[34mDownload Batch<br />~[31m===================================================</p>
<p>~[35mThis is just a temporary function.&nbsp; Once I finish adding<br />commands, there will be one menu with all necessary info.<br />&nbsp;<br />~[33mParty on.</p>
<p><strong>Upload Menu</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ³&nbsp; Upload Protocols&nbsp; ³<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1) ZMODEM<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2) HS-Link!&nbsp; Excellent.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Q) Quit</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Edit this so it matches your protocols.]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [U-MENU.JAY]</p>
<p><strong>Feedback left by users</strong></p>
<p>~[36mFeedback File created on Thursday, January 20, 1994 at 1:20:6.80.<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ<br />~[37mFeedback from FILTER.<br />Recorded on Thursday, January 20, 1994 at 1:20:6.80.<br />&nbsp;&nbsp; ~[32mThank you again guy,I am one of the more fortunate ones to have JCD3R To use. I will call you again in a few days<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>~[37mFeedback from HARDTIME.<br />Recorded on Wednesday, January 26, 1994 at 15:16:58.70.<br />&nbsp;&nbsp; ~[32mjay guess who it os chuck i am just returning your call i think i have the cables. talk to you later<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>~[37mFeedback from ROBIN.<br />Recorded on Wednesday, January 26, 1994 at 16:53:13.40.<br />&nbsp;&nbsp; ~[32m<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>~[37mFeedback from ROBIN.<br />Recorded on Wednesday, January 26, 1994 at 16:55:44.66.<br />&nbsp;&nbsp; ~[32mfunky cursor is like a Medieaval (sic) obstacle to be overcome to rescue the Princess or something. I think it takes some getting use to. I was having the Devil&#8217;s own time then I finally broke through to additional commands and<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>~[37mFeedback from ROBIN.<br />Recorded on Wednesday, January 26, 1994 at 16:58:58.22.<br />&nbsp;&nbsp; ~[32mlearned how to toggle and typed funky and a carriage return and had no problem toggling it off. Just now I hit a carriage return and ended the feedback session, hence the two part message. Thanks for the trust, I will not abuse it.<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>~[37mFeedback from ROBIN.<br />Recorded on Wednesday, January 26, 1994 at 17:46:59.28.<br />&nbsp;&nbsp; ~[32mThoroughly enjoyed perusing your system. Thanks again, Robin.<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>~[37mFeedback from SPITFYRE.<br />Recorded on Thursday, January 27, 1994 at 15:19:21.23.<br />&nbsp;&nbsp; ~[32mThis is good. I&#8217;m getting used to it still, but I&#8217;m just slow. Well, I gotta go&#8230; but I&#8217;ll be back!&nbsp;&nbsp;&nbsp;&nbsp; Ben<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>~[37mFeedback from FILTER.<br />Recorded on Sunday, January 30, 1994 at 15:14:55.72.<br />&nbsp;&nbsp; ~[32m<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>~[37mFeedback from FILTER.<br />Recorded on Sunday, January 30, 1994 at 15:17:22.97.<br />&nbsp;&nbsp; ~[32mI seem to be lost. can any thing be downloaded or do you have to set up the files?<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>~[37mFeedback from FILTER.<br />Recorded on Sunday, January 30, 1994 at 15:43:44.33.<br />&nbsp;&nbsp; ~[32mI will get the idea sooner thaN later I hope. Catch ya later on and thanks again<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>~[37mFeedback from FILTER.<br />Recorded on Sunday, April 24, 1994 at 1:7:8.51.<br />&nbsp;&nbsp; ~[32mI tried but failed to download any thing<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>~[37mFeedback from SPITFYRE.<br />Recorded on Tuesday, March 14, 1995 at 10:32:16.32.<br />&nbsp;&nbsp; ~[32mHey&#8230;get ready to die! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p><strong>The Log File</strong></p>
<p>Log created on Sunday, April 24, 1994 at 1:44:15.84<br />&nbsp;&nbsp; Logged Off: Sunday, April 24, 1994 at 1:44:15.84</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Sunday, April 24, 1994 AT 1:44:19.58<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Saturday, April 30, 1994 AT 18:22:1.17</p>
<p>SYSOP logged on: Saturday, April 30, 1994 at 18:25:0.23<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Saturday, April 30, 1994 AT 18:30:1.0</p>
<p>SYSOP logged on: Saturday, April 30, 1994 at 18:32:10.2<br />&nbsp;&nbsp; Logged Off: Saturday, April 30, 1994 at 18:37:21.94</p>
<p>SYSOP logged on: Saturday, April 30, 1994 at 18:37:32.43<br />&nbsp;&nbsp; Logged Off: Saturday, April 30, 1994 at 18:40:32.42</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Saturday, April 30, 1994 AT 18:40:34.62<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Sunday, May 1, 1994 AT 14:10:10.62</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Sunday, May 1, 1994 AT 14:10:30.23<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Sunday, May 1, 1994 AT 14:18:0.95</p>
<p>SYSOP logged on: Sunday, May 1, 1994 at 14:19:8.6<br />&nbsp;&nbsp; Logged Off: Sunday, May 1, 1994 at 14:38:53.69</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Sunday, May 1, 1994 AT 14:38:55.22<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, May 13, 1994 AT 0:40:59.89</p>
<p>SYSOP logged on: Friday, May 13, 1994 at 0:44:2.2<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, May 13, 1994 AT 0:55:37.49</p>
<p>&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, May 13, 1994 AT 0:58:34.2</p>
<p>&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, May 13, 1994 AT 19:15:17.23</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Friday, May 13, 1994 AT 19:26:34.24<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, May 17, 1994 AT 3:3:38.49</p>
<p>SYSOP logged on: Tuesday, May 17, 1994 at 3:11:33.54<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, May 17, 1994 AT 3:12:16.98</p>
<p>SYSOP logged on: Tuesday, May 17, 1994 at 3:12:25.55</p>
<p>FILTER logged on: Tuesday, May 17, 1994 at 3:18:7.96<br />&nbsp;&nbsp; Logged Off: Tuesday, May 17, 1994 at 3:19:25.40</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, May 17, 1994 AT 3:21:50.8<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, May 17, 1994 AT 3:33:11.76</p>
<p>SYSOP logged on: Tuesday, May 17, 1994 at 3:33:53.50<br />&nbsp;&nbsp; Logged Off: Tuesday, May 17, 1994 at 3:34:29.81<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, May 17, 1994 AT 3:35:45.38</p>
<p>FILTER logged on: Tuesday, May 17, 1994 at 3:38:9.95</p>
<p>FILTER logged on: Tuesday, May 17, 1994 at 3:41:42.62</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, May 17, 1994 AT 3:46:30.10<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, May 27, 1994 AT 22:11:40.55</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Friday, May 27, 1994 AT 22:11:49.50<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, May 27, 1994 AT 22:11:59.72</p>
<p>SYSOP logged on: Friday, May 27, 1994 at 22:12:38.66<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, July 1, 1994 AT 8:32:48.21</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Friday, July 1, 1994 AT 8:32:49.75<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, July 1, 1994 AT 8:34:7.42</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Friday, July 1, 1994 AT 8:34:15.38<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, July 1, 1994 AT 8:34:17.80</p>
<p>ULTRARIAN logged on: Friday, July 1, 1994 at 8:34:56.79<br />Sysop Killed (announced) at 8:40:59.36 on Friday, July 1, 1994</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Friday, July 1, 1994 AT 8:41:0.67<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Sunday, July 10, 1994 AT 19:33:16.85</p>
<p>SYSOP logged on: Sunday, July 10, 1994 at 19:33:40.30<br />&nbsp;&nbsp; Logged Off: Sunday, July 10, 1994 at 19:34:3.15</p>
<p>SYSOP logged on: Sunday, July 10, 1994 at 19:44:26.77<br />&nbsp;&nbsp; Logged Off: Sunday, July 10, 1994 at 19:51:51.34<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, July 22, 1994 AT 20:50:42.72</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Friday, July 22, 1994 AT 20:50:49.97<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, July 22, 1994 AT 20:50:51.40</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Friday, July 22, 1994 AT 20:50:54.14<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, July 22, 1994 AT 20:51:3.81</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Friday, July 22, 1994 AT 20:51:8.97<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, July 22, 1994 AT 20:51:14.19</p>
<p>SYSOP logged on: Friday, July 22, 1994 at 20:51:48.14<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, July 22, 1994 AT 20:52:10.11</p>
<p>SYSOP logged on: Friday, July 22, 1994 at 20:52:16.86<br />&nbsp;&nbsp; Logged Off: Friday, July 22, 1994 at 20:56:16.94</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Friday, July 22, 1994 AT 20:56:36.77<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, July 26, 1994 AT 19:40:28.23</p>
<p>SYSOP logged on: Tuesday, July 26, 1994 at 19:40:36.63<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, July 26, 1994 AT 19:45:25.71</p>
<p>SYSOP logged on: Tuesday, July 26, 1994 at 19:45:35.48<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, July 26, 1994 AT 19:46:9.43</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, July 26, 1994 AT 19:46:13.5<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, July 28, 1994 AT 18:1:36.0</p>
<p>&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, July 28, 1994 AT 18:2:25.16</p>
<p>SYSOP logged on: Thursday, July 28, 1994 at 18:2:28.95<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, July 28, 1994 AT 18:2:59.65</p>
<p>SYSOP logged on: Thursday, July 28, 1994 at 18:3:6.69<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, July 28, 1994 AT 18:3:39.9</p>
<p>SYSOP logged on: Thursday, July 28, 1994 at 18:3:46.51<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Sunday, July 31, 1994 AT 10:10:39.36</p>
<p>SYSOP logged on: Sunday, July 31, 1994 at 10:13:41.50<br />&nbsp;&nbsp; Logged Off: Sunday, July 31, 1994 at 10:18:40.29</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Sunday, July 31, 1994 AT 10:18:45.23<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, August 2, 1994 AT 21:30:25.66</p>
<p>SYSOP logged on: Tuesday, August 2, 1994 at 21:32:49.24</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, August 2, 1994 AT 22:31:30.29<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Sunday, August 7, 1994 AT 7:15:26.13</p>
<p>SYSOP logged on: Sunday, August 7, 1994 at 7:15:32.34<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Sunday, August 7, 1994 AT 7:15:46.12</p>
<p>SYSOP logged on: Sunday, August 7, 1994 at 7:17:53.49<br />&nbsp;&nbsp; Logged Off: Sunday, August 7, 1994 at 7:48:28.61</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Sunday, August 7, 1994 AT 7:48:30.53<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, August 11, 1994 AT 19:13:55.1</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Thursday, August 11, 1994 AT 19:14:43.84<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, August 11, 1994 AT 19:14:46.47</p>
<p>SYSOP logged on: Thursday, August 11, 1994 at 19:17:29.49<br />&nbsp;&nbsp; Logged Off: Thursday, August 11, 1994 at 19:18:4.64</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Thursday, August 11, 1994 AT 19:46:23.71<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, September 20, 1994 AT 19:33:50.95</p>
<p>SYSOP logged on: Tuesday, September 20, 1994 at 19:33:56.89<br />&nbsp;&nbsp; Logged Off: Tuesday, September 20, 1994 at 19:34:37.70</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, September 20, 1994 AT 19:34:38.96<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, September 20, 1994 AT 19:39:0.35</p>
<p>OUTRUN logged on: Tuesday, September 20, 1994 at 19:40:20.49<br />&nbsp;&nbsp; Logged Off: Tuesday, September 20, 1994 at 19:42:22.53</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, September 20, 1994 AT 19:42:25.83<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, September 20, 1994 AT 19:42:37.9</p>
<p>OUTRUN logged on: Tuesday, September 20, 1994 at 19:43:54.64</p>
<p>SYSOP logged on: Tuesday, September 20, 1994 at 21:32:14.74<br />&nbsp;&nbsp; Logged Off: Tuesday, September 20, 1994 at 21:32:46.22</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, September 20, 1994 AT 21:32:47.75<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, September 20, 1994 AT 21:36:36.35</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, September 20, 1994 AT 21:36:46.84<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, September 20, 1994 AT 21:37:5.68</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, September 20, 1994 AT 21:42:56.22<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Wednesday, September 21, 1994 AT 18:32:13.65</p>
<p>SYSOP logged on: Wednesday, September 21, 1994 at 18:32:18.20<br />&nbsp;&nbsp; Logged Off: Wednesday, September 21, 1994 at 18:32:40.78</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Wednesday, September 21, 1994 AT 18:32:42.26<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, September 22, 1994 AT 14:0:43.90</p>
<p>SYSOP logged on: Thursday, September 22, 1994 at 14:0:52.3<br />&nbsp;&nbsp; Logged Off: Thursday, September 22, 1994 at 14:1:51.73</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Thursday, September 22, 1994 AT 14:1:52.88<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, September 22, 1994 AT 14:1:58.71</p>
<p>SYSOP logged on: Thursday, September 22, 1994 at 14:2:9.69<br />&nbsp;&nbsp; Logged Off: Thursday, September 22, 1994 at 14:2:17.77</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Thursday, September 22, 1994 AT 14:2:18.86<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, September 22, 1994 AT 14:4:50.24</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Thursday, September 22, 1994 AT 14:4:51.67<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, September 22, 1994 AT 14:7:30.13</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Thursday, September 22, 1994 AT 14:7:31.77<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, September 22, 1994 AT 14:8:16.32</p>
<p>SYSOP logged on: Thursday, September 22, 1994 at 14:8:19.94<br />&nbsp;&nbsp; Logged Off: Thursday, September 22, 1994 at 14:8:45.92</p>
<p>OUTRUN logged on: Thursday, September 22, 1994 at 14:9:2.95<br />&nbsp;&nbsp; Logged Off: Thursday, September 22, 1994 at 14:9:49.97</p>
<p>SYSOP logged on: Thursday, September 22, 1994 at 14:9:52.49<br />&nbsp;&nbsp; Logged Off: Thursday, September 22, 1994 at 14:10:18.25</p>
<p>OUTRUN logged on: Thursday, September 22, 1994 at 14:10:24.79<br />&nbsp;&nbsp; Logged Off: Thursday, September 22, 1994 at 14:11:7.19</p>
<p>SYSOP logged on: Thursday, September 22, 1994 at 14:11:12.46<br />&nbsp;&nbsp; Logged Off: Thursday, September 22, 1994 at 14:11:30.86</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Thursday, September 22, 1994 AT 14:11:31.96<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, September 22, 1994 AT 14:15:26.33</p>
<p>SYSOP logged on: Thursday, September 22, 1994 at 14:15:28.97<br />&nbsp;&nbsp; Logged Off: Thursday, September 22, 1994 at 14:16:24.39</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Thursday, September 22, 1994 AT 14:16:25.27<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, September 22, 1994 AT 16:15:23.16</p>
<p>SYSOP unsuccessfully attempted logon:Thursday, September 22, 1994 at 16:15:32.6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password: SYSOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Try 1: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Try 2: G<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Try 3: A</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Thursday, September 22, 1994 AT 16:15:42.6<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, September 22, 1994 AT 17:10:28.85</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Thursday, September 22, 1994 AT 17:10:29.51<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Thursday, September 22, 1994 AT 17:26:7.37</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Thursday, September 22, 1994 AT 17:26:37.19<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, March 14, 1995 AT 6:0:58.98</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, March 14, 1995 AT 6:1:2.61<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, March 14, 1995 AT 6:1:16.18</p>
<p>SYSOP logged on: Tuesday, March 14, 1995 at 6:1:36.6<br />&nbsp;&nbsp; Logged Off: Tuesday, March 14, 1995 at 6:3:4.43</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, March 14, 1995 AT 6:3:24.81<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, March 14, 1995 AT 6:3:52.88</p>
<p>SYSOP logged on: Tuesday, March 14, 1995 at 6:5:57.89<br />&nbsp;&nbsp; Logged Off: Tuesday, March 14, 1995 at 6:9:34.13</p>
<p>SPITFYRE logged on: Tuesday, March 14, 1995 at 6:10:31.42<br />&nbsp;&nbsp; Logged Off: Tuesday, March 14, 1995 at 6:11:20.85</p>
<p>SYSOP logged on: Tuesday, March 14, 1995 at 6:12:0.12<br />&nbsp;&nbsp; Logged Off: Tuesday, March 14, 1995 at 6:15:54.82</p>
<p>SPITFYRE logged on: Tuesday, March 14, 1995 at 8:4:25.85<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, March 14, 1995 AT 9:5:29.93</p>
<p>SYSOP logged on: Tuesday, March 14, 1995 at 9:6:15.74</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Tuesday, March 14, 1995 AT 9:9:37.10<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Tuesday, March 14, 1995 AT 9:15:15.16</p>
<p>SPITFYRE logged on: Tuesday, March 14, 1995 at 9:18:53.27<br />&nbsp;&nbsp; Logged Off: Tuesday, March 14, 1995 at 10:32:39.0<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, March 17, 1995 AT 20:16:34.60</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Friday, March 17, 1995 AT 20:16:37.7<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Friday, March 17, 1995 AT 20:16:40.48</p>
<p>SYSOP logged on: Friday, March 17, 1995 at 20:18:15.6<br />&nbsp;&nbsp; Logged Off: Friday, March 17, 1995 at 20:18:39.50</p>
<p>SYSOP logged on: Friday, March 17, 1995 at 20:19:34.87<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Saturday, March 25, 1995 AT 20:47:0.93</p>
<p>SYSOP logged on: Saturday, March 25, 1995 at 20:47:24.0<br />&nbsp;&nbsp; Logged Off: Saturday, March 25, 1995 at 20:48:19.58</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Saturday, March 25, 1995 AT 20:48:21.7<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Saturday, March 25, 1995 AT 22:6:0.56</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Saturday, March 25, 1995 AT 22:6:2.70<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Wednesday, February 14, 1996 AT 8:58:30.80</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Wednesday, February 14, 1996 AT 8:58:41.45<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Wednesday, February 14, 1996 AT 8:58:43.76</p>
<p>SYSOP logged on: Wednesday, February 14, 1996 at 8:59:34.1<br />&nbsp;&nbsp; Logged Off: Wednesday, February 14, 1996 at 9:5:13.18</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Wednesday, February 14, 1996 AT 9:5:19.28<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Wednesday, February 14, 1996 AT 13:13:51.16</p>
<p>MEME logged on: Wednesday, February 14, 1996 at 13:17:36.25<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Wednesday, February 14, 1996 AT 13:25:44.4</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Wednesday, February 14, 1996 AT 13:28:6.96</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Wednesday, February 14, 1996 AT 13:40:58.61<br />&#8212;&#8212;&#8212;-SYSTEM STARTUP: Sunday, June 29, 1997 AT 9:22:35.50</p>
<p>JAY logged on: Sunday, June 29, 1997 at 9:23:9.72<br />&nbsp;&nbsp; Logged Off: Sunday, June 29, 1997 at 9:23:50.25</p>
<p>&#8212;&#8212;&#8212;-SYSTEM SHUTDOWN : Sunday, June 29, 1997 AT 9:23:53.99</p>
<p><strong>The Mother Load of Foolishness – The Documentation File</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J-Host Documention.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Greetings.&nbsp; Congratulations on your most recent acquisition<br />of J-CALL V1.0, the ultimate in host communication.&nbsp; Ok, so,<br />granted, there may be one or two other BBS programs out there<br />that might have a slight edge on J-Host, but that&#8217;s O.K., because<br />if you wanted a real BBS, you wouldn&#8217;t download something this<br />small to begin with.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; READ THIS SECTION!!!<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; I know you probably saw that this product was created by<br />Allard-Works, and you are irrationaly anxious to try it, but hold<br />on a second&#8230;&nbsp; Please read this short Doc file.&nbsp; Chances are<br />you&#8217;re going to be able to figure most of it out on your own,<br />because J-HOST is designed to be extremely simple, but this may<br />tell you a thing or two you might not figure out.&nbsp; Besides, a lot<br />of effort has gone into this documentation to keep it from<br />sounding boring.&nbsp; Sarcasm and snide remarks area common<br />occurence, just so you don&#8217;t feel like you&#8217;re reading an<br />Encyclopedia.<br />&nbsp;&nbsp;&nbsp;&nbsp; However, if you think that this is just a bit too long for<br />your taste, even though it&#8217;s about 100 pages shorter than other<br />doc files, here&#8217;s a hint&#8230; Once you get started, log on as<br />SYSOP, and type SYSOP.&nbsp; SYSOP gives you a bunch of other things<br />to do.</p>
<p>Unnecessary Credit.<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ<br />&nbsp;&nbsp;&nbsp;&nbsp; I made this program from scratch.&nbsp; I didn&#8217;t use anybody<br />elses libraries, with the exception of the standard libraries<br />included in Turbo Pascal 7.0.&nbsp; (Dos, and Crt).&nbsp; There are more<br />than 100 functions and procedures written by myself to make this<br />possible, and i&#8217;m constantly adding.&nbsp; By the time you read this,<br />I&#8217;ve probably added ten more functions to make it all the more<br />exciting.&nbsp; Ok, enough gloating.</p>
<p>J-HOST&#8217;s purpose in life.<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ<br />&nbsp;&nbsp;&nbsp;&nbsp; The purpose of this is for your own personal use.&nbsp; It&#8217;s not<br />really a BBS program in the strongest sense of the word.&nbsp; It&#8217;s<br />just here so that you can let people call up your system, look<br />around your hard drive, and download stuff that they might need. <br />There aren&#8217;t message bases, email, or anything like that,<br />although there is an option to leave the sysop a brief message.<br />&nbsp;&nbsp;&nbsp;&nbsp; There&#8217;s only one file area.&nbsp; That file area is your hard<br />drive.&nbsp; Everything will become available, except hidden files and<br />direcories.</p>
<p>Telix, Telemate, and anything else.<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ<br />&nbsp;&nbsp;&nbsp;&nbsp; I think Telemate is the best COMM program out there, but<br />that&#8217;s not important now.&nbsp; However, this is.&nbsp; They both have<br />complex script languages, and from their languages they both<br />create host scripts that are run from within the program.<br />&nbsp;&nbsp;&nbsp;&nbsp; You can use those.<br />&nbsp;&nbsp;&nbsp;&nbsp; But I wouldn&#8217;t.<br />&nbsp;&nbsp;&nbsp;&nbsp; I&#8217;d use JHOST, because it does a lot more, looks a lot<br />cooler, and would make the one person who wrote it feel like he<br />didn&#8217;t waste weeks of programming.</p>
<p>Getting Started.<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ<br />&nbsp;&nbsp;&nbsp;&nbsp; You&#8217;re already off to a good start, because step 1 is<br />unzipping the file.&nbsp; And, since you&#8217;re reading this, I think it&#8217;s<br />safe to say that you&#8217;ve successfully unzipped it.<br />&nbsp;&nbsp;&nbsp;&nbsp; Step 2 is to read this file.&nbsp; You&#8217;re on a roll!!!<br />&nbsp;&nbsp;&nbsp;&nbsp; Step 3.&nbsp; This is the only step that might take more than a<br />minute, and it&#8217;s optional.&nbsp; Edit your autoexec.bat and add the<br />statement &#8220;SET JHOST=C:\JHOST\&#8221;&#8230; or whatever the appropriate<br />directory is, although &#8220;JHOST&#8221; is a fine name for it.<br />&nbsp;&nbsp;&nbsp;&nbsp; Step 4. Run JHOST1.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Pretty simple, eh?&nbsp; Then it&#8217;s just a matter of following the<br />onscreen directions.&nbsp; If SYSTEM.JAY isn&#8217;t found, some options are<br />given.&nbsp; Choose accordingly.&nbsp; Then, the userfile is created with<br />one user, and that user is SYSOP, with password SYSOP.<br />&nbsp;&nbsp;&nbsp;&nbsp; You should next do a local logon with the sysop account, and<br />check out the program.&nbsp; &lt;M&gt; will give you a user menu, so you can<br />see what JHOST does.&nbsp; One vital thing the menu doesn&#8217;t show is<br />the SYSOP command.&nbsp; Type SYSOP, and look around.&nbsp; Set the upload<br />and download parameters.&nbsp; JHOST doesn&#8217;t have any internal<br />protocols, so get your hands on DSZ, GSZ, or any of your other<br />favorite transfer protocols.&nbsp; I recommend GSZ myself.</p>
<p>What J-HOST does.<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ<br />&nbsp;&nbsp;&nbsp;&nbsp; Easy File System:&nbsp; Jhost doesn&#8217;t have hundreds of EXE files,<br />and hundreds of data files.&nbsp; It doesn&#8217;t take up 36 directories<br />and stick files all over the place on your hard drive.&nbsp; It take&#8217;s<br />up one directory, and it&#8217;s small.&nbsp; There is one EXE file, and<br />incase you didn&#8217;t guess, that&#8217;s what you run.&nbsp; All other system<br />files have the extension JAY, in beloved honor of it&#8217;s creator.</p>
<p>Baud Rate: I haven&#8217;t tested it on anything higher than 9600,<br />because I don&#8217;t have a higher speed modem available.&nbsp; So, if it<br />screws up somewhere, oops!&nbsp; Here&#8217;s the deal with the baudrate.&nbsp; I<br />hard cored an initialization string into the program.&nbsp; You can<br />change this initialization string by picking &#8216;E&#8217; when it asks if<br />you want to initialize modem.<br />&nbsp;&nbsp;&nbsp;&nbsp; But I wouldn&#8217;t.<br />&nbsp;&nbsp;&nbsp;&nbsp; If your modem accepts the string, I&#8217;d use it, and set the<br />baud rate to the&nbsp; highest baud your modem can do.&nbsp; Then you can<br />receive carrier at any baud, and still be connected to the modem<br />at high speed.&nbsp; Modem output will be &#8220;CARRIER 2400&#8243;&nbsp; &#8220;PROTOCOL<br />&lt;whatever&gt;&#8221;&nbsp; &#8220;COMPRESSION &lt;whatever&gt;&#8221;&nbsp; &#8220;CONNECT 9600&#8243;.&nbsp; Your<br />modem will handle flow control and such.&nbsp; (Jhost has built in<br />XON/XOFF, but why use it if your modem can handle it.<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; Easy Modification: All you really need to modify anything in<br />JHOST is an ascii editor.&nbsp; With that, you can change the menu&#8217;s,<br />and help files to your satisfaction.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Easy Setup: You already read getting started&#8230; wasn&#8217;t that<br />easy?&nbsp; There aren&#8217;t a gazillion different configuration programs,<br />and it doesn&#8217;t take hours of contemplation to figure out how to<br />set it up.&nbsp; Just unzip it, do a little finagling to your<br />Autoexec.Bat (very little), and run it.&nbsp; And it goes!&nbsp; Beautiful!</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Data Screen: F4 Toggles back and forth between full screen,<br />and the user data screen, which provides the sysop with an<br />excellent presentation of vital user information that you may or<br />may not care about.&nbsp; Seeing this, you may say&#8230; &#8220;But gee, I can<br />hardly see any of the output screen.&#8221;&nbsp; Fortunately, the<br />innovative minds at Allard-Works Ent. have included the F10<br />function wich will enable the VGA 50 line mode.&nbsp; Now you can see<br />the user information, plus full screen user output.&nbsp; Excellent. <br />Of course, this is assuming you have VGA.&nbsp; If you try to enable<br />VGA on a non VGA screen&#8230; the representatives of Allard-Works<br />Ent. hold no responsibilty as to the deranged video output. <br />Luckily, most people have VGA by now anyway.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Idol Time: Wouldn&#8217;t it suck if someone called JHOST, and<br />then decided to go out to eat or something?&nbsp; There modem would be<br />online, using up valuable time, doing nothing, when it would be<br />altogether more beneficial for them to be logged off, allowing<br />line availability for other people to call and waste valuable<br />time.&nbsp; That&#8217;s IDOL time.&nbsp; Idol time is how long goes between each<br />keypress, and when the time reaches a pre-determined length, the<br />user is logged off.&nbsp; For example, the default for user level 1 is<br />one minute.&nbsp; So, if that darned new user doesn&#8217;t touch anything<br />for more than a minute, bang, zap, see ya&#8230; he&#8217;s gone.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Five different Access Levels:&nbsp; 1) New user.&nbsp; New Users stay<br />at level one until the sysop boosts their access, either by<br />hitting F7 while their online, or by editting their account. <br />(Don&#8217;t bother trying to remember the Function keys&#8230; they&#8217;re all<br />listed on the Data screen.)&nbsp; New Users can look around the<br />system, but can&#8217;t do squat.&nbsp; 2&amp;3)&nbsp; There really isn&#8217;t much<br />difference between levels 2 and 3 in version 1.0.&nbsp; They can both<br />upload, and download.&nbsp; The only difference is how much idol time<br />they have, and that&#8217;s at they sysop&#8217;s disposal.&nbsp; (Defaults set<br />level 2 at two minutes, and level 3 at three minutes).&nbsp; 4)<br />COSYSOP Level four has access to the SYSOP command menu.&nbsp; They<br />can edit user records, and see everything in their file.&nbsp; The<br />only things they can&#8217;t do is change the users Handle, or raise<br />their access to level 5, although they can bring it to level 4. <br />Be careful about giving peple access to level 4.&nbsp; 5) SYSOP.&nbsp; This<br />is you, the sysop.&nbsp; You can give access 5 to other people, but<br />there shouldn&#8217;t be much call for it.&nbsp; Level 5 let&#8217;s you change<br />peoples handles, and give people sysop access.&nbsp; Don&#8217;t give this<br />kind of access to anyone you wouldn&#8217;t let date your sister,<br />especially if you have JHOST running on a regular basis.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Fifteen Transfer Protocol Compacity:&nbsp; Yes, that&#8217;s right.&nbsp; If<br />you have fifteen different protocols that you think people would<br />acutally use, then you can set them up.&nbsp; As I said earlier, I<br />recommend that you set up GSZ.&nbsp; Gsz has ZMODEM, YMODEM, XMODEM,<br />and YMODEM-G all built into it.&nbsp; Go to the protol editor (use the<br />SYSOP command to find it) and enter the parameters for each<br />protocol.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Zipview: Take a look at those zip files.&nbsp; I used a<br />programming method that was more an act of desperation than<br />anything, because I don&#8217;t know how to read zips directly. <br />Instead, a batch file is created, characters are written to the<br />keyboard buffer, JHOST drops to a dos shell, runs a batch file<br />which copys the zip contents into a separate file, exits the dos<br />shell, types the recently created file, deletes the batch, and<br />finally deletes the other file.&nbsp; It works, and that&#8217;s what<br />counts.</p>
<p>What it doesn&#8217;t do.<br />ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ<br />&nbsp;&nbsp;&nbsp;&nbsp; Color (yet.)<br />&nbsp;&nbsp;&nbsp;&nbsp; The Dishes.<br />&nbsp;&nbsp;&nbsp;&nbsp; Limit UL/DL ratio.<br />&nbsp;&nbsp;&nbsp;&nbsp; Limit time online.</p>
<p>Suggestions<br />ÄÄÄÄÄÄÄÄÄÄÄ<br />&nbsp;&nbsp;&nbsp;&nbsp; The user doesn&#8217;t have access to the floppy drives, and that<br />was intentional.&nbsp; (unless you run JHOST from the floppy.)&nbsp; If you<br />find the need to let someone browse a floppy drive or two, try<br />the DOS JOIN command.&nbsp; It will simulate a directory on your hard<br />drive that is actually the floppy drive.<br />&nbsp;&nbsp;&nbsp;&nbsp; JHOST doesn&#8217;t direct where uploads go.&nbsp; They just go to<br />whatever directory the suer is in.&nbsp; You can prevent this,<br />however.&nbsp; Edit the UPLOAD protocols so that the protocol<br />automatically sends any file it receives to wherever you wish.<br />&nbsp;&nbsp;&nbsp;&nbsp; Example.<br />&nbsp;&nbsp;&nbsp;&nbsp; Standard: GSZ port 2 rz<br />&nbsp;&nbsp;&nbsp;&nbsp; Directed: GSZ port 2 rz c:\download</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Remember, editing Upload and Download information is from<br />the remote point of views.&nbsp; If you edit Download, it is actually<br />the host&#8217;s computers upload, and if you edit upload, it is<br />actually the host&#8217;s computers download.&nbsp; Keep this in mind. <br />Don&#8217;t fool yourself.<br />&nbsp;&nbsp;&nbsp;&nbsp; Keep a copy of the original zip file.&nbsp; That way you have a<br />back-up<br />copy of the original menu&#8217;s and files, incase something happens,<br />or you <br />screw something up.</p>
<p>Comments<br />ÄÄÄÄÄÄÄÄ<br />&nbsp;&nbsp;&nbsp;&nbsp; I hope that you have grasped the concept of JHOST. It is a<br />host program, not a bbs.&nbsp; JBBS is a bbs program, and that will be<br />my next major telecommunciations project.&nbsp; This, however, is for<br />the average Joe that occasionaly finds the need to let people<br />call his system and download/upload, or just look around.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Any comments and suggestions for J-Call 2.0 will be greatly<br />appreciated.&nbsp; And please&#8230; don&#8217;t say &#8220;Add color&#8221;, because I<br />already have.&nbsp; It will be in 2.0, full ansi color support. <br />Anything else, however, would be most cool.&nbsp; Remember&#8230; think<br />HOST not BBS.&nbsp; When I do JBBS, you can think BBS, not HOST.</p>
<p>Direct any comments/suggestions to&#8230;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Allard-Works Ent.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c/o Jay Allard.<br />&nbsp;&nbsp;&nbsp;&nbsp; 36 Ames St, Suite 613<br />&nbsp;&nbsp;&nbsp;&nbsp; Somerville, MA 02145.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (617)666-3889.</p>
<p>or,<br />leave email to ULTRARIAN on any of the fine BBS&#8217;s that you may<br />see his presence upon.</p>
<p>Thank you.</p>
<p>Credits&#8230;.<br />&nbsp;&nbsp; Thanks to all those nice people at Borland for creating Turbo<br />Pascal.<br />&nbsp;&nbsp; Special thanks to Blaise Pascal, for without whom, I&#8217;d be<br />programming in Turbo Smith, or something.</p>
<p>&nbsp;</p>
<p>BUGS<br />ÄÄÄÄ</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Problem: In vga mode, screen gets screwed up when returning<br />from DOS SHELL.<br />&nbsp;&nbsp;&nbsp;&nbsp; Why: Not allowing enough memory to hold video page.<br />&nbsp;&nbsp;&nbsp;&nbsp; Solution: Hit F10 twice to clear it up.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hamletcode.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hamletcode.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hamletcode.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hamletcode.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hamletcode.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hamletcode.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hamletcode.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hamletcode.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hamletcode.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hamletcode.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hamletcode.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hamletcode.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hamletcode.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hamletcode.wordpress.com/260/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=260&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hamletcode.wordpress.com/2011/04/19/old-code-and-documentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/683d0f9adfd457dda7c0b3dfa4debe11?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hamletcode</media:title>
		</media:content>
	</item>
		<item>
		<title>Normalizing Service Proxies</title>
		<link>http://hamletcode.wordpress.com/2011/04/07/normalizing-service-proxies/</link>
		<comments>http://hamletcode.wordpress.com/2011/04/07/normalizing-service-proxies/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 12:50:00 +0000</pubDate>
		<dc:creator>hamletcode</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://hamletcode.wordpress.com/2011/04/07/normalizing-service-proxies/</guid>
		<description><![CDATA[If you have multiple services that share data contracts, and you generated proxies (Add Service Reference) for those services, you end up with multiple copies of the same object on the client. For example: BluRayFriend has a Review service and a Product service. The product service, obviously, deals with Products. The Review services, less obviously, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=257&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you have multiple services that share data contracts, and you generated proxies (Add Service Reference) for those services, you end up with multiple copies of the same object on the client.</p>
<p>For example: BluRayFriend has a Review service and a Product service. The product service, obviously, deals with Products. The Review services, less obviously, does return a product when you look up a Review. The review is for a given product.</p>
<p>That’s two service references, so on the client, two Product objects are created:</p>
<ol>
<li>Client.ReviewService.Product</li>
<li>Client.ProductService.Product</li>
</ol>
<p>They have nothing in common. I’ve tried various approaches to have it figure out it’s the same object and reuse it, but no luck. The simple fact is that when you create the service references, it asks you for a namespace, and it must be a new namespace.</p>
<p>BluRayFriend also has a STAR RATING control. When I was using the contracts directly (as opposed to the generated proxies), the star control accepted a PRODUCT as a parameter. Once I switched to the contracts, that no longer worked. Sometimes the Product comes from the Review service, and other times it’s from the Product service. One has nothing to do with the other.</p>
<p>So how can you take two different product objects and treat them as if they’re the same type of object without altering the generated code? (If you alter the generated code, then regenerate, your alterations are lost).</p>
<p>This can be done quite easily via partial classes. </p>
<ol>
<li>Create an IProduct interface</li>
<li>Use partial classes to extend the generated proxies, and have them implement IProduct.</li>
<li>Change the Star Rating control to accept an IProduct.</li>
</ol>
<p>I accomplish steps 1 and 2 in a single file. As long as the extensions are just a few lines each, it’s nice to be able to go to one place and see them all. That’s an exception to a rule I’m usually very passionate about: one thing per file, even if the thing is a 4 line Enum. But, in this case, I like seeing them all at once.</p>
<p><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><br />
<h4><font color="#333333">ContractNormalization.cs</font></h4>
<p>namespace</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"><font color="#000000"> BluRayFriend.ServicesClient.ProductService<br /></font>{<br />&nbsp;&nbsp; </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">public</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">partial</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">class</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"> </font></font><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas">Product</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"> : </font></font><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas">IProduct<br />&nbsp;&nbsp; </font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas">{<br />&nbsp;&nbsp; }<br />}</p>
<p></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">
<p>namespace</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"><font color="#000000"> BluRayFriend.ServicesClient.ReviewService<br /></font>{<br />&nbsp;&nbsp; </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">public</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">partial</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">class</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"> </font></font><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas">Product</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"> : </font></font><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas">IProduct<br />&nbsp;&nbsp; </font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas">{<br />&nbsp;&nbsp; }<br />}</font></font></p>
<p>It gets more complicated when dealing with collections. I don’t have an example handy, but roughly: If there’s a method called GetProducts() that returns an array of Products, then you have to extend the client proxy. You add a new method called GetIProducts(). It calls GetProducts(), then converts the result to an array of IProduct.</p>
<p>It works, but I find it obnoxious. It would be nice if the we had the option to generate proxies that recognized common data types across services. The more methods you add, and the more complex types you have (IE: multiple review objects containing product objects), the more complicated it becomes. The result is a nicer client API, though, which is good.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hamletcode.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hamletcode.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hamletcode.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hamletcode.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hamletcode.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hamletcode.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hamletcode.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hamletcode.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hamletcode.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hamletcode.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hamletcode.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hamletcode.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hamletcode.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hamletcode.wordpress.com/257/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=257&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hamletcode.wordpress.com/2011/04/07/normalizing-service-proxies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/683d0f9adfd457dda7c0b3dfa4debe11?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hamletcode</media:title>
		</media:content>
	</item>
		<item>
		<title>Problem Calling Named Pipe Wcf Service from IIS</title>
		<link>http://hamletcode.wordpress.com/2011/04/07/problem-calling-named-pipe-wcf-service-from-iis/</link>
		<comments>http://hamletcode.wordpress.com/2011/04/07/problem-calling-named-pipe-wcf-service-from-iis/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 05:27:38 +0000</pubDate>
		<dc:creator>hamletcode</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://hamletcode.wordpress.com/2011/04/07/problem-calling-named-pipe-wcf-service-from-iis/</guid>
		<description><![CDATA[I pretty much have to write one more page, and an RSS feed, for BluRayFriend to be ready to be tossed out into the world. I hate writing pages, so I’ve been procrastinating forever. The latest procrastination has been to properly implement the wcf services. All of the services and contracts are written. But, I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=256&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I pretty much have to write one more page, and an RSS feed, for BluRayFriend to be ready to be tossed out into the world. I hate writing pages, so I’ve been procrastinating forever.</p>
<p>The latest procrastination has been to properly implement the wcf services. All of the services and contracts are written. But, I was using the service as local references via a stupid static factory. I created a windows service to host the Wcf services as named pipe services, and created proxies to the services. Now, everything uses the proxies. The windows service can be run as a console app for convenience. That’s how I’m running it for now.</p>
<p>This worked just fine in development mode. But, as soon as I switched to IIS, I fully expected it to fail with an ACCESS DENIED error, assuming that the identity of the web site app pool wouldn’t have access to it. Instead, I got an unexpected error:</p>
<p>“The pipe endpoint ‘net.pipe://localhost/blurayfriend/product’ could not be found on your local machine.”</p>
<p>Could not be found?! Why not? It’s there. I corrected the identity incase that was it, but it wasn’t.</p>
<p>I banged my head against the desk a few times, then tried running the services as an administrator. That worked, but it was only a troubleshooting step. I can’t run like that permanently.</p>
<p>Finally, I found this post: <a href="http://weblogs.thinktecture.com/cweyer/2007/12/dealing-with-os-privilege-issues-in-wcf-named-pipes-scenarios.html">http://weblogs.thinktecture.com/cweyer/2007/12/dealing-with-os-privilege-issues-in-wcf-named-pipes-scenarios.html</a></p>
<p>This is all new information for me. It has a link that I will read to try to educate myself on it. In short, IIS is running as Session 0, and the console host is Session 1. Session 0 can’t see pipes created in Session 1. Interesting. According to the article, if I ran it as a windows service rather than a console app, then I won’t have the problem.</p>
<p>I’m going to roll back the identity so that I get the access denied error, then correct it as subtly as possible… anything to avoid writing that page!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hamletcode.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hamletcode.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hamletcode.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hamletcode.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hamletcode.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hamletcode.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hamletcode.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hamletcode.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hamletcode.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hamletcode.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hamletcode.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hamletcode.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hamletcode.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hamletcode.wordpress.com/256/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=256&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hamletcode.wordpress.com/2011/04/07/problem-calling-named-pipe-wcf-service-from-iis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/683d0f9adfd457dda7c0b3dfa4debe11?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hamletcode</media:title>
		</media:content>
	</item>
		<item>
		<title>Jack&#8217;s Experience Using UltiPro Web Services</title>
		<link>http://hamletcode.wordpress.com/2011/03/19/jacks-experience-using-ultipro-web-services/</link>
		<comments>http://hamletcode.wordpress.com/2011/03/19/jacks-experience-using-ultipro-web-services/#comments</comments>
		<pubDate>Sat, 19 Mar 2011 05:34:02 +0000</pubDate>
		<dc:creator>hamletcode</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hamletcode.wordpress.com/?p=250</guid>
		<description><![CDATA[This post originally appeared on a web services demo site. Jack is my 2 year old son. My UltiPro Web Services Development Experience By Jack Allard, Four Leaf Foods Inc. “Four Leaf Foods.com” didn’t happen overnight. It has been a life-long dream of mine to bring this portal to fruition, and only recently has technology caught [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=250&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This post originally appeared on a web services demo site.</p>
<p>Jack is my 2 year old son.</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<div>
<div>
<p><span style="font-size:x-large;">My UltiPro Web Services Development Experience</span></p>
<p><a href="http://hamletcode.files.wordpress.com/2011/03/jack.png"><img class="alignnone size-medium wp-image-252" title="Jack" src="http://hamletcode.files.wordpress.com/2011/03/jack.png?w=241&#038;h=300" alt="" width="241" height="300" /></a></p>
<p>By Jack Allard, Four Leaf Foods Inc.</p>
<p>“Four Leaf Foods.com” didn’t happen overnight. It has been a life-long dream of mine to bring this portal to fruition, and only recently has technology caught up to my imagination.</p>
<p>It all started an eternity ago. It feels like it’s been three weeks, but logic tells me it’s probably only been a couple days. I was taking a much-deserved break from lining up my matchbox cards on the living room table and pointing at things, when I stumbled across a fascinating red device with white knobs buried beneath a pile of rubber dinosaurs and an assortment of stuffed animals. What was this strange relic, and how had it escaped my notice for all of this time? I started to dig it out, feeling as though it were beckoning me, calling out to me.</p>
<p>At last I had it. I instinctively shook it and enjoyed the noise, as if a pile of granular objects had been upset, then settled, cleaning the slate for a new drawing. I spent several minutes gazing at its magnificence from every angle, learning to appreciate its power and elegance. This device is a work of art, and it needed to be appreciated. After a respectable amount of time, I tentatively started to work the shiny white knobs with my fingers and opposable thumbs. My eyes danced with glee as each movement, no matter how subtle, produced results on the slate. Surely the world had never seen a device such as this before. This is clearly the technology to change everything.</p>
<p>Then I drooled on my shirt and took a nap.</p>
<p>Upon waking up in what has been described as a wholly unnatural position, I cast a glance towards my matchbox cars. While still fascinating and deceptively stackable, I’m sad to say that their allure had been tarnished. My eyes had been open, and all I could think about was the Etch-A-Sketch… the shiny red Etch-A-Sketch, and it’s potential impact on my entrepreneurial efforts with Four Leaf Foods. The high-res tablet device seemed to be the perfect medium on which to deliver up to the moment content to everyone interested in the happenings of Four Leaf Foods and its affiliates. It would simply be a matter of drawing the content on a pre-determined number of Etch-A-Sketches and distributing to our customers in secure-unshakeable boxes. It was so simple and so obvious, I couldn’t believe it had already been done. I immediately began to whiteboard the idea using crayons on the wall next to a white board.</p>
<p>It was as if I was living for the first time. My brain was 93% focused on this exciting new endeavor; 3% was allocated to essential life functions, and the remaining 4% was dedicated to finding dangerous places to put my fingers. (It turns out that ELETRICAL OUTLETS, while aesthetically pleasing, should be avoided.) I scribbled. I diagramed. I pouted. I overcame obstacles. I adapted. I worked the problems and created new problems.</p>
<p>Seconds turned to minutes. Minutes turned into several minutes. Several minutes turned into almost 10 minutes. The wall was a disaster. The whiteboard was still clean. My hair was in shambles.  I was missing ½ a crayon and my nose hurt; I still think those last two are related but have been unable to prove it. Despite my best efforts, I had come to a hurtful but unavoidable conclusion: the Etch-A-Sketch Tablet Computer is not such a great means of sharing content with my customers.</p>
<p>The impact of this realization was devastating. All that I had worked for was lost. It had all been a waste; for naught. How could I have gone from such exuberance to such despair so quickly? How could I have been so silly? What was it all for? Was the problem that I was overzealous and ahead of my time, or that visions of grandeur were sadly mislead? These are questions that I could only ask, for I was too depressed to try to reason answers.</p>
<p><a href="http://hamletcode.files.wordpress.com/2011/03/ellie.png"><img class="alignnone size-medium wp-image-251" title="Ellie" src="http://hamletcode.files.wordpress.com/2011/03/ellie.png?w=293&#038;h=300" alt="" width="293" height="300" /></a></p>
<p>My little sister Ellie happened upon me during my darkest time. She crawled into the room and sat across from me looking at me inquisitively, sensing that something was wrong but unable to express her concern. But she tried. She commenced incoherent babbling and arm flailing. I studied her trying to discern the meaning of it all. What was she trying to express? Was the sneeze part of the message or just a coincidence? I wanted to understand, and I wanted a tissue.</p>
<p>Then we shared a moment that I will never forget. Ellie used a futon to pull herself into the standing position, then let go of the futon. She stood there, shakily, uncertain, for a solid 5 seconds before falling backward onto her bum. She didn’t cry. She didn’t complain. She reached for the futon again, and pulled herself into the standing position and let go. She stood as long as she could, maintaining eye contact, then fell on her bum again. She repeated it a third time to drive the point home, and suddenly her meaning became clear: The reason we fall down is so that we can pull ourselves back up. (© Batman Begins, 2005).</p>
<p>Ellie was right, and I was ashamed for needing the reminder. But that’s what family is for, I guess. To get us over the bumps. I was invigorated once again! Ellie saw the dawning of understanding on my face and nodded approval. Her job was done. She got on her knees and crawled out of the room leaving me to my new found enthusiasm. Thank you Ellie.</p>
<p>My thoughts were running rampant. So the Etch-A-Sketch Tablet Computer didn’t work out so well as a global communications medium. Perhaps the internet held more potential? Would this be a good use of a website? Had anyone tried using a website for this type of thing before? I found a new wall to scribble upon, and scribble I did. I scribbled the night away. I scribbled through story time. I scribbled through that time of day when I’m given food to throw onto the floor. I was an unstoppable scribbling machine, each scribble contributing to the greater good, the final result of which became clearer with each scribble. I didn’t know what it was all leading to, but I knew it was going to be good. I didn’t have the same concerns that I had while working the Etch-A-Sketch Tablet Computer problem; I knew this was going to work out just fine. Better than fine, in fact. It was going to be perfect. Revolutionary. Legendary. Some might even say Epic.</p>
<p>As the scribbling progressed, the damaging effects of black crayon became exceedingly obvious, as did the final solution to that which had plagued my thoughts. When at last all of the metaphorical fog had been lifted, I stopped scribbling and looked at that which I had created. Correction: Not that of which I had created, for it was always there, I just had to chip away the pieces (© Rambo 3, 1989).</p>
<p>I stepped back to examine and appreciate the result. I wish Ellie were there to share the moment for it was she who got me to this point. Even though she was absent, I knew that she was elsewhere in the house, probably gnawing on a piece of furniture, knowing that I had succeeded.</p>
<p>SharePoint.</p>
<p>It was so obvious! In retrospect, the whole Etch-A-Sketch Tablet Computer thing was a silly idea. Heck, it doesn’t even have Wi-Fi. SharePoint is so much better for tens of reasons. For example, I can put a weather widget on the page. That’s right, weather right there on the page. Now, I don’t’ have to watch the local news to get the weather, I can just look at our portal, and there it is. When it’s sunny out, it shows a sun. When it’s raining out, I bet it shows clouds or something. That’s so much better than looking out the window. The winds of change are upon us, and they shall be embraced!</p>
<p>But what about non-weather related functionality? While I agree it’s going to be hard to beat the weather widget, I’d be remiss if I didn’t try.</p>
<p>Four Leaf Foods uses UltiPro as its HRMS solution. UltiPro is loaded with all kinds of good information about me and my team (although, sadly, it lacks a weather widget). I would really like to display some UltiPro information in my shiny new SharePoint portal. Can such a crazy dream be realized, or will my imagination once again be limited by the confines of technology?</p>
<p>I quickly consulted my UltiPro counterpart at Ultimate Software. While four weeks my senior, I found the representative to be easy to talk to despite our age difference, and knowledgeable in all things UltiPro. We had a good laugh about the Etch-A-Sketch idea, and then exchanged some colorful anecdotes regarding our favorite flavors of Play-Dough.  It was a pleasant and informative experience, and I’d like to think that we both left the conversation as better toddlers.</p>
<p>It turns out that UltiPro now exposes a variety of SOAP 1.2 web services. That’s right, 1.2. Not 1.1. Take a moment to let that sink in. They’re not pulling any punches. They’re using the latest and greatest standards as defined as recently as April 2007. No dinosaurs here.</p>
<p>The services allow my portal to query data and display it in pretty grids throughout the site. (And “Pretty” isn’t an objective term. They are factually, indisputably pretty. Don’t argue with me on this one.) I can also edit and save the data via the services. This allows me and my team to get common things done in UltiPro without logging into UltiPro. Weird, right? Plus, we can keep our eyes on the weather.</p>
<p>The following services are now available:</p>
<ol>
<li>Login Service – to get an UltiPro secure token</li>
<li>Contacts</li>
<li>Employee Address – The weather widget is based on my address</li>
<li>Jobs – I use this to find all the people that report to me</li>
<li>Person</li>
<li>Compensation</li>
<li>iPhone – to retrieve a photo of myself!</li>
</ol>
<div>And more are on the way!</div>
<div>Accessing a service is a two-step process, and it takes just a little bit of work. That’s the price of security. We wouldn’t want just anyone downloading our personnel photos.</div>
<p><strong> </strong></p>
<p><strong>Steps to calling a service</strong></p>
<p>Call the authentication service to get a secure UltiPro token. You pass in the following information:</p>
<p>a. User name – for  you</p>
<p>b. Password – for you</p>
<p>c. User Access key – for you. This is, basically, a system assigned password. You can get it from the &#8220;Web Services&#8221; page in UltiPro.</p>
<p>d. Client Access Key – for your company. You can get this on the &#8220;Web Services&#8221; page in UltiPro.</p>
<p>2. Call the service. Each time you make a service call, you pass in the following as SOAP headers:</p>
<p>a. The token you obtained in step 1</p>
<p>b. Your company’s client access key.</p>
<p>That’s it! Once you have the token, you can reuse it for all subsequent service calls. Our SharePoint portal makes use of several of the services on the main page, keeping me up to date with all things of interest. Because it’s SharePoint, I can add and remove things on a whim. As new UltiPro services come online, I can write new web parts to consume them. All is right in the world.</p>
<p><strong> </strong></p>
<p><strong>Conclusion</strong></p>
<p><strong> </strong>It’s been a wonderful journey that I will never forget. I woke up a few days ago with plans to do nothing more than dump cereal over my head. I had no idea how quickly things could change. Not only do I have cereal on my head, but now I also have a spiffy new SharePoint portal that tells me the current weather and shows me a picture of myself. I learned about consuming web services and, more importantly, I learned a little something about myself. When the going gets tough, I don’t just throw in the blankie. I try again. I once again must thank Ellie for that reminder.</p>
<p>Now it’s time to move on to my next journey. I don’t know what it will entail, but I suspect it will involve more web services. Yay for UltiPro Web Services!</p>
<p>Happy Coding.</p>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hamletcode.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hamletcode.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hamletcode.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hamletcode.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hamletcode.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hamletcode.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hamletcode.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hamletcode.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hamletcode.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hamletcode.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hamletcode.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hamletcode.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hamletcode.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hamletcode.wordpress.com/250/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=250&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hamletcode.wordpress.com/2011/03/19/jacks-experience-using-ultipro-web-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/683d0f9adfd457dda7c0b3dfa4debe11?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hamletcode</media:title>
		</media:content>

		<media:content url="http://hamletcode.files.wordpress.com/2011/03/jack.png?w=241" medium="image">
			<media:title type="html">Jack</media:title>
		</media:content>

		<media:content url="http://hamletcode.files.wordpress.com/2011/03/ellie.png?w=293" medium="image">
			<media:title type="html">Ellie</media:title>
		</media:content>
	</item>
		<item>
		<title>Multi-Index Cache, Revisited</title>
		<link>http://hamletcode.wordpress.com/2011/03/11/multi-index-cache-revisited/</link>
		<comments>http://hamletcode.wordpress.com/2011/03/11/multi-index-cache-revisited/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 00:44:30 +0000</pubDate>
		<dc:creator>hamletcode</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://hamletcode.wordpress.com/2011/03/11/multi-index-cache-revisited/</guid>
		<description><![CDATA[When I set out to do the multi-index cache, it occurred to me that instead of using the secondary indexes as mappings to the primary index, I could just store another reference to the same object. I don’t know why I didn’t choose to do it that way, but now that I’ve been thinking about [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=249&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When I set out to do the multi-index cache, it occurred to me that instead of using the secondary indexes as mappings to the primary index, I could just store another reference to the same object.</p>
<p>I don’t know why I didn’t choose to do it that way, but now that I’ve been thinking about it for a while, I don’t see why not. It would eliminate a second lookup, and I can’t think of any adverse affects.</p>
<p>So, if there are 3 indexes, then instead of storing one object reference and 3 keys, we store three object references and three keys.</p>
<p>The next time I’m in there, I’ll change it and see if I’m forgetting anything. The API doesn’t change at all, just the innards.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hamletcode.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hamletcode.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hamletcode.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hamletcode.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hamletcode.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hamletcode.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hamletcode.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hamletcode.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hamletcode.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hamletcode.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hamletcode.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hamletcode.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hamletcode.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hamletcode.wordpress.com/249/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hamletcode.wordpress.com&amp;blog=3697525&amp;post=249&amp;subd=hamletcode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hamletcode.wordpress.com/2011/03/11/multi-index-cache-revisited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/683d0f9adfd457dda7c0b3dfa4debe11?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hamletcode</media:title>
		</media:content>
	</item>
	</channel>
</rss>
