<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEYASXk_eSp7ImA9WhRQGUo.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724</id><updated>2011-12-15T14:09:08.741-05:00</updated><category term="mobile" /><category term="Visual Studio" /><category term="continuous integration" /><category term="jQuery" /><category term="Team Build" /><category term="Droid" /><category term="security" /><category term="TFS" /><category term="RIA Services" /><category term="Oracle" /><category term="ASP.NET MVC" /><category term="ASP.NET" /><category term="software development" /><category term="C#" /><category term="htpc" /><category term="PowerShell" /><category term="SQL Server Reporting Services" /><category term="WCF" /><category term="HTML" /><category term="frustration" /><category term="Ruby on Rails" /><category term="management" /><category term="OS" /><category term="Silverlight" /><category term="database" /><category term="humor" /><title>Bryant Brabson</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://bryantbrabson.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/BryantBrabson" /><feedburner:info uri="bryantbrabson" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Ck4CSH4yfCp7ImA9WhRQF08.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-3571620133562997971</id><published>2011-12-09T10:20:00.002-05:00</published><updated>2011-12-12T15:16:09.094-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-12T15:16:09.094-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="WCF" /><title>WCF Web API security in a domain</title><content type="html">I've been building REST services using &lt;a href="http://wcf.codeplex.com/wikipage?title=WCF%20HTTP" target="_blank"&gt;WCF Web API&lt;/a&gt; for use in an intranet. Upon deployment from my desktop to a server I started experiencing the error below even though the hosting application, &lt;a href="http://www.asp.net/mvc/mvc3" target="_blank"&gt;ASP.NET MVC 3&lt;/a&gt;, was successfully using Windows authentication.&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
System.NotSupportedException: Security settings for this service require 'Anonymous' Authentication but it is not enabled for the IIS application that hosts this service.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
A &lt;a href="http://lmgtfy.com/?q=System.NotSupportedException%3A+Security+settings+for+this+service+require+%27Anonymous%27+Authentication+but+it+is+not+enabled+for+the+IIS+application+that+hosts+this+service." target="_blank"&gt;Google search&lt;/a&gt; shows that this isn't a novel situation, but I couldn't get the configuration and incantation right for Web API. Luckily, after a couple of hours of researching and fiddling with the web.config, I &lt;a href="http://wcf.codeplex.com/discussions/281107" target="_blank"&gt;came across this post that revealed the solution to me&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
When registering the service route:&lt;br /&gt;
&lt;pre class="brush:csharp"&gt;var config = new HttpConfiguration();
   config.Security = (u, s) =&gt; {
      s.Transport.ClientCredentialType = System.ServiceModel.HttpClientCredentialType.Windows;
      s.Mode = HttpBindingSecurityMode.TransportCredentialOnly;
   };

   routes.MapServiceRoute&amp;lt;YourType&amp;gt;("YourRoutePrefix", config);
&lt;/pre&gt;&lt;br /&gt;
I hope that this post saves someone some time.&lt;br /&gt;
&lt;script src='http://bryantbrabson.net/sh/scripts/shBrushCSharp.js' type='text/javascript'&gt;&lt;/script&gt;&lt;br /&gt;
&lt;script language='javascript' type='text/javascript'&gt;
&lt;!--
   SyntaxHighlighter.config.bloggerMode = true;
   SyntaxHighlighter.all();
--&gt;
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-3571620133562997971?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VKlPbuKlfH8nn9TwsPjbNhUlE-A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VKlPbuKlfH8nn9TwsPjbNhUlE-A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VKlPbuKlfH8nn9TwsPjbNhUlE-A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VKlPbuKlfH8nn9TwsPjbNhUlE-A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/6MPGEAqnlvQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/3571620133562997971/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2011/12/wcf-web-api-security-in-domain.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3571620133562997971?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3571620133562997971?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/6MPGEAqnlvQ/wcf-web-api-security-in-domain.html" title="WCF Web API security in a domain" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2011/12/wcf-web-api-security-in-domain.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUNR3gzfip7ImA9WhRQEk0.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-2636111452797526120</id><published>2011-12-06T14:38:00.000-05:00</published><updated>2011-12-06T14:38:16.686-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-06T14:38:16.686-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="TFS" /><category scheme="http://www.blogger.com/atom/ns#" term="Team Build" /><category scheme="http://www.blogger.com/atom/ns#" term="continuous integration" /><title>MvcBuildViews in a CI environment</title><content type="html">This post isn't going to break any new ground in the world of computer science, but I still wanted to say a few words about the importance of using &lt;a href="http://blogs.msdn.com/b/jimlamb/archive/2010/04/20/turn-on-compile-time-view-checking-for-asp-net-mvc-projects-in-tfs-build-2010.aspx" target="_blank"&gt;MvcBuildViews&lt;/a&gt; in your &lt;a href="http://martinfowler.com/articles/continuousIntegration.html" target="_blank"&gt;continuous integration&lt;/a&gt; environment.&lt;br /&gt;
&lt;br /&gt;
My team had just finished a quick and slightly dirty &lt;a href="http://www.asp.net/mvc/mvc3" target="_blank"&gt;ASP.NET MVC 3&lt;/a&gt; project. The three of us rapidly created a very usable internal departmental financial application with two of the members of the team being ASP.NET MVC neophytes. A lot of learning occurred during development, both about the basics of HTTP and client scripting as well as Visual Studio's ASP.NET MVC 3 tooling. &lt;br /&gt;
&lt;br /&gt;
I was finishing off numerous TODO's toward the end of the project when I entered "/p:MvcBuildViews=true" in the MSBuild arguments section of the &lt;a href="http://msdn.microsoft.com/en-us/library/dd647547.aspx" target="_blank"&gt;Team Build process tab&lt;/a&gt;. The build crashed immediately due to nonexistent namespace issues. It seems that a family of CRUD Views had been created at some point that used a Model that no longer existed. Apparently the plan had been to go back and clean up dead code, but there was never any follow-up due to other priorities. The dead Views certainly weren't hurting anything. Also, a user could only access them if they somehow typed in the correct URL, a near impossible eventuality. However, I abhor dead code and extra files in a project. It not only distorts the size and complexity of a project but also increases the size of the deployment.&lt;br /&gt;
&lt;br /&gt;
Using MvcBuildViews helped me remove four Views from our final deployment package. That's a trivial amount for large, enterprise projects. However, for a small department application likes ours, that's 20% of the Views. So not only are there now dramatically fewer Views to manage, the steepness of the learning curve for new developers is reduced.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-2636111452797526120?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lhHNkQP934a0UIRS-zEgIK3-eSQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lhHNkQP934a0UIRS-zEgIK3-eSQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lhHNkQP934a0UIRS-zEgIK3-eSQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lhHNkQP934a0UIRS-zEgIK3-eSQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/N4bt-SwK6aY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/2636111452797526120/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2011/12/mvcbuildviews-in-ci-environment.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/2636111452797526120?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/2636111452797526120?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/N4bt-SwK6aY/mvcbuildviews-in-ci-environment.html" title="MvcBuildViews in a CI environment" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2011/12/mvcbuildviews-in-ci-environment.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUBSH0yfSp7ImA9WhRRF0g.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-8848932230263742728</id><published>2011-12-01T11:15:00.002-05:00</published><updated>2011-12-01T11:50:59.395-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-01T11:50:59.395-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="humor" /><title>Anyone looking for work in Kathmandu?</title><content type="html">I certainly have never been contacted about such an exotic job opportunity!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="overflow:auto"&gt;On November 16, 2011 at 1:00 AM Fine Tuners &lt;sachit.finetuners@gmail.com&gt; wrote:

Dear Sir/Madam,
 
We have explored your company as one of the best ever growing software development company.  This is what we are interested in. 
FineTuners is a Kathmandu based software development and web development company. Our Outsourcing firm is  located at the heart of Nepal, Kathmandu. Nepal is well known for its culture, natural resources and on the top for Mount Everest, the highest pick of the world.
At present we are mainly focusing on the following areas as per the need of ever growing market:
·        Web services( Slicing/ Development/ full shop)
·        Web applications from simple web portals to the dynamic ecommerce sites)
We are a highly experienced team of intellectuals who are versatile in different development tools. Actually we are providing with different kinds of services, based on your requirement which you can choose. Else you can let us know the brief requirements of your projects such as technology, and services you require.
If this is the interest of yours, we are always standby to assist. You can explore us more via: www.fintuners.com . We are here to provide you with unlimited opportunities.
 
We offer you a trail project. If you like the work, then you pay us else you don’t have to pay for what is done. This is the best deal we can offer you to build up the trust.
     
     
    -- 
     
    -- 
    Best Regards,
    Sachit Pokhrel
    FineTuners
    www.fintuners.com
    skype: sunilpokharel1
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-8848932230263742728?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ojpRv0X3fUAyt7EVqWbN0ZhK2z8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ojpRv0X3fUAyt7EVqWbN0ZhK2z8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ojpRv0X3fUAyt7EVqWbN0ZhK2z8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ojpRv0X3fUAyt7EVqWbN0ZhK2z8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/q81kwNN22M4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/8848932230263742728/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2011/12/anyone-looking-for-work-in-kathmandu.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/8848932230263742728?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/8848932230263742728?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/q81kwNN22M4/anyone-looking-for-work-in-kathmandu.html" title="Anyone looking for work in Kathmandu?" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2011/12/anyone-looking-for-work-in-kathmandu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YBRng6eyp7ImA9WhdXEEk.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-1102959108882676717</id><published>2011-08-22T16:32:00.000-04:00</published><updated>2011-08-22T16:32:37.613-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-22T16:32:37.613-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server Reporting Services" /><title>SSRS 2208 Multi-value Default Parameters Not Being Used</title><content type="html">I spent about an hour trying to track down what was causing my default multi-values from appearing in &lt;a href="http://msdn.microsoft.com/en-us/library/ms173767.aspx" target="_blank"&gt;Business Intelligence Development Studio&lt;/a&gt; (BIDS) AKA Visual Studio 2008 (VS2008).&lt;br /&gt;
&lt;br /&gt;
My dataset is simply a one-dimensional list of names of human beings, such as &lt;a href="http://www.theejohndoe.com/" target="_blank"&gt;John Doe&lt;/a&gt;. The default values &lt;span style="text-decoration: line-through;"&gt;are&lt;/span&gt; were a subset of those names but they were not being selected either in Preview in BIDS or on the server. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/thread/18d0638b-65f3-4bfc-9f43-0c57eab2fdc2" target="_blank"&gt;This post&lt;/a&gt; gave me the idea to check my list of default values against the dataset. I knew that I didn't have NULL values in my dataset, but I realized that I did have some default values that didn't correspond to the list of values in my dataset. The default values had until recently matched their counterparts in the dataset, but staff turnover had changed two of the values from "Firstname Lastname" to "Firstname Lastname (DOMAIN\USERNAME)". As soon as I removed the two non-corresponding values all was well- the default values were selected as desired and the report again started executing as expected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-1102959108882676717?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hugWX3RSOoRqlOPNszxTQ8Hz6fQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hugWX3RSOoRqlOPNszxTQ8Hz6fQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hugWX3RSOoRqlOPNszxTQ8Hz6fQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hugWX3RSOoRqlOPNszxTQ8Hz6fQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/ylkp7vJ8Ha0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/1102959108882676717/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2011/08/ssrs-2208-multi-value-default.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1102959108882676717?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1102959108882676717?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/ylkp7vJ8Ha0/ssrs-2208-multi-value-default.html" title="SSRS 2208 Multi-value Default Parameters Not Being Used" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2011/08/ssrs-2208-multi-value-default.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MGSHkzfip7ImA9WhdQEEU.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-5349728033287343974</id><published>2011-08-09T18:19:00.004-04:00</published><updated>2011-08-11T13:57:09.786-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-11T13:57:09.786-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="frustration" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>ELMAH, NuGet, SQL Server Compact 4.0, and EF Code-First</title><content type="html">ELMAH + NuGet + SQL Server Compact 4.0 + EF Code-First = Trouble! &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.hanselman.com/blog/NuGetPackageOfTheWeek7ELMAHErrorLoggingModulesAndHandlersWithSQLServerCompact.aspx" target="_blank"&gt;Following Scott Hanselman's directions&lt;/a&gt;, I installed ELMAH on &lt;a href="http://www.google.com/search?q=Microsoft+SQL+Server+Compact+4.0"&gt;Microsoft SQL Server Compact 4.0&lt;/a&gt; (SQL CE). Because of the dependency of 'ELMAH on MS SQL Server Compact' on SQL CE (and I already had the 'Manage NuGet Packages' window open) I let &lt;a href="http://nuget.org/"&gt;NuGet&lt;/a&gt; install it for me. NuGet installed everything perfectly and soon I was happily logging exceptions and storing them in a *.sdf file. Cool.&lt;br /&gt;
&lt;br /&gt;
I also used NuGet to install Entity Framework 4.1 and followed &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx" target="_blank"&gt;Scott Guthrie's post on Code-First Development with Entity Framework 4&lt;/a&gt;. I created a model, added a connection string to my ASP.MVC 3 application, and soon I was persisting data to a second *.sdf file. Still cool.&lt;br /&gt;
&lt;br /&gt;
Finally it was time to push my application to a server. This is where things became uncool.&lt;br /&gt;
&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
Could not load file or assembly 'System.Data.SqlServerCe.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.&lt;/span&gt;&lt;/blockquote&gt;After confirming that System.Data.SqlServerCe.Entity was in the bin directory, I started reviewing the versions of the SQL CE files, and then just to be sure I copied all of the files from my local installation of SQL CE to the server again. The problem still persisted.&lt;br /&gt;
&lt;br /&gt;
I had used NuGet to install the version of SQL CE that ELMAH was using so I decided to research what the expected file versions were. These two &lt;a href="http://erikej.blogspot.com/2011/02/using-sql-server-compact-40-with.html"&gt;great&lt;/a&gt; &lt;a href="http://erikej.blogspot.com/2011/06/sql-server-compact-private-deployment.html"&gt;posts&lt;/a&gt; by ErikEJ caused me to formulate a theory that perhaps ELMAH and EF 4.1 were using the wrong or conflicting file versions. I made two changes to my application to test my theory.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Altered DbProviderFactories in my web.config file as described in &lt;a href="http://erikej.blogspot.com/2011/02/using-sql-server-compact-40-with.html" target="_blank"&gt;this article&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Set up a binding redirect for System.Data.SqlServerCe as described in &lt;a href="http://erikej.blogspot.com/2011/06/sql-server-compact-private-deployment.html" target="_blank"&gt;this article&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;After making these two changes exception logging and data persistance to my two compact databases started working on the server. Maybe it's just me but it seems that a significant percentage of development troubleshooting is pure intuition!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-5349728033287343974?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GcNpsl9SJV4JYNqaenuj8-u65rQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GcNpsl9SJV4JYNqaenuj8-u65rQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GcNpsl9SJV4JYNqaenuj8-u65rQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GcNpsl9SJV4JYNqaenuj8-u65rQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/kHHaKp5IdEc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/5349728033287343974/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2011/08/elmah-nuget-sql-server-compact-40-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/5349728033287343974?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/5349728033287343974?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/kHHaKp5IdEc/elmah-nuget-sql-server-compact-40-and.html" title="ELMAH, NuGet, SQL Server Compact 4.0, and EF Code-First" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><georss:featurename>Brentwood, TN, USA</georss:featurename><georss:point>36.0331164 -86.7827772</georss:point><georss:box>35.9770414 -86.8742887 36.0891914 -86.6912657</georss:box><feedburner:origLink>http://bryantbrabson.blogspot.com/2011/08/elmah-nuget-sql-server-compact-40-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IHRnw-fyp7ImA9WhZVGUs.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-6509206487332989262</id><published>2011-06-01T15:17:00.002-04:00</published><updated>2011-06-01T16:52:17.257-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-01T16:52:17.257-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby on Rails" /><category scheme="http://www.blogger.com/atom/ns#" term="frustration" /><title>Installing Rails From Behind A Corporate Proxy</title><content type="html">I had a little extra time on my hands and wanted to experiment with &lt;a href="http://rubyonrails.org/" target="_blank"&gt;Ruby on Rails&lt;/a&gt;. The articles that I had read raved about how easy it was to set up the development environment using &lt;a href="http://rubygems.org/"&gt;RubyGems&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Latest versions of Ruby and RubyGems were downloaded and installed without incident. Where I ran into a big problem was installing Rails and its dependencies. Initially I tried to run "gem install rails" but the operation failed due to proxy authentication issues, and this is a &lt;a href="http://docs.rubygems.org/read/chapter/15#page67" target="_blank"&gt;well known limitation&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I thought that I would manually download and install the gems but this would have taken hours. As usual, &lt;a href="http://stackoverflow.com/questions/4418/how-do-i-update-ruby-gems-from-behind-a-proxy-isa-ntlm"&gt;a StackOverflow post&lt;/a&gt; provided the inspiration to &lt;a href="http://sourceforge.net/projects/cntlm/"&gt;use CNTLM&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Initially I couldn't get CNTLM to authenticate properly because I didn't know the correct authentication type. The CNTLM manual indicated that there is a switch ("-M") that will test various authentication types using "magic NTLM dialect detection" (!). Using "cntlm -M http://www.google.com" revealed the correct mode that I should use. After making the change in cntlm.ini and restarting the CNTLM service I was able to successfully install rails using the following command:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: plain"&gt;gem install rails --http-proxy http://localhost:3128
&lt;/pre&gt;&lt;br /&gt;
Here's a sampling of the errors that I experienced as well as a successful download:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: plain"&gt;C:\Ruby192\bin&amp;gt;gem install rails --http-proxy http://localhost:3128
C:\Ruby192\bin&amp;gt;gem install rails
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    too many connection resets (http://rubygems.org/gems/abstract-1.0.0.gem)

C:\Ruby192\bin&amp;gt;gem install rails --http-proxy http://localhost:3128
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    bad response Not Found 404 (http://rubygems.org/gems/abstract-1.0.0.gem)

C:\Ruby192\bin&amp;gt;gem install rails --http-proxy http://localhost:3128
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    bad response Proxy Authorization Required 407 (http://rubygems.org/gems/abstract-1.0.0.gem)

C:\Ruby192\bin&amp;gt;gem install rails --http-proxy http://localhost:3128
Fetching: abstract-1.0.0.gem (100%)
WARNING: abstract-1.0.0 has an invalid nil value for @cert_chain
Fetching: erubis-2.6.6.gem (100%)
Fetching: actionpack-3.0.7.gem (100%)
Fetching: arel-2.0.10.gem (100%)
Fetching: activerecord-3.0.7.gem (100%)
Fetching: activeresource-3.0.7.gem (100%)
Fetching: mime-types-1.16.gem (100%)
Fetching: polyglot-0.3.1.gem (100%)
Fetching: treetop-1.4.9.gem (100%)
Fetching: mail-2.2.19.gem (100%)
Fetching: actionmailer-3.0.7.gem (100%)
Fetching: thor-0.14.6.gem (100%)
Fetching: railties-3.0.7.gem (100%)
Fetching: rails-3.0.7.gem (100%)
Successfully installed abstract-1.0.0
Successfully installed erubis-2.6.6
Successfully installed actionpack-3.0.7
Successfully installed arel-2.0.10
Successfully installed activerecord-3.0.7
Successfully installed activeresource-3.0.7
Successfully installed mime-types-1.16
Successfully installed polyglot-0.3.1
Successfully installed treetop-1.4.9
Successfully installed mail-2.2.19
Successfully installed actionmailer-3.0.7
Successfully installed thor-0.14.6
Successfully installed railties-3.0.7
Successfully installed rails-3.0.7
14 gems installed
Installing ri documentation for abstract-1.0.0...
Installing ri documentation for erubis-2.6.6...
Installing ri documentation for actionpack-3.0.7...
Installing ri documentation for arel-2.0.10...
Installing ri documentation for activerecord-3.0.7...
Installing ri documentation for activeresource-3.0.7...
Installing ri documentation for mime-types-1.16...
Installing ri documentation for polyglot-0.3.1...
Installing ri documentation for treetop-1.4.9...
Installing ri documentation for mail-2.2.19...
Installing ri documentation for actionmailer-3.0.7...
Installing ri documentation for thor-0.14.6...
Installing ri documentation for railties-3.0.7...
Installing ri documentation for rails-3.0.7...
Installing RDoc documentation for abstract-1.0.0...
Installing RDoc documentation for erubis-2.6.6...
Installing RDoc documentation for actionpack-3.0.7...
Installing RDoc documentation for arel-2.0.10...
Installing RDoc documentation for activerecord-3.0.7...
Installing RDoc documentation for activeresource-3.0.7...
Installing RDoc documentation for mime-types-1.16...
Installing RDoc documentation for polyglot-0.3.1...
Installing RDoc documentation for treetop-1.4.9...
Installing RDoc documentation for mail-2.2.19...
Installing RDoc documentation for actionmailer-3.0.7...
Installing RDoc documentation for thor-0.14.6...
Installing RDoc documentation for railties-3.0.7...
Installing RDoc documentation for rails-3.0.7...
&lt;/pre&gt;&lt;script language='javascript' type='text/javascript'&gt;
&lt;!--
   SyntaxHighlighter.config.bloggerMode = true;
   SyntaxHighlighter.all();
--&gt;
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-6509206487332989262?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JhH83ndWnmj3UNmnNHsDuLVuBtA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JhH83ndWnmj3UNmnNHsDuLVuBtA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JhH83ndWnmj3UNmnNHsDuLVuBtA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JhH83ndWnmj3UNmnNHsDuLVuBtA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/8tfZXTMnaS4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/6509206487332989262/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2011/06/installing-rails-from-behind-corporate.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/6509206487332989262?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/6509206487332989262?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/8tfZXTMnaS4/installing-rails-from-behind-corporate.html" title="Installing Rails From Behind A Corporate Proxy" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2011/06/installing-rails-from-behind-corporate.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UGRnY6eip7ImA9Wx9bEEk.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-1854019070781032543</id><published>2011-02-18T11:07:00.000-05:00</published><updated>2011-02-18T11:07:07.812-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-18T11:07:07.812-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="frustration" /><category scheme="http://www.blogger.com/atom/ns#" term="WCF" /><title>A FileNotFoundException, Wrapped In A  CommunicationException</title><content type="html">For some time I've been involved in an effort to run an existing intranet Windows Forms application in an &lt;a href="http://en.wikipedia.org/wiki/Extranet" target="_blank"&gt;extranet&lt;/a&gt; configuration. It's been quite a struggle because the original app, which I'll refer to as CRAM, was never designed to NOT run in our corporate intranet. The process has required altering firewall rules, server and database configuration, new deployment scripts, and many more things than I care to remember.&lt;br /&gt;
&lt;br /&gt;
A couple of days ago I thought everything was finally finished. One last error to resolve: &lt;br /&gt;
&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;System.ServiceModel.CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:04:59.8798782'.  &lt;/span&gt;&lt;/blockquote&gt;Surely this was just another WCF configuration issue, right? I fired up &lt;a href="http://www.wireshark.org/" target="_blank"&gt;Wireshark&lt;/a&gt; to diagnose the problem. Hmmm, Wireshark showed that a call to a &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/reporting.aspx" target="_blank"&gt;SQL Server 2008 R2 Reporting Services&lt;/a&gt; (SSRS) web service was being rejected as 401 Unauthorized. Thinking that authentication was failing, I embarked on a journey of discovery where I learned about SSRS web service changes between the 2005 and 2008 versions. At one point I changed the &lt;a href="http://msdn.microsoft.com/en-us/library/ms143504.aspx" target="_blank"&gt;account under which the SQL Server services run&lt;/a&gt;, thinking that the current accounts didn't have the required network access to properly authenticate web service callers. But after this frenzy of learning and tweaking / hacking CRAM still was throwing the same exception.&lt;br /&gt;
&lt;br /&gt;
Lucky for me the &lt;a href="http://www.geoffhudik.com/" target="_blank"&gt;original developer&lt;/a&gt; had the foresight to log the WCF calls. Using &lt;a href="http://msdn.microsoft.com/en-us/library/ms732023.aspx" target="_blank"&gt;Service Trace Viewer&lt;/a&gt; I was able to get a lot more detail about the communication error but not the root cause. Buried in all of this information was another error that I hadn't seen on the client or Event Log:&lt;br /&gt;
&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;System.IO.FileNotFoundException: Could not load file or assembly 'Oracle.DataAccess, Version=2.111.6.20, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. The system cannot find the file specified.&lt;/span&gt;&lt;/blockquote&gt;Must be a deployment issue, I thought. It didn't seem to be directly related to the communication issue, and it was appearing after the communication errors. I decided to fix the FileNotFoundException to reduce the amount of event tracing data for me to process as well as reassure myself that I wasn't a total failure.&lt;br /&gt;
&lt;br /&gt;
The problem with the Oracle.DataAccess reference is that the required version wasn't present on the application server. I changed the reference's Specific Version property to False, compiled, deployed, and still got the same error. I looked at the installed Oracle client versions on the intranet and extranet application servers and noticed that they were different. I then copied the Oracle.DataAccess.dll (version 2.111.6.20) to CRAM's extranet application server so that it would function as a &lt;a href="http://msdn.microsoft.com/en-us/library/aa375674%28v=vs.85%29.aspx" target="_blank"&gt;private assembly&lt;/a&gt;. Same result upon running CRAM: FileNotFoundException. Recalling a previous project where I needed to deploy Oracle.DataAccess as a private assembly I copied the same set of dll's to CRAM's executable directory. &lt;br /&gt;
&lt;br /&gt;
And that was the answer. CRAM required a version of Oracle.DataAccess that was unavailable on the application server. Apparently this caused an exception that set off a chain of events resulting in the System.ServiceModel.CommunicationException that vexed me for so long. What I've learned from this- and I probably should have already known this- is that when troubleshooting WCF errors you can't only look at the error on the client: the server must also be taken into account as well. The sheer disconnected nature of WCF means that one might not be getting the complete set of information if only one side of the client + server equation is examined.&lt;br /&gt;
&lt;br /&gt;
Further reading:&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/659341/the-provider-is-not-compatible-with-the-version-of-oracle-client" target="_blank"&gt;Copying Oracle.DataAccess as a private assembly&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.sqlskills.com/BLOGS/STACIA/post/SQL-Server-2008-Reporting-Services-Configuration-Changes.aspx" target="_blank"&gt;SSRS configuration changes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-1854019070781032543?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p5oaEOlYdLYmIbK2GeZ0QJ-ERjQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p5oaEOlYdLYmIbK2GeZ0QJ-ERjQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p5oaEOlYdLYmIbK2GeZ0QJ-ERjQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p5oaEOlYdLYmIbK2GeZ0QJ-ERjQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/L-Cmg-FCqiM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/1854019070781032543/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2011/02/filenotfoundexception-wrapped-in.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1854019070781032543?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1854019070781032543?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/L-Cmg-FCqiM/filenotfoundexception-wrapped-in.html" title="A FileNotFoundException, Wrapped In A  CommunicationException" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2011/02/filenotfoundexception-wrapped-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UGRX45fSp7ImA9Wx9QEU4.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-8424325701326037791</id><published>2010-12-23T14:07:00.000-05:00</published><updated>2010-12-23T14:07:04.025-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-23T14:07:04.025-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>C# language specification installed with Visual Studio</title><content type="html">Did you know that a copy of the C# language specification is &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms228593.aspx"&gt;installed with Visual Studio&lt;/a&gt; 2005-2010? The specification is in Microsoft Word format and is located in the VC#\Specifications\1033 directory under the Visual Studio installation directory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-8424325701326037791?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7tQ7ag12KyzoMmJj-9bNfMbfx2s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7tQ7ag12KyzoMmJj-9bNfMbfx2s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7tQ7ag12KyzoMmJj-9bNfMbfx2s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7tQ7ag12KyzoMmJj-9bNfMbfx2s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/KhtYw_WaaO4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/8424325701326037791/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/12/c-language-specification-installed-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/8424325701326037791?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/8424325701326037791?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/KhtYw_WaaO4/c-language-specification-installed-with.html" title="C# language specification installed with Visual Studio" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/12/c-language-specification-installed-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcDQHs4fCp7ImA9Wx5VFEs.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-5964591068292517703</id><published>2010-10-07T10:01:00.000-04:00</published><updated>2010-10-07T10:01:11.534-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-07T10:01:11.534-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><title>Use symbolic links to bridge the x86 / x64 development chasm</title><content type="html">My main development machine is x86 but the developers who report to me are all running x64. (I haven't had time to rebuild my machine yet.) We're working on an internal administrative tool developed in Silverlight. We've recently started using a third party component that lives in the "Program Files (x86)" directory, which I don't have. The app won't compile for me. Oh, what to do?!?!&lt;br /&gt;
&lt;br /&gt;
Subterfuge! (In the form of a &lt;a href="http://technet.microsoft.com/en-us/library/cc753194%28WS.10%29.aspx" target="_blank"&gt;symbolic link&lt;/a&gt;.)&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre;"&gt;mklink /D "Program Files (x86)" "C:\Program Files"&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
App now compiles. Problem solved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-5964591068292517703?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VIvxLHNiDA1arHUWTuBoOwrQ6ao/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VIvxLHNiDA1arHUWTuBoOwrQ6ao/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VIvxLHNiDA1arHUWTuBoOwrQ6ao/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VIvxLHNiDA1arHUWTuBoOwrQ6ao/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/f_5ipNNCZK8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/5964591068292517703/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/10/use-symbolic-links-to-bridge-x86-x64.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/5964591068292517703?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/5964591068292517703?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/f_5ipNNCZK8/use-symbolic-links-to-bridge-x86-x64.html" title="Use symbolic links to bridge the x86 / x64 development chasm" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/10/use-symbolic-links-to-bridge-x86-x64.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUCRn8yeyp7ImA9Wx5VEkw.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-1669068652548690714</id><published>2010-10-04T13:11:00.000-04:00</published><updated>2010-10-04T13:11:07.193-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-04T13:11:07.193-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><title>Crash gracefully</title><content type="html">I'm currently in the thick of managing and building the next release of our proprietary internal line-of-business application which I'll call LOBAPP. It's always interesting to see what problems are discovered once acceptance testing begins. &lt;br /&gt;
&lt;br /&gt;
It's challenging to maintain multiple development and test environments, and the personnel that keep everything running aren't under my control- they are motivated mainly because I'm such a nice guy. As LOBAPP has grown, it has unfortunately developed a few 'uninsulated' dependencies. By uninsulated I mean that the dependencies aren't hidden away behind a facade or a dependency injection container where their absence won't destabilize LOBAPP. Yes, I know, bad design, etc., but this is real life and we &lt;i&gt;are&lt;/i&gt; dealing with it incrementally. &lt;br /&gt;
&lt;br /&gt;
The point I want to make, though, is about what happens when certain external dependencies aren't available: LOBAPP displays a really ugly error report to the user then closes. Ugh. The app is dying violently instead of gracefully and with dignity.&lt;br /&gt;
&lt;br /&gt;
Unless the exception is completely unhandled, you should make every attempt to tell the user what is happening. You don't need to display to them all of the gory details- in fact, this could be a major security risk- but the user interface should inform the user that something has gone wrong and that someone is being notified of the problem. Their work has already been interrupted so why aggravate and antagonize them more by abruptly crashing with only a witches' brew of technical mumbo jumbo as a farewell from the dying application?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-1669068652548690714?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/H-eTpnlzHXXedF3QubIZYnx0F3s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H-eTpnlzHXXedF3QubIZYnx0F3s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/H-eTpnlzHXXedF3QubIZYnx0F3s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H-eTpnlzHXXedF3QubIZYnx0F3s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/csq9UObQe3M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/1669068652548690714/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/10/crash-gracefully.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1669068652548690714?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1669068652548690714?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/csq9UObQe3M/crash-gracefully.html" title="Crash gracefully" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/10/crash-gracefully.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYNRXo-eyp7ImA9Wx5QFEk.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-838179451399526648</id><published>2010-09-02T11:39:00.004-04:00</published><updated>2010-09-02T11:43:14.453-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-02T11:43:14.453-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><title>Debugging Visual Basic's UnhandledException event</title><content type="html">One of our applications is comprised of numerous C# projects and a single Visual Basic project. The VB project is the entry point into the application. If the legend is true VB was chosen because of the friendliness of the &lt;a href="http://msdn.microsoft.com/en-us/library/ms127621.aspx" target="_blank"&gt;WindowsFormsApplicationBase&lt;/a&gt; class. We've got a global exception handler hooked up to the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.applicationservices.windowsformsapplicationbase.unhandledexception.aspx" target="_blank"&gt;UnhandledException&lt;/a&gt; event. This works well except when you want to debug the global exception handler. The "Visual Basic compiler prevents applications that are built for debugging from  raising this event, to enable a debugger to handle the unhandled exceptions.  This means that if you are testing your application by running it under the  Visual Studio Integrated Development Environment debugger, your &lt;span class="input"&gt;UnhandledException&lt;/span&gt; event handler will not be called." That's a problem.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://stackoverflow.com/search?q=UnhandledException" target="_blank"&gt;Stackoverflow&lt;/a&gt; gave me an idea that worked out well in my case. I added code to the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.applicationservices.windowsformsapplicationbase.startup.aspx" target="_blank"&gt;WindowsFormsApplicationBase&lt;span xmlns=""&gt;.&lt;/span&gt;Startup&lt;/a&gt; event handler that- if DEBUG is defined and the debugger is attached- adds a handler for the &lt;a href="http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx" target="_blank"&gt;AppDomain&lt;span xmlns=""&gt;.&lt;/span&gt;UnhandledException&lt;/a&gt; event. (The conditional logic might be overly defensive but I can't take any chances with this mature, stable application.) When the AppDomain.UnhandledException event handler fires, it merely calls the WindowsFormsApplicationBase&lt;span xmlns=""&gt;.&lt;/span&gt;UnhandledException event handler, where I've set a breakpoint.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="font-family: consolas;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;Sub&lt;/span&gt;&amp;nbsp;AppDomainUnhandledException(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt;&amp;nbsp;sender&amp;nbsp;&lt;span style="color: blue;"&gt;As&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;Object&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt;&amp;nbsp;args&amp;nbsp;&lt;span style="color: blue;"&gt;As&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;UnhandledExceptionEventArgs&lt;/span&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Dim&lt;/span&gt;&amp;nbsp;ex&amp;nbsp;&lt;span style="color: blue;"&gt;As&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Exception&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;DirectCast&lt;/span&gt;(args.ExceptionObject,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Exception&lt;/span&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Dim&lt;/span&gt;&amp;nbsp;newArgs&amp;nbsp;&lt;span style="color: blue;"&gt;As&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;New&lt;/span&gt;&amp;nbsp;Microsoft.VisualBasic.ApplicationServices.&lt;span style="color: #2b91af;"&gt;UnhandledExceptionEventArgs&lt;/span&gt;(&lt;span style="color: blue;"&gt;False&lt;/span&gt;,&amp;nbsp;ex)
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyApplication_UnhandledException(sender,&amp;nbsp;newArgs)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;End&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;
Now I can step through my changes. Yippee!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-838179451399526648?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5e0ASBy0xPGHsRflVqg-dPaYgMo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5e0ASBy0xPGHsRflVqg-dPaYgMo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5e0ASBy0xPGHsRflVqg-dPaYgMo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5e0ASBy0xPGHsRflVqg-dPaYgMo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/oQmi67FKte4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/838179451399526648/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/09/debugging-visual-basics.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/838179451399526648?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/838179451399526648?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/oQmi67FKte4/debugging-visual-basics.html" title="Debugging Visual Basic's UnhandledException event" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/09/debugging-visual-basics.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04CR3czfSp7ImA9Wx5QEks.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-3881140635420856486</id><published>2010-08-31T09:39:00.000-04:00</published><updated>2010-08-31T09:39:26.985-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-31T09:39:26.985-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>404 errors and the XamWebSpellChecker dictionary file</title><content type="html">I added &lt;a href="http://www.infragistics.com/dotnet/netadvantage/silverlight/xamwebspellchecker.aspx#Overview" target="_blank"&gt;Infragistics' XamWebSpellChecker&lt;/a&gt; control to one of my Silverlight 4 data entry user controls and it worked like a charm.&lt;br /&gt;
&lt;br /&gt;
Well, it worked on my machine. &lt;br /&gt;
&lt;br /&gt;
Once I got the application on a server spell checking stopped working: a progress dialog would briefly appear and nothing else. &lt;a href="http://www.fiddler2.com/fiddler2/" target="_blank"&gt;Fiddler&lt;/a&gt; revealed that when my app was trying to check spelling and requesting the download of a dictionary it was only receiving a 404 response. First I checked the server to make sure that the file had been properly deployed to the IIS6 host. Check. I then reviewed the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/Silverlight/2010.1/CLR3.5/html/SL_xamWebSpellChecker_Dictionaries.html" target="_blank"&gt;instructions regarding the usage of the dictionary file&lt;/a&gt; and it appeared that I had used the correct file. I started thinking about the binary dictionary file, which had a ".dict" extension. How would IIS know what to do with a .dict file? I logged on to the server and added a new entry: Files with a .dict extension are of "application/octet-stream" MIME type. I issued an &lt;a href="http://www.google.com/search?q=iisreset"&gt;iisreset&lt;/a&gt; command. &lt;br /&gt;
&lt;br /&gt;
Then with great trepidation I tried to check spelling again...&lt;br /&gt;
&lt;br /&gt;
BAM! Adding the MIME entry was the solution. The spell checker control was functional again. I could rest easy, knowing that no misspelled words would be allowed ever again!&lt;br /&gt;
&lt;br /&gt;
At least not on a single data entry form in a departmental content management system. You've got to start somewhere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-3881140635420856486?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CFtIUMAkLDiAjbDcavDkUWmyB1M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CFtIUMAkLDiAjbDcavDkUWmyB1M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CFtIUMAkLDiAjbDcavDkUWmyB1M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CFtIUMAkLDiAjbDcavDkUWmyB1M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/agJUX5SOGWA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/3881140635420856486/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/08/404-errors-and-xamwebspellchecker.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3881140635420856486?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3881140635420856486?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/agJUX5SOGWA/404-errors-and-xamwebspellchecker.html" title="404 errors and the XamWebSpellChecker dictionary file" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/08/404-errors-and-xamwebspellchecker.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQNRn05fCp7ImA9Wx5RGE4.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-4227231576824977405</id><published>2010-08-24T13:06:00.002-04:00</published><updated>2010-08-26T09:46:37.324-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-26T09:46:37.324-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="RIA Services" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC" /><title>Swiss Army Knife of ASP.NET MVC apps (Part 1)</title><content type="html">My company has a couple of departments with sometimes conflicting goals and objectives. Let's call them BBU Ostrich and BBU Peacock. (BBU is an acronym for Battlin' Business Unit, a term coined by the &lt;a href="http://www.dilbert.com/"&gt;Dilbert&lt;/a&gt; comic strip.)&lt;br /&gt;
&lt;br /&gt;
Alteration of the code will allow each BBU to do what they want with the information without interfering with the other one's processes. It will also allow one of the BBU Ostrich's current processes to continue unchanged while adding new features and capabilities. There is also an issue with reaching consensus between the two business units that prevents progress regarding a unified solution.&lt;br /&gt;
&lt;br /&gt;
Meeting these various needs has been much easier than I had expected and I have been able to use a wide variety of technologies.&lt;br /&gt;
&lt;a href="http://www.asp.net/mvc"&gt;ASP.NET MVC 2&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/data/aa937723.aspx"&gt;Entity Framework 4&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.silverlight.net/getstarted/riaservices/"&gt;WCF RIA Services&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://www.w3.org/TR/xhtml1/"&gt;XHTML&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;WCF&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/r2.aspx"&gt;SQL Server 2008 R2&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://ninject.org/"&gt;Ninject&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://automapper.codeplex.com/"&gt;Automapper&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://sparkviewengine.com/"&gt;Spark View Engine&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
It might seem to the casual observer that some of the items above might have been used purely for the sake of using every cool current .NET technology, but they actually each play a role. Here are a few usage examples:&lt;br /&gt;
&lt;br /&gt;
WCF RIA Services exposes a JSON endpoint to a site built on the &lt;a href="http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29"&gt;LAMP stack&lt;/a&gt;.&lt;br /&gt;
XHTML is exposed so that our site can be efficiently &lt;a href="http://www.google.com/search?q=site+scraping"&gt;scraped&lt;/a&gt;.&lt;br /&gt;
I was initially using Ninject while waiting for a database to become available, but it was so easy to work with that I expanded its usage.&lt;br /&gt;
Automapper is used for easy data transfer across layers.&lt;br /&gt;
I had a couple of partial views had become &lt;a href="http://www.google.com/search?q=tag+soup"&gt;tag soup&lt;/a&gt; disasters so I turned to the Spark View Engine. Spark restored order and maintainability.&lt;br /&gt;
&lt;br /&gt;
There's also a Silverlight 4.0 administrative tool based on the &lt;a href="http://mvvmlight.codeplex.com/"&gt;MVVM Light Toolkit&lt;/a&gt; involved. It also uses WCF RIA Services, Automapper, and Ninject. Automapper is available for Silverlight version 3 but not 4, so I had to compile the source code for Silverlight 4. I'm going to cover that in a future post because of a couple of issues that I encountered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-4227231576824977405?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VFqDWfX2aG3Q7bpNPA0tR6lR5kI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VFqDWfX2aG3Q7bpNPA0tR6lR5kI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VFqDWfX2aG3Q7bpNPA0tR6lR5kI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VFqDWfX2aG3Q7bpNPA0tR6lR5kI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/PTu4vxoZThY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/4227231576824977405/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/08/swiss-army-knife-of-aspnet-mvc-apps.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/4227231576824977405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/4227231576824977405?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/PTu4vxoZThY/swiss-army-knife-of-aspnet-mvc-apps.html" title="Swiss Army Knife of ASP.NET MVC apps (Part 1)" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/08/swiss-army-knife-of-aspnet-mvc-apps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ANSHk7cCp7ImA9Wx5SE0o.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-2783947886463497030</id><published>2010-08-09T14:49:00.000-04:00</published><updated>2010-08-09T14:49:59.708-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-09T14:49:59.708-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="RIA Services" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Silverlight Neophyte 1: Include the Include Attribute</title><content type="html">&lt;b&gt;Summary&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Use the Include attribute on related types that should be returned to the client.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.silverlight.net/getstarted/riaservices/" target="_blank"&gt;RIA Services&lt;/a&gt; supposedly simplify and accelerate n-tier &lt;a href="http://www.asp.net/"&gt;ASP.NET&lt;/a&gt; and &lt;a href="http://www.silverlight.net/"&gt;Silverlight&lt;/a&gt; development. I don't have an opinion on the matter yet because I haven't finished my Silverlight 4 application yet. I think that I'm making good progress on my project for a Silverlight neophyte. That being said, I've spent a few too many hours on problems stemming from my Silverlight / RIA Services ignorance or poor or non-existent documentation. I'm sharing these gotchas as I encounter them.&lt;br /&gt;
&lt;br /&gt;
I inherited a poorly designed legacy database that &lt;a href="http://msdn.microsoft.com/en-us/data/aa937723.aspx" target="_blank"&gt;Entity Framework 4&lt;/a&gt; nicely abstracts. Two of the tables, TableA and TableB, really should be a single table because they merely partition a single, cohesive set of data into two different, um, parts. There are several legacy applications that operate against TableA and TableB or this design would have been changed years ago. I've created a couple of views that nicely unify the tables, and these views work well for read operations.&lt;br /&gt;
&lt;br /&gt;
My Silverlight application needs to edit these tables, and that requirement is where today's topic originates. As you expect, my &lt;a href="http://msdn.microsoft.com/en-us/library/aa697428%28VS.80%29.aspx" target="_blank"&gt;entity model&lt;/a&gt; contains types that represent TableA and TableB, and each of these types (EntityTypeA and EntityTypeB) have &lt;a href="http://msdn.microsoft.com/en-us/library/bb738520.aspx" target="_blank"&gt;navigation properties&lt;/a&gt; related to the other type. With that in mind, I added a new method to my &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.domainservices.server.domainservice%28VS.91%29.aspx" target="_blank"&gt;domain service&lt;/a&gt; that returned a single EntityTypeA. My thinking was that I could then use the navigation property value (EntityTypeA.EntityTypeB) to get the complete set of data.&lt;br /&gt;
&lt;br /&gt;
So no big deal here. My ViewModel called the &lt;a href="http://msdn.microsoft.com/en-us/library/ff422945%28v=VS.91%29.aspx" target="_blank"&gt;DomainContext.Load&lt;/a&gt; method and I got back an instance of EntityTypeA. But EntityTypeB was null. OK, I thought, I've probably not configured the loading operations properly, I'll set ObjectContext.ContextOptions.LazyLoadingEnabled = false and everything will be alright. Nope, still a null EntityTypeB. I must have done something else wrong. Fine, I'll change my query from&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-size: 80%; margin-left: 20px; margin-top: 10px; white-space: pre;"&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;EntityTypeA&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt; entityA =&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.ObjectContext.EntityTypeA.Include(&lt;span style="color: #a31515;"&gt;"EntityTypeB"&lt;/span&gt;).FirstOrDefault(oo&amp;nbsp;=&amp;gt;&amp;nbsp;oo.ID&amp;nbsp;== Id);&lt;/span&gt;&lt;/div&gt;to &lt;br /&gt;
&lt;div style="font-size: 80%; margin-left: 20px; margin-top: 10px; white-space: pre;"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&lt;span style="color: #2b91af;"&gt;EntityTypeA&lt;/span&gt;&amp;nbsp;entityA&amp;nbsp;=&amp;nbsp;&lt;span class="GramE"&gt;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.ObjectContext.EntityTypeA.FirstOrDefault(&lt;/span&gt;oo&amp;nbsp;=&amp;gt;&amp;nbsp;oo.ID&amp;nbsp;==&amp;nbsp;Id);&lt;br /&gt;
&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(!&lt;span class="SpellE"&gt;entityA.EntityTypeBReference.IsLoaded&lt;/span&gt;)&lt;br /&gt;
   &lt;span class="SpellE"&gt;entityA.EntityTypeBReference.Load&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Still no related entity, and I could see that the property was getting successfully set on the server. It just wasn't making it back to the client. &lt;br /&gt;
&lt;br /&gt;
I was able to finally conjure the correct Google search incantation and found &lt;a href="http://vincenthomedev.wordpress.com/2010/01/08/using-wcf-ria-services-to-include-multi-table-master-detail-data/"&gt;Vincent Leung's post&lt;/a&gt; regarding the &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.domainservices.server.includeattribute%28v=VS.91%29.aspx"&gt;Include attribute&lt;/a&gt;. As soon as I set that in EntityTypeA's DomainService metadata class on the EntityTypeB property my problem was solved. I was able to change my code back to the following more concise format:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-size: 80%; margin-left: 20px; margin-top: 10px; white-space: pre;"&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;EntityTypeA&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt; entityA =&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.ObjectContext.EntityTypeA.Include(&lt;span style="color: #a31515;"&gt;"EntityTypeB"&lt;/span&gt;).FirstOrDefault(oo&amp;nbsp;=&amp;gt;&amp;nbsp;oo.ID&amp;nbsp;== Id);&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
That is all.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.google.com/search?q=+ria+services+include+attribute"&gt;Google query&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://hatim.indexdev.net/2009/04/08/5-most-common-asked-questions-when-using-net-ria-services/" target="_blank"&gt;RIA Services Reference&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-2783947886463497030?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IJo_zgPLCCNsYBuRMFoKBBfcOZU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IJo_zgPLCCNsYBuRMFoKBBfcOZU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IJo_zgPLCCNsYBuRMFoKBBfcOZU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IJo_zgPLCCNsYBuRMFoKBBfcOZU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/ynMghllixq0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/2783947886463497030/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/08/silverlight-neophyte-1-include-include.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/2783947886463497030?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/2783947886463497030?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/ynMghllixq0/silverlight-neophyte-1-include-include.html" title="Silverlight Neophyte 1: Include the Include Attribute" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/08/silverlight-neophyte-1-include-include.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8ERH45fip7ImA9Wx5TGEg.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-3806921230659267152</id><published>2010-08-03T14:06:00.000-04:00</published><updated>2010-08-03T14:06:45.026-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-03T14:06:45.026-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Silverlight 4 "Value does not fall within the expected range"</title><content type="html">&lt;style type="text/css"&gt;
.MSRed { color: #FF0000 }
.MSBlue { color: #0000FF }
.MSRusty { color: #A31515 }
&lt;/style&gt;&lt;br /&gt;
I ported some WPF code to &lt;a href="Silverlight" target="_blank"&gt;Silverlight&lt;/a&gt; 4 and started to receive a &lt;a href="http://msdn.microsoft.com/en-us/library/system.argumentexception.aspx" target="_blank"&gt;System.ArgumentException&lt;/a&gt; with the following message: &lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre;"&gt;Value does not fall within the expected range.&lt;br /&gt;
&lt;/div&gt;Various posts indicated that this typically occurs when you dynamically add child objects with the same names to a container. However, I wasn't dynamically adding anything. After selectively commenting out portions of my XAML I was able to determine that the culprit was a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridtextcolumn(VS.95).aspx"&gt;DataGridTextColumn&lt;/a&gt; that had no binding attribute declared at all. Example:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre;" class="MSRusty"&gt;&lt;span class="MSBlue"&gt;&amp;lt;&lt;/span&gt;sdk:DataGridTextColumn &lt;span class="MSRed"&gt;Header&lt;/span&gt;&lt;span class="MSBlue"&gt;="Pending Time"&lt;/span&gt; &lt;span class="MSRed"&gt;IsReadOnly&lt;/span&gt;&lt;span class="MSBlue"&gt;="True"&lt;/span&gt; &lt;span class="MSBlue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;What surprised me was that when I specified a fictional binding (&lt;span class="MSBlue"&gt;{&lt;/span&gt;&lt;span class="MSRusty"&gt;Binding&lt;/span&gt; &lt;span class="MSRed"&gt;Foo&lt;/span&gt;&lt;span class="MSBlue"&gt;}&lt;/span&gt;) I got a nice, easy to understand exception:&lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre;"&gt;System.Windows.Data Error: BindingExpression path error: 'Foo' property not found on...&lt;br /&gt;
&lt;/div&gt;Granted, I am not a Silverlight expert so I might be posting something obvious. I hope that this saves someone some time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-3806921230659267152?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HTmRXAWUUgN8v5Hf4K-ZuYGaI8A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HTmRXAWUUgN8v5Hf4K-ZuYGaI8A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HTmRXAWUUgN8v5Hf4K-ZuYGaI8A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HTmRXAWUUgN8v5Hf4K-ZuYGaI8A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/hWNuHGhc7GY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/3806921230659267152/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/08/silverlight-4-value-does-not-fall.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3806921230659267152?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3806921230659267152?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/hWNuHGhc7GY/silverlight-4-value-does-not-fall.html" title="Silverlight 4 &quot;Value does not fall within the expected range&quot;" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/08/silverlight-4-value-does-not-fall.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUEQnc_eip7ImA9WxFWEEs.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-3979617661401114950</id><published>2010-05-28T13:34:00.002-04:00</published><updated>2010-05-28T13:36:43.942-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-28T13:36:43.942-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="continuous integration" /><title>Windows SDK 7.0A and automated builds</title><content type="html">We altered our solution and project files to work with Visual Studio 2010. After changing the path to MSBuild.exe and altering ToolsVersion in the ccnet.config file to accommodate the framework change, &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET"&gt;CruiseControl.NET&lt;/a&gt; reported the following error:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre;"&gt;C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (1917,9):&lt;br /&gt;
errorMSB3086: Task could not find "LC.exe" using the SdkToolsPath "" or the registry key "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A". &lt;br /&gt;
Make sure the SdkToolsPath is set and the tool exists in the correct processor specific location under the SdkToolsPath and that the Microsoft Windows SDK is installed&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Various posts indicate that the 7.0A SDK ships with Visual Studio 2010. With that knowledge I copied the directory "Program Files\Microsoft SDKs\Windows\v7.0A" from my development machine to my build server. I then exported the "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A" registry key from my development machine and merged into the registry of the build server. Problem solved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-3979617661401114950?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/L6kL4_Mnw_XANmx5AWprMAKAlns/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L6kL4_Mnw_XANmx5AWprMAKAlns/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/L6kL4_Mnw_XANmx5AWprMAKAlns/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L6kL4_Mnw_XANmx5AWprMAKAlns/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/ceb7MXWaFqc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/3979617661401114950/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/05/windows-sdk-70a-and-automated-builds.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3979617661401114950?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3979617661401114950?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/ceb7MXWaFqc/windows-sdk-70a-and-automated-builds.html" title="Windows SDK 7.0A and automated builds" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>7</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/05/windows-sdk-70a-and-automated-builds.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQCSHgyfSp7ImA9WxFQFkU.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-3935837029112646842</id><published>2010-05-12T13:46:00.000-04:00</published><updated>2010-05-12T13:46:09.695-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-12T13:46:09.695-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Oracle" /><category scheme="http://www.blogger.com/atom/ns#" term="frustration" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>TNSNAMES.ORA and spaces</title><content type="html">Just when Oracle database and I had forged an uneasy peace, my day was derailed by my mistake.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.blogger.com/post-create.g?blogID=1939334038833612724" target="_blank"&gt;When Oracle tells you&lt;/a&gt; that "[t]he service name must begin in the first space of a line to be parsed correctly" they are not kidding. I received a request from one of our DBA's to change a server's TNSNAMES.ORA file and copied and pasted the new entry. The three (3) leading spaces on that entry caused me to get "ORA-12154: TNS: could not resolve the connect identifier specified" errors for an hour until I realized my mistake.&lt;br /&gt;
&lt;br /&gt;
Don't let this happen to you. Heed the warning of Oracle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-3935837029112646842?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jQQKEZyYx_zUg6mWRnWz2zYnItE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jQQKEZyYx_zUg6mWRnWz2zYnItE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jQQKEZyYx_zUg6mWRnWz2zYnItE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jQQKEZyYx_zUg6mWRnWz2zYnItE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/UUOPbx1oExg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/3935837029112646842/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/05/tnsnamesora-and-spaces.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3935837029112646842?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3935837029112646842?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/UUOPbx1oExg/tnsnamesora-and-spaces.html" title="TNSNAMES.ORA and spaces" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/05/tnsnamesora-and-spaces.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MFSX4_fyp7ImA9WxFREE4.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-8898686696172079152</id><published>2010-04-23T12:16:00.000-04:00</published><updated>2010-04-23T12:16:58.047-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-23T12:16:58.047-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Using jQuery to avoid work</title><content type="html">I've got an old ASP.NET 1.1 app that I've been meaning to rewrite for years but have never had the time. Well, that's not the entire story: it hasn't needed attention in about 3 years. It just does its thing with no intervention on my part.&lt;br /&gt;
&lt;br /&gt;
Until now.&lt;br /&gt;
&lt;br /&gt;
Some recent data changes have caused a critical DropDownList on the landing page to stop being sorted correctly. It's not a huge deal but annoying to the users. I could certainly dive into the underlying T-SQL or install Visual Studio 2003 to modify the code, but that would be a lot of fiddly work. Since the only problem is the sort order of the &lt;OPTION&gt; items, can't &lt;a href="http://jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; help me out?&lt;br /&gt;
&lt;br /&gt;
Yup.&lt;br /&gt;
&lt;br /&gt;
Using the &lt;a href="http://www.texotela.co.uk/code/jquery/select/"&gt;Select box manipulation plugin&lt;/a&gt; from &lt;a href="http://www.texotela.co.uk/"&gt;Texotela&lt;/a&gt; along with a few lines added to the Default.aspx page I was able to sort my Select.&lt;br /&gt;
&lt;br /&gt;
Here's all it took:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre;"&gt;&amp;lt;script type="text/javascript" src="scripts/jquery-1.4.2.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type="text/javascript" src="scripts/jquery.selectboxes.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
   $('#MySelect').sortOptions();&lt;br /&gt;
});   &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
This has saved me so much time that I think I'll take the rest of the day off.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-8898686696172079152?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aFEyrw3PwFhGqOohgQFd_O2rRZM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aFEyrw3PwFhGqOohgQFd_O2rRZM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aFEyrw3PwFhGqOohgQFd_O2rRZM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aFEyrw3PwFhGqOohgQFd_O2rRZM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/BeLBNtmzcbU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/8898686696172079152/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/04/using-jquery-to-avoid-work.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/8898686696172079152?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/8898686696172079152?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/BeLBNtmzcbU/using-jquery-to-avoid-work.html" title="Using jQuery to avoid work" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/04/using-jquery-to-avoid-work.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQMQ3w_cSp7ImA9WxBbFU0.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-1991615995387016512</id><published>2010-03-13T14:26:00.000-05:00</published><updated>2010-03-13T14:26:22.249-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-13T14:26:22.249-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Droid" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="frustration" /><title>Droid Gmail not synchronizing</title><content type="html">For the past 24 hours I've not been receiving new Gmail on my Droid. All of the other apps were still working, even Google Calendar and Contacts. But not the Gmail app.&lt;br /&gt;
&lt;br /&gt;
Manual synchronization didn't work. I deactivated synchronization, turned phone off and on, removed battery. Still no new mail. Looked at the items with the Outbox label and noticed an item, which had a photo attachment, from the day before. I tried to send it and 'No Connection' was the message that I received.  Deleted it and new mail started appearing on my phone.&lt;br /&gt;
&lt;br /&gt;
It appears that there was an 'unresolved' item that hadn't been reconciled with the server. This was probably partially my fault because I had tried to send the message from a parking garage, and as soon as I sent the message I deleted the photo from my phone. It was the perfect storm as far as my phone was concerned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-1991615995387016512?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/U8uc1jRlNX42GsZ9Vyj6dsfNPEQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U8uc1jRlNX42GsZ9Vyj6dsfNPEQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/U8uc1jRlNX42GsZ9Vyj6dsfNPEQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U8uc1jRlNX42GsZ9Vyj6dsfNPEQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/j3ZLqQoe1G4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/1991615995387016512/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/03/droid-gmail-not-synchronizing.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1991615995387016512?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1991615995387016512?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/j3ZLqQoe1G4/droid-gmail-not-synchronizing.html" title="Droid Gmail not synchronizing" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/03/droid-gmail-not-synchronizing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIFRX85fyp7ImA9WxFQFkU.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-7684245368923043924</id><published>2010-03-09T11:58:00.002-05:00</published><updated>2010-05-12T13:48:34.127-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-12T13:48:34.127-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="Oracle" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>Linked Oracle Server configuration pain</title><content type="html">For the past day I've been forcing myself to work with the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&amp;displaylang=en" target="_blank"&gt;Visual Studio Team System 2008 Database Edition GDR R2&lt;/a&gt; for a small SQL Server 2000 database that needs some attention. I wanted Visual Studio to generate a SQL Server 2005 deployment script that I could execute against a local SQL Server 2008 Express instance in order to test a possible migration. During the initial execution of the script I was notified of an error involving a linked Oracle server. No problem, I thought. I'll just create the linked server and run the script again. As happens so often in software development, though, a seemingly quick and easy task turns into a quagmire.&lt;br /&gt;
&lt;br /&gt;
It's been a while since I set up a linked server and I was a little foggy on the setup steps. I was able to determine by examining the existing SQL Server 2000 server that I needed to use the 'Microsoft OLE DB Provider for Oracle' provider. Still using the existing server, I was able to figure out how to fill in the 'Linked Server Properties' dialog and the Security options. As soon as I clicked the OK button, though, I was presented with an error:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre;"&gt;The Oracle client and networking components were not found. These components are supplied by Oracle Corporation and are part of the Oracle Version 7.3 (or greater) client software installation.&lt;/div&gt;&lt;br /&gt;
OK- maybe I needed to set the 'Provider string' value. &lt;a href="http://support.microsoft.com/kb/255084" target="_blank"&gt;Using this page as a reference&lt;/a&gt; (though I'm not configuring IIS), I was able to determine the correct Provider value ("Provider=MSDASQL;DRIVER={Microsoft ODBC for ORACLE};UID=User;PWD=Password;Server=Your_TNSNames_Alias") under item 9. &lt;br /&gt;
&lt;br /&gt;
I recreated the linked server but it still didn't work. I looked in the Registry, and in fact created an ORACLE_HOME string value at HKLM\Software\Oracle. That didn't help either, so I removed that value. (I did notice that setting this value fixed something in Toad 9.7.2 but that story is out of scope for this post.) I even restarted my workstation a couple of times in an effort to appease the Oracle Client God. Nothing worked. My linked server was still broken.&lt;br /&gt;
&lt;br /&gt;
Finally I examined my PATH environment variable. Now, I've struggled mightily with configuring Oracle clients because my company has versions of Oracle ranging from 8i-11. My PATH was collateral damage, and contained references to two Oracle installations. The first reference was to an 11 client's root, and the second was to a 10 client's bin directory. At some point in the past I think that I read that the probing / search for an Oracle client stops when the first client home installation is found. With this in mind, I altered the 11 client path element to point to the bin directory rather than the 11 client root. Restarted the SQL Server 2008 Express service and my linked server was alive and kicking. &lt;br /&gt;
&lt;br /&gt;
So what have I learned after 4 hours of tinkering with SQL Server and Oracle client interaction? Well, there's got to be an easier way. It seems to me that the Oracle client setup and configuration process is opaque. Example: is ORACLE_HOME needed in the registry, as an environment variable, both places, or neither one? The answer seems to be that it depends on the application. I've always been lucky that my installations have worked on a server, but it seems like a fragile process for a volatile developer workstation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-7684245368923043924?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LqPVSOx5kRRY94iPtzVerWammo0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LqPVSOx5kRRY94iPtzVerWammo0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LqPVSOx5kRRY94iPtzVerWammo0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LqPVSOx5kRRY94iPtzVerWammo0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/4kj8uMShPNc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/7684245368923043924/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/03/linked-oracle-server-configuration-pain.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/7684245368923043924?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/7684245368923043924?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/4kj8uMShPNc/linked-oracle-server-configuration-pain.html" title="Linked Oracle Server configuration pain" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/03/linked-oracle-server-configuration-pain.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUGQH04eyp7ImA9WxBUFEs.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-1193369840950308034</id><published>2010-03-01T12:57:00.000-05:00</published><updated>2010-03-01T12:57:01.333-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-01T12:57:01.333-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Who gets the money?</title><content type="html">Recently I had to decide on merit salary increases. One of the toughest decisions came down to a couple of folks that I'll call Yin and Yang.&lt;br /&gt;
&lt;br /&gt;
Yang is an expert developer, technically brilliant, always has a clever answer to a problem.&lt;br /&gt;
&lt;br /&gt;
Yin is dependable, reliable, always gets the job done. I can always count on Yin to cheerfully accept and complete any task.&lt;br /&gt;
&lt;br /&gt;
But...&lt;br /&gt;
&lt;br /&gt;
Yang's hubris sometimes causes careless mistakes. Yang is also high maintenance, frequently requiring meetings to discuss the most minute of details and risks. Yang requires a surprising amount of micromanagement to ensure that assignments stay on track, and don't veer off into the realm of overarchitecture.&lt;br /&gt;
&lt;br /&gt;
Yin stopped learning new things years ago. Yin gets the job done through brute force.&lt;br /&gt;
&lt;br /&gt;
Ultimately I ruled in favor of Yin. Both developers adequately complete their tasks but take different approaches. Both are important parts of the team. I went with the person who made my life easiest. Though Yang's solutions are technically superior to Yin's, at the end of the day the user doesn't care about elegant code- users just want their applications to work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-1193369840950308034?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RwPDQpif_Oy8S5T9R9d15UK7SHk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RwPDQpif_Oy8S5T9R9d15UK7SHk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RwPDQpif_Oy8S5T9R9d15UK7SHk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RwPDQpif_Oy8S5T9R9d15UK7SHk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/CVQp7PqVb1s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/1193369840950308034/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/03/who-gets-money.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1193369840950308034?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1193369840950308034?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/CVQp7PqVb1s/who-gets-money.html" title="Who gets the money?" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/03/who-gets-money.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQDQn0yfCp7ImA9WxBRF0U.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-7816840001583575704</id><published>2010-01-06T09:14:00.030-05:00</published><updated>2010-01-06T09:32:53.394-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-06T09:32:53.394-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><title>ASP.NET MVC Action methods called twice</title><content type="html">I'm converting an ASP.NET Web Forms application to &lt;a href="http://www.asp.net/mvc/whatisaspmvc/" target="_blank"&gt;ASP.NET MVC&lt;/a&gt;. The UI is not changing, so I'm copying and pasting chunks of ASPX and ASCX files into my Views, and then replacing the Web Forms-specific code (example: tags with 'asp' prefixes) with HTML and/or calls to the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.htmlhelper.aspx" target="_blank"&gt;System.Web.Mvc.HtmlHelper&lt;/a&gt; class. But this conversion doesn't happen instantaneously - there might be a period of time between the creation of the view and completion of conversion.&lt;br /&gt;
&lt;br /&gt;
I had a breakpoint set in an action method and noticed that the method was being called twice. Once with the parameter that I expected (an &lt;a href="http://msdn.microsoft.com/en-us/library/system.int32.aspx" target="_blank"&gt;int&lt;/a&gt; representing a primary key in a database) but then also with the &lt;a href="http://msdn.microsoft.com/en-us/library/dd505187.aspx" target="_blank"&gt;default value specified when the route was registered&lt;/a&gt;. The net effect was that the desired View was displayed, but that also a call was made to the previous View. Not good. &lt;br /&gt;
&lt;br /&gt;
I spent time with &lt;a href="http://www.fiddler2.com/fiddler2/" target="_blank"&gt;Fiddler&lt;/a&gt;, and I got an idea. I replaced all of the remaining legacy asp tags that I hadn't yet converted, and the problem disappeared. Sure, sooner or later the problem would have resolved itself as the conversion process progressed, but I'm (unfortunately?) not the type of person who can let a mystery like this one remain unsolved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-7816840001583575704?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/J8XN8eW5qIoa64aNhSIHgUhFzlk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J8XN8eW5qIoa64aNhSIHgUhFzlk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/J8XN8eW5qIoa64aNhSIHgUhFzlk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J8XN8eW5qIoa64aNhSIHgUhFzlk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/KXhq-Va_ah4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/7816840001583575704/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2010/01/action-methods-called-twice.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/7816840001583575704?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/7816840001583575704?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/KXhq-Va_ah4/action-methods-called-twice.html" title="ASP.NET MVC Action methods called twice" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2010/01/action-methods-called-twice.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMGRXgzfip7ImA9WxBSEEs.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-3449630915219184103</id><published>2009-12-16T13:23:00.003-05:00</published><updated>2009-12-17T09:33:44.686-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-17T09:33:44.686-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell" /><title>Translating Data With PowerShell</title><content type="html">I recently was confronted with a situation where I needed to transform a list of developer-friendly filenames contained in a text file into a user-friendly list of report names. In the past I probably would have written a Console app to do this work but PowerShell is a much more lightweight solution to this problem.&lt;br /&gt;
&lt;br /&gt;
The filenames were the result of a query against TFS version control and were in the format of $/[TFS Project Name]/Reports/[Codeline]/[Visual Studio Project Name]/*.rdl. A given *.rdl file, for example "UpcomingBdayRpt.rdl", would be represented in the application as "Upcoming Birthdays Report". I needed to provide the names which the tester was familiar with in the application. Providing a list of cryptic names like "UpcomingBdayRpt.rdl" would be as useful as providing a list in cuneiform (assuming that the tester doesn't read cuneiform).&lt;br /&gt;
&lt;br /&gt;
The first step was to get the list into PowerShell. (For the purposes of this demonstration assume that I've already navigated in PowerShell to the directory that contains the source files.)&lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre;"&gt;$allReportFiles = Get-Content .\MyInputFile.txt&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Because I had a predictable path pattern I could use Split on the forward slash to get a list of only the filename. I removed the extension on the filename with -replace.&lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre;"&gt;$rdlNames = $allReportFiles | ForEach-Object{ $_.split("/")[5] -replace ".rdl", ""}&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
The database that supports our application has a cross-reference table that relates the *.rdl name to the user-friendly name. I exported the two columns that I needed into a comma-delimited file named "reports.txt". The format of the text file looked like this:&lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre;"&gt;DocumentLetter,Document Letter&lt;br /&gt;
InterviewReport,Interview Report&lt;br/ &gt;OutstandingItemsLetter,Outstanding Items Letter&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
I got lazy during the next step. Pipelining the contents of $rdlNames to ForEach-Object, I used GetChildItem to get a reference to my data file, searched that file for a line that contained the filename contained in "$_", and, when the line was found, got the FileName, Pattern, and Line properties. Note that I don't need the FileName property,  but included it so that I could confirm that my data was coming from where I expected it. I'm paranoid about things like that.&lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre; overflow: scroll;"&gt;$data = $rdlNames | ForEach-Object { Get-ChildItem * -include reports* | Select-String -pattern $_.Trim() -SimpleMatch} | Select-Object -property FileName, Pattern, Line -unique&lt;br /&gt;
&lt;/div&gt;So why do I consider this lazy? Well, there are almost certainly more elegant solutions to this problem. But then again, this is just a trivial script meant to solve a unique problem. The solution doesn't have to stand the test of time nor be incredibly efficient- it just needs to get the job done.&lt;br /&gt;
&lt;br /&gt;
The final step is just to extract the user-friendly names from the objects in $data using $_.Line.split(",")[1]. In case I need to discuss one of the reports with the tester, I provide the developer-friendly filename in brackets so that we can translate between the two names (developer and tester).&lt;br /&gt;
&lt;div style="font-size: 80%; margin-top: 10px; margin-left: 20px; white-space: pre; overflow: scroll;"&gt;$data | ForEach-Object{$_.Line.split(",")[1] + " [" + $_.Pattern + "]" } | Sort-Object&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
So that's it. I copied and pasted the output from the final line into an email and I was done. The tester had the information that she needed, all was right in the world, and I could leave on time for once.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-3449630915219184103?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZSg4ZS39QS6uAJxuFDNVErFx-4w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZSg4ZS39QS6uAJxuFDNVErFx-4w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZSg4ZS39QS6uAJxuFDNVErFx-4w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZSg4ZS39QS6uAJxuFDNVErFx-4w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/WsnhTAmf9lA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/3449630915219184103/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2009/12/translating-data-with-powershell.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3449630915219184103?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/3449630915219184103?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/WsnhTAmf9lA/translating-data-with-powershell.html" title="Translating Data With PowerShell" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2009/12/translating-data-with-powershell.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIDQXYzfCp7ImA9WxFQFkU.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-1602589143771459596</id><published>2009-11-19T14:08:00.005-05:00</published><updated>2010-05-12T13:49:30.884-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-12T13:49:30.884-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="Oracle" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>Phantom TNSNAMES entries</title><content type="html">I have a PowerShell script that uses &lt;a href="http://www.oracle.com/technology/software/tech/windows/odpnet/index.html" target="_blank"&gt;Oracle.DataAccess&lt;/a&gt;. It retrieves its connection information from an existing configuration file on a server. The connection information is as basic as you can get: Data Source, User Id, Password. I had already successfully installed and executed the script on a development server but received the following error when I attempted to run the script on my test server: "ORA-12505: TNS:listener does not currently know of SID given in connect descriptor".&lt;br /&gt;
&lt;br /&gt;
I was baffled. The test server is an application server that has been running in good order for a couple of years. The application that runs on it (let's call it SERVICE) successfully talks to the "missing" database almost continuously. The TNSNAMES file on the test server contains a single entry, and I knew that entry was valid because SERVICE was up and running.&lt;br /&gt;
&lt;br /&gt;
I immediately started checking event logs, experimenting with case sensitivity in the connection string and the PowerShell script, and tweaking environment variables. I executed the relevant steps from the script in the PowerShell console. I scoured the server's file system for extra TNSNAMES.ORA files but found only the one that I expected. I stopped SERVICE in case it was somehow blocking my script's database calls. To make the issue even more confounding, I could specify a Data Source that wasn't even listed in the TNSNAMES file and I could then open the OracleConnection!&lt;br /&gt;
&lt;br /&gt;
After several hours I gave up. I returned to the problem over a week later with a strange notion to check any mapped network drives. I've got a default mapped drive created (I assume) when my domain account was created. Looking in this drive I had a Eureka! moment: an old TNSNAMES file from my development machine that was full of entries. Suddenly it all made sense: I could connect to databases not present in the test server's TNSNAMES file because the entries were present in the 'network' TNSNAMES file. And, conversely, I couldn't connect to the test server's TNS entry because the port value had changed in the past couple of months and my 'network' TNSNAMES file had the old, invalid port.&lt;br /&gt;
&lt;br /&gt;
What I had expected to be a trivial smoke test turned out to be much, much more.  There's a lesson in here somewhere. The obvious one is that I probably should have initially started off configuring the script with the credentials with which it will be used in production. Another lesson is that software development can be maddeningly frustrating and that sometimes you just have to walk away. We don't all have the luxury of time that I did during this exercise, but sometimes some distance from a problem really brings clarity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-1602589143771459596?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_zKH68CrKIZATLs_8OKy4UMZMJQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_zKH68CrKIZATLs_8OKy4UMZMJQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_zKH68CrKIZATLs_8OKy4UMZMJQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_zKH68CrKIZATLs_8OKy4UMZMJQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/_OxjyjLeNV4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/1602589143771459596/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2009/11/phantom-tnsnames-entries.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1602589143771459596?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/1602589143771459596?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/_OxjyjLeNV4/phantom-tnsnames-entries.html" title="Phantom TNSNAMES entries" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2009/11/phantom-tnsnames-entries.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQAR3Y5eyp7ImA9WxNVE00.&quot;"><id>tag:blogger.com,1999:blog-1939334038833612724.post-4914894711757313651</id><published>2009-10-23T10:20:00.002-04:00</published><updated>2009-10-23T10:32:26.823-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-23T10:32:26.823-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><title>Visual Studio 2010 Beta1 uninstall</title><content type="html">There's a new &lt;a href="http://msdn.microsoft.com/en-us/vstudio/default.aspx" target="_blank"&gt;Visual Studio 2010&lt;/a&gt; beta available. I wanted to see if the problems that I've experienced using &lt;a href="http://www.teamfuze.net" target="_blank"&gt;TeamFuze&lt;/a&gt; with beta 1 were still present in the new bits. I hit what seemed to be a showstopper uninstalling from Windows 7 Professional x64: a prompt for the media installation path so that the 'TFS Object Model' could be removed. Uh-oh, I thought- I had just deleted the installation iso file AND recycled. I thought for a moment that I was either going to have to pull out a file undelete tool or download the beta 1 again. &lt;br /&gt;&lt;br /&gt;Luckily, I found &lt;a href="http://www.hanselman.com/blog/VistaUsersUninstallVisualStudio2010Beta1BeforeUpgradingToWindows7.aspx" target="_blank"&gt;Scott Hanselman's post&lt;/a&gt; and was able to uninstall beta 1 without resorting to extraordinary measures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1939334038833612724-4914894711757313651?l=bryantbrabson.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/256_-u5jXbJhUpJaUsN7YiXYThg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/256_-u5jXbJhUpJaUsN7YiXYThg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/256_-u5jXbJhUpJaUsN7YiXYThg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/256_-u5jXbJhUpJaUsN7YiXYThg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/BryantBrabson/~4/b8Xx5DAm5Hc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bryantbrabson.blogspot.com/feeds/4914894711757313651/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bryantbrabson.blogspot.com/2009/10/visual-studio-2010-beta1-uninstall.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/4914894711757313651?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1939334038833612724/posts/default/4914894711757313651?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BryantBrabson/~3/b8Xx5DAm5Hc/visual-studio-2010-beta1-uninstall.html" title="Visual Studio 2010 Beta1 uninstall" /><author><name>Bryant</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://bryantbrabson.blogspot.com/2009/10/visual-studio-2010-beta1-uninstall.html</feedburner:origLink></entry></feed>

