<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Adam Salvo(z) Blog</title>
    <link>http://blog.salvoz.com/</link>
    <description>Powerd by dasBlog</description>
    <language>en-us</language>
    <copyright>Adam Salvo</copyright>
    <lastBuildDate>Tue, 26 Aug 2008 03:08:25 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>adam@salvoz.com</managingEditor>
    <webMaster>adam@salvoz.com</webMaster>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/SalvoZ" type="application/rss+xml" /><item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=ef57ab8a-0012-4717-b648-1d5ac8338904</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,ef57ab8a-0012-4717-b648-1d5ac8338904.aspx</pingback:target>
      <dc:creator>Adam</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,ef57ab8a-0012-4717-b648-1d5ac8338904.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ef57ab8a-0012-4717-b648-1d5ac8338904</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today, Jeff Atwood posted about a <a href="http://www.codinghorror.com/blog/archives/001166.html">deadlock</a> issue
he was having. He had a couple of ideas as to how to solve his issue, including the
nolock statement. What I found most interesting were the comments that followed. Here
is a summary:
</p>
        <ul>
          <li>
SQL Server sucks 
</li>
          <li>
NoLock is ok 
</li>
          <li>
NoLock is a hack 
</li>
          <li>
I can’t believe you don’t/didn’t know how to fix a dead lock</li>
        </ul>
        <p>
I can’t believe how critical people were of Jeff. I guess I was a little surprised
that the author of the great Coding Horror didn’t know the answer to something, but
that’s no reason to be critical of the guy. 
</p>
        <p>
A couple of the more decent links included:
</p>
        <ul>
          <li>
            <a title="http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx" href="http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx">http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx</a>
          </li>
          <li>
            <a title="http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html" href="http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html">http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html</a>
          </li>
        </ul>
        <p>
We have a couple of deadlock issues in our current database that I’d like to sit down
and fix, so these might come in handy. 
</p>
        <p>
Update: Someone who knows allot more about SQL posted a <a href="http://www.samsaffron.com/archive/2008/08/27/Deadlocked+">blog
entry</a> in response to Jeff’s original post. The author believes that using nolock
is never a good idea and goes on to give some advice on how to start solving deadlock
issues.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=ef57ab8a-0012-4717-b648-1d5ac8338904" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>SQL Deadlocks</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,ef57ab8a-0012-4717-b648-1d5ac8338904.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SalvoZ/~3/374847162/SQLDeadlocks.aspx</link>
      <pubDate>Tue, 26 Aug 2008 03:08:25 GMT</pubDate>
      <description>&lt;p&gt;
Today, Jeff Atwood posted about a &lt;a href="http://www.codinghorror.com/blog/archives/001166.html"&gt;deadlock&lt;/a&gt; issue
he was having. He had a couple of ideas as to how to solve his issue, including the
nolock statement. What I found most interesting were the comments that followed. Here
is a summary:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
SQL Server sucks 
&lt;li&gt;
NoLock is ok 
&lt;li&gt;
NoLock is a hack 
&lt;li&gt;
I can’t believe you don’t/didn’t know how to fix a dead lock&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I can’t believe how critical people were of Jeff. I guess I was a little surprised
that the author of the great Coding Horror didn’t know the answer to something, but
that’s no reason to be critical of the guy. 
&lt;/p&gt;
&lt;p&gt;
A couple of the more decent links included:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a title="http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx" href="http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx"&gt;http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx&lt;/a&gt; 
&lt;li&gt;
&lt;a title="http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html" href="http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html"&gt;http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
We have a couple of deadlock issues in our current database that I’d like to sit down
and fix, so these might come in handy. 
&lt;/p&gt;
&lt;p&gt;
Update: Someone who knows allot more about SQL posted a &lt;a href="http://www.samsaffron.com/archive/2008/08/27/Deadlocked+"&gt;blog
entry&lt;/a&gt; in response to Jeff’s original post. The author believes that using nolock
is never a good idea and goes on to give some advice on how to start solving deadlock
issues.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=ef57ab8a-0012-4717-b648-1d5ac8338904" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,ef57ab8a-0012-4717-b648-1d5ac8338904.aspx</comments>
      <category>Technology/Review For Future Projects</category>
      <category>Technology/Sql</category>
    <feedburner:origLink>http://blog.salvoz.com/2008/08/26/SQLDeadlocks.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=94b0ef79-8b69-414e-a82e-70a25a9fcb1e</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,94b0ef79-8b69-414e-a82e-70a25a9fcb1e.aspx</pingback:target>
      <dc:creator>Adam</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,94b0ef79-8b69-414e-a82e-70a25a9fcb1e.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=94b0ef79-8b69-414e-a82e-70a25a9fcb1e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’ve been looking at a couple of the new technologies that were released with .Net
3.5 SP1, mainly the Entity Framework (EF), and ADO.Net Data Services ADNS). I happen
to look at ADO.Net Data Services first, and it seemed to look pretty good on paper.
There was a reference to the Entity Framework in that Data Services uses the Entity
Model (EM) from EF to provide the data access layer.
</p>
        <p>
Last night I started searching for more information on the Entity Framework, and instead
of finding examples, best practices, etc, I found a battle waging between the Creators/Supports
of the Entity Framework and people practicing what I have come to know as Alt.Net. 
</p>
        <p>
I am using the term Alt.Net to refer to ideas and concepts such as Domain Driven Design
(DDD), Test Driven Development (TDD), Agile, Plain Old CLR Objects (POCO), Persistence
Ignorance (PI), and nHibernate (as there is allot of comparison made to the EF). I
should also note that the ideas and concepts listed are not entirely specific to .Net,
nor is this a complete list. Furthermore, you could be a practitioner of Alt.Net and
completely support EF.
</p>
        <p>
To get an idea of where the Alt.Net crowd is coming from you should start off by reading
the <a href="http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/">Vote
of No Confidence</a> on WuFoo. Then simply Google for Entity Framework and you will
see all sorts of competing opinions. F<a href="http://weblogs.asp.net/fbouma/">rans
Bouma</a>, creator of LLBLGen Pro, has a couple of posts (<a href="http://weblogs.asp.net/fbouma/archive/2008/08/20/quot-the-entity-data-model-is-much-bigger-than-just-an-orm-quot-stephen-forte.aspx">here</a>,
and <a href="http://weblogs.asp.net/fbouma/archive/2008/05/19/why-use-the-entity-framework-yeah-why-exactly.aspx">here</a>)
that I think show he is against the EF, but for slightly difference reasons then the
Alt.Net crowd. Here are some of the top Pros and Cons I’ve found.
</p>
        <p>
Pros:
</p>
        <ol>
          <li>
It’s support by Microsoft, and as such, will gather much momentum and community support</li>
          <li>
It’s good enough for X% (usually stated as greater then 50%) of software projects
out there.</li>
          <li>
GUI editor/mapper makes it easier to use then other ORM tools like nHibernate</li>
          <li>
EF is part of a larger push by Microsoft to provide technologies that focus on an
Entity Model (See Ado.Net Data Services)</li>
        </ol>
        <p>
Cons:
</p>
        <ol>
          <li>
No support for POCO’s and Persistent Ignorance</li>
          <li>
Hard (or impossible) to develop using a Domain Driven Design, or Test Driven Design
methodology</li>
          <li>
Single model/mapping file introduces merge conflicts in a source control environment</li>
          <li>
No additional functionality of products like nHibernate</li>
        </ol>
        <p>
I kind of see Pro #1 being the cornerstone to the argument. I feel that the Alt.Net
crowd knows that EF has a good chance to become the defacto standard, and that they
will be forced by their clients and employers to use it. As such, they are trying
to point out some of it’s short comings to Microsoft in hopes that if it does become
the defacto standard, that it won’t suck (to them) as much.
</p>
        <p>
The EF team has been very open with the community, and reading posts leading up to
the release of the EF, you can already see that the team was listening to the community.
They introduced something called IPOCO, which removed the requirement that Entity
classes implement a base class, and instead implement interfaces. This pleased some,
while it annoyed others, since it still breaks true Persistent Ignorance.  I
feel it’s a step in the right direction.
</p>
        <p>
There are other indications that V2 of the EF will introduce true Persistant Ignorance,
although the EF team usually talks about a performance hit (and it sounds like it
could be a big performance hit) if you want to go the POCO route. The reason for this
is the lack of the EntityKey field in a POCO object, which is used in subsequent operations
after an entity is retrieved from the framework.
</p>
        <p>
Overall, I find myself smack dab in the middle of the two camps. I’ve been trying
to explore and learn more about Alt.Net, while at the same time keeping up on the
latest from Microsoft. I’ve come up with the following guidelines for myself.
</p>
        <ol>
          <li>
Since EF is not support in Compact Framework, and I need to write business entities
for the Compact Framework, or one’s that can be used in both the Full and Compact
Frameworks, EF is out (so is nHibernate for that matter). 
</li>
          <li>
If I need to work on a new back end application that is going to be using SQL server
exclusively (there is support for other data stores in EF), then EF might not be a
bad way to go. 
</li>
          <li>
If I need to work on an existing back end application, I don’t think it’s worth the
time to switch to EF yet, as it’s still a V1 product. 
</li>
        </ol>
        <p>
In the near term, I see my self doing some CF programming, as well as some one-off
programming against our backend, which gives me a nice blend I guess. I’ll get to
play around with EF some, and keep exploring the ideas of Alt.Net.
</p>
        <p>
One final item I’d like to point out is the <a href="http://www.codeplex.com/efcontrib">Entity
Framework Contrib Project</a> on CodePlex. While it hasn’t had a release since before
RTM of the EF, it does provide some very interesting additions to the EF. The one
that interests me the most, might just in fact be the bridge between the EF and POCO
that everyone is looking for. Using <a href="http://www.postsharp.org">PostSharp</a>,
the IPOCO interfaces are implemented at compile time, thus keeping your entities persistent
Ignorant. The trade off is that you have to add some attributes to your code, but
at least you could add these conditionally, which would help with the CF/FF issues
I have. 
</p>
        <p>
Unfortunately the main contributor has taken a job and Microsoft on the SilverLight
team, and in response to the EF’s team to add POCO support, has lost some of his interest
in the project. I really like the post compile time option that the contrib project
uses, as it seems to address the performance hit that the EF team says their POCO
solution will have.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=94b0ef79-8b69-414e-a82e-70a25a9fcb1e" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Holy War - .Net Entity Framework</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,94b0ef79-8b69-414e-a82e-70a25a9fcb1e.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SalvoZ/~3/372930255/HolyWarNetEntityFramework.aspx</link>
      <pubDate>Sat, 23 Aug 2008 19:51:13 GMT</pubDate>
      <description>&lt;p&gt;
I’ve been looking at a couple of the new technologies that were released with .Net
3.5 SP1, mainly the Entity Framework (EF), and ADO.Net Data Services ADNS). I happen
to look at ADO.Net Data Services first, and it seemed to look pretty good on paper.
There was a reference to the Entity Framework in that Data Services uses the Entity
Model (EM) from EF to provide the data access layer.
&lt;/p&gt;
&lt;p&gt;
Last night I started searching for more information on the Entity Framework, and instead
of finding examples, best practices, etc, I found a battle waging between the Creators/Supports
of the Entity Framework and people practicing what I have come to know as Alt.Net. 
&lt;/p&gt;
&lt;p&gt;
I am using the term Alt.Net to refer to ideas and concepts such as Domain Driven Design
(DDD), Test Driven Development (TDD), Agile, Plain Old CLR Objects (POCO), Persistence
Ignorance (PI), and nHibernate (as there is allot of comparison made to the EF). I
should also note that the ideas and concepts listed are not entirely specific to .Net,
nor is this a complete list. Furthermore, you could be a practitioner of Alt.Net and
completely support EF.
&lt;/p&gt;
&lt;p&gt;
To get an idea of where the Alt.Net crowd is coming from you should start off by reading
the &lt;a href="http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/"&gt;Vote
of No Confidence&lt;/a&gt; on WuFoo. Then simply Google for Entity Framework and you will
see all sorts of competing opinions. F&lt;a href="http://weblogs.asp.net/fbouma/"&gt;rans
Bouma&lt;/a&gt;, creator of LLBLGen Pro, has a couple of posts (&lt;a href="http://weblogs.asp.net/fbouma/archive/2008/08/20/quot-the-entity-data-model-is-much-bigger-than-just-an-orm-quot-stephen-forte.aspx"&gt;here&lt;/a&gt;,
and &lt;a href="http://weblogs.asp.net/fbouma/archive/2008/05/19/why-use-the-entity-framework-yeah-why-exactly.aspx"&gt;here&lt;/a&gt;)
that I think show he is against the EF, but for slightly difference reasons then the
Alt.Net crowd. Here are some of the top Pros and Cons I’ve found.
&lt;/p&gt;
&lt;p&gt;
Pros:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
It’s support by Microsoft, and as such, will gather much momentum and community support&lt;/li&gt;
&lt;li&gt;
It’s good enough for X% (usually stated as greater then 50%) of software projects
out there.&lt;/li&gt;
&lt;li&gt;
GUI editor/mapper makes it easier to use then other ORM tools like nHibernate&lt;/li&gt;
&lt;li&gt;
EF is part of a larger push by Microsoft to provide technologies that focus on an
Entity Model (See Ado.Net Data Services)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Cons:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
No support for POCO’s and Persistent Ignorance&lt;/li&gt;
&lt;li&gt;
Hard (or impossible) to develop using a Domain Driven Design, or Test Driven Design
methodology&lt;/li&gt;
&lt;li&gt;
Single model/mapping file introduces merge conflicts in a source control environment&lt;/li&gt;
&lt;li&gt;
No additional functionality of products like nHibernate&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
I kind of see Pro #1 being the cornerstone to the argument. I feel that the Alt.Net
crowd knows that EF has a good chance to become the defacto standard, and that they
will be forced by their clients and employers to use it. As such, they are trying
to point out some of it’s short comings to Microsoft in hopes that if it does become
the defacto standard, that it won’t suck (to them) as much.
&lt;/p&gt;
&lt;p&gt;
The EF team has been very open with the community, and reading posts leading up to
the release of the EF, you can already see that the team was listening to the community.
They introduced something called IPOCO, which removed the requirement that Entity
classes implement a base class, and instead implement interfaces. This pleased some,
while it annoyed others, since it still breaks true Persistent Ignorance.&amp;nbsp; I
feel it’s a step in the right direction.
&lt;/p&gt;
&lt;p&gt;
There are other indications that V2 of the EF will introduce true Persistant Ignorance,
although the EF team usually talks about a performance hit (and it sounds like it
could be a big performance hit) if you want to go the POCO route. The reason for this
is the lack of the EntityKey field in a POCO object, which is used in subsequent operations
after an entity is retrieved from the framework.
&lt;/p&gt;
&lt;p&gt;
Overall, I find myself smack dab in the middle of the two camps. I’ve been trying
to explore and learn more about Alt.Net, while at the same time keeping up on the
latest from Microsoft. I’ve come up with the following guidelines for myself.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Since EF is not support in Compact Framework, and I need to write business entities
for the Compact Framework, or one’s that can be used in both the Full and Compact
Frameworks, EF is out (so is nHibernate for that matter). 
&lt;/li&gt;
&lt;li&gt;
If I need to work on a new back end application that is going to be using SQL server
exclusively (there is support for other data stores in EF), then EF might not be a
bad way to go. 
&lt;/li&gt;
&lt;li&gt;
If I need to work on an existing back end application, I don’t think it’s worth the
time to switch to EF yet, as it’s still a V1 product. 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
In the near term, I see my self doing some CF programming, as well as some one-off
programming against our backend, which gives me a nice blend I guess. I’ll get to
play around with EF some, and keep exploring the ideas of Alt.Net.
&lt;/p&gt;
&lt;p&gt;
One final item I’d like to point out is the &lt;a href="http://www.codeplex.com/efcontrib"&gt;Entity
Framework Contrib Project&lt;/a&gt; on CodePlex. While it hasn’t had a release since before
RTM of the EF, it does provide some very interesting additions to the EF. The one
that interests me the most, might just in fact be the bridge between the EF and POCO
that everyone is looking for. Using &lt;a href="http://www.postsharp.org"&gt;PostSharp&lt;/a&gt;,
the IPOCO interfaces are implemented at compile time, thus keeping your entities persistent
Ignorant. The trade off is that you have to add some attributes to your code, but
at least you could add these conditionally, which would help with the CF/FF issues
I have. 
&lt;/p&gt;
&lt;p&gt;
Unfortunately the main contributor has taken a job and Microsoft on the SilverLight
team, and in response to the EF’s team to add POCO support, has lost some of his interest
in the project. I really like the post compile time option that the contrib project
uses, as it seems to address the performance hit that the EF team says their POCO
solution will have.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=94b0ef79-8b69-414e-a82e-70a25a9fcb1e" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,94b0ef79-8b69-414e-a82e-70a25a9fcb1e.aspx</comments>
      <category>Technology/Programming</category>
      <category>Technology/Review For Future Projects</category>
    <feedburner:origLink>http://blog.salvoz.com/2008/08/23/HolyWarNetEntityFramework.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=89e7ce6c-e260-417b-8c7f-1406725b6702</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,89e7ce6c-e260-417b-8c7f-1406725b6702.aspx</pingback:target>
      <dc:creator>Adam</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,89e7ce6c-e260-417b-8c7f-1406725b6702.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=89e7ce6c-e260-417b-8c7f-1406725b6702</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
With the release of all Visual Studio 2008, TFS 2008, and SQL 2008, I set about upgrading
I set about upgrading my main development laptop. Currently I have VS 2008, Team Explorer
2008 and SQL 2005 client tools installed. I opted to download the full installer for
the SP1 updates as opposed to the bootstrapper options.
</p>
        <ul>
          <li>
            <a title=".NET Framework 3.5 Service Pack 1 (Full Package)" href="http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe">.NET
Framework 3.5 Service Pack 1 (Full Package)</a>
          </li>
          <li>
            <a href="http://www.microsoft.com/downloads/details.aspx?familyid=27673C47-B3B5-4C67-BD99-84E525B5CE61&amp;displaylang=en">Visual
Studio 2008 SP1 (Full Package ISO)</a> - <a href="http://support.microsoft.com/kb/945140">Change
List</a>  
</li>
          <li>
            <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9e40a5b6-da41-43a2-a06d-3cee196bfe3d&amp;DisplayLang=en">TFS
2008 SP1 (Full Installer)</a>
          </li>
        </ul>
        <p>
I knew I needed to install VS 2008 SP1 prior to TFS 2008 SP1, but for some reason
decided to go with the SQL upgrade first. As I mentioned before, I currently only
have the client tools installed, as I like to keep my SQL servers on virtualized development
servers. 
</p>
        <p>
The SQL 2008 installer starts off by checking for .Net 3.5 SP1, and if it does not
exist, it will install it on your machine, along with a hotfix for windows installer.
After this is complete, you are required to reboot your machine. I opted for the upgrade
option, hoping that everything just works. I’m not sure if you can do a side by side
install with SQL 2005 client tools and 2008. 
</p>
        <p>
After selecting my options, an upgrade check is preformed, and it failed because I
have not installed VS 2008 SP1 yet. OK, I wanted to install that anyway, so I canceled
out and launched the VS 2008 SP1 installer. As with most service packs for Visual
Studio it takes awhile to apply, but my experience was more positive then the service
packs for VS 2005. No reboot was required, so I moved onto the TFS 2008 SP1 install.
</p>
        <p>
So I must have mis-understood or did not read something with the TFS 2008 SP1 installer.
It looks like it’s for the server components only, and VS 2008 SP1 handles upgrades
to Team Explorer as well. This <a href="http://www.woodwardweb.com/tfs/000444.html">blog
post</a> makes reference to this, and even says that if you are installing Team Explorer
on your TFS server, to install VS 2008 SP1. Looking at Help/About Microsoft Visual
Studio, I see the version number for VS 2008 is now 9.0.30729.1 SP, and looking at
the details for Team Explorer shows the same version number.
</p>
        <p>
Jumping back to the SQL 2008 installer, I proceeding with my update. However it wasn’t
really an update as much as it was a side by side install. Remember, I was just doing
the client tools, had I had the database components installed, I assume that those
would have been upgraded. I have a couple of SQL 2005 instances I can try an upgrade
on to see what happens. The install went very smoothly and there were no issues.
</p>
        <p>
First impressions of the new SQL Management studio are extremely positive. I saw the
intelli-sense demo at the launch event, but can’t really test it as I already have
SQL Prompt installed. My job as a Pseudo-DBA just got easier.Here are some new features
I found. 
</p>
        <ul>
          <li>
When running queries, you can view the results in traditional grid view, but also
as text (with options to choose your column delimiters), or export to a text (.rpt)
file. 
</li>
          <li>
The new activity monitor actually provides useful information (well alot more information
then the old one ever did). It reminds me of the task manager in Windows Server 2008.
The new activity monitor does not work with SQL 2000, but I will be eliminating all
SQL 2000 boxes by the end of September. As 4 line graphs across the top you get %
Processor time, Waiting Tasks, Database I/O and Batch Requests/Sec. On the bottom
you get 4 collapsible lists: Processes, Resource Waits, Data File I/O and Recent Expensive
Queries. 
</li>
          <li>
The database publishing wizard from Visual Studio is now included. Actually there
are a lot more options to control how your scripts are generated. 
</li>
          <li>
There are some very nice default reports built in now as well. The reports were an
add-on for SQL 2005, but they are now included (and you can of course write your own).
Stuff like Disk Usage, Index Usage, etc. I hope I can find a way to schedule these
to be emailed. 
</li>
          <li>
New option to generate Create and Drop Script (along with the original separate options
of generate create and generate drop). There is also an option to generate as SQL
Agent job.</li>
        </ul>
        <p>
Finally I went ahead and upgraded our TFS server to SP1. First thing I did was install
this month’s Windows Updates, as I was going to have to reboot anyway. Next up was
Visual Studio 2008 SP1, as I have VS and Team Explorer installed. Unfortunately I
was out of room on my system drive so I had to take the extra step of expanding my
virtual hard disk first. 
</p>
        <p>
I rebooted the server, and then proceeded to install TFS 2008 SP1. It looked like
everything was going good, but it failed at some point. Turns out the SQL server did
not survive the reboot, VS 2008 SP1, or the system drive expansion. Somehow my mssqlsystemresource.ldf
file got messed up at some point. The event log error stated “One or more files do
not match the primary file of the database.”. I got better information out of the
SQL error log which pointed me right to the System Resource ldf. I copied the ldf
file from another SQL 2005 server and was back in business. The TFS update proceeded
without incident after that. In case you are wondering, you can determine your TFS
version by looking at the version of Microsoft.TeamFoundation.Server.dll in %Program
Files%\Microsoft Visual Studio 2008 Team Foundation Server\Web Services\Services\bin.
For SP1, the version number matches that which is displayed in Visual Studio 2008,
or 9.0.30729.1.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=89e7ce6c-e260-417b-8c7f-1406725b6702" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Installing Visual Studio 2008 SP1, TFS 2008 SP1 and SQL 2008 RTM</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,89e7ce6c-e260-417b-8c7f-1406725b6702.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SalvoZ/~3/366916028/InstallingVisualStudio2008SP1TFS2008SP1AndSQL2008RTM.aspx</link>
      <pubDate>Sun, 17 Aug 2008 00:00:32 GMT</pubDate>
      <description>&lt;p&gt;
With the release of all Visual Studio 2008, TFS 2008, and SQL 2008, I set about upgrading
I set about upgrading my main development laptop. Currently I have VS 2008, Team Explorer
2008 and SQL 2005 client tools installed. I opted to download the full installer for
the SP1 updates as opposed to the bootstrapper options.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a title=".NET Framework 3.5 Service Pack 1 (Full Package)" href="http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe"&gt;.NET
Framework 3.5 Service Pack 1 (Full Package)&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=27673C47-B3B5-4C67-BD99-84E525B5CE61&amp;amp;displaylang=en"&gt;Visual
Studio 2008 SP1 (Full Package ISO)&lt;/a&gt; - &lt;a href="http://support.microsoft.com/kb/945140"&gt;Change
List&lt;/a&gt;&amp;nbsp; 
&lt;li&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9e40a5b6-da41-43a2-a06d-3cee196bfe3d&amp;amp;DisplayLang=en"&gt;TFS
2008 SP1 (Full Installer)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I knew I needed to install VS 2008 SP1 prior to TFS 2008 SP1, but for some reason
decided to go with the SQL upgrade first. As I mentioned before, I currently only
have the client tools installed, as I like to keep my SQL servers on virtualized development
servers. 
&lt;/p&gt;
&lt;p&gt;
The SQL 2008 installer starts off by checking for .Net 3.5 SP1, and if it does not
exist, it will install it on your machine, along with a hotfix for windows installer.
After this is complete, you are required to reboot your machine. I opted for the upgrade
option, hoping that everything just works. I’m not sure if you can do a side by side
install with SQL 2005 client tools and 2008. 
&lt;/p&gt;
&lt;p&gt;
After selecting my options, an upgrade check is preformed, and it failed because I
have not installed VS 2008 SP1 yet. OK, I wanted to install that anyway, so I canceled
out and launched the VS 2008 SP1 installer. As with most service packs for Visual
Studio it takes awhile to apply, but my experience was more positive then the service
packs for VS 2005. No reboot was required, so I moved onto the TFS 2008 SP1 install.
&lt;/p&gt;
&lt;p&gt;
So I must have mis-understood or did not read something with the TFS 2008 SP1 installer.
It looks like it’s for the server components only, and VS 2008 SP1 handles upgrades
to Team Explorer as well. This &lt;a href="http://www.woodwardweb.com/tfs/000444.html"&gt;blog
post&lt;/a&gt; makes reference to this, and even says that if you are installing Team Explorer
on your TFS server, to install VS 2008 SP1. Looking at Help/About Microsoft Visual
Studio, I see the version number for VS 2008 is now 9.0.30729.1 SP, and looking at
the details for Team Explorer shows the same version number.
&lt;/p&gt;
&lt;p&gt;
Jumping back to the SQL 2008 installer, I proceeding with my update. However it wasn’t
really an update as much as it was a side by side install. Remember, I was just doing
the client tools, had I had the database components installed, I assume that those
would have been upgraded. I have a couple of SQL 2005 instances I can try an upgrade
on to see what happens. The install went very smoothly and there were no issues.
&lt;/p&gt;
&lt;p&gt;
First impressions of the new SQL Management studio are extremely positive. I saw the
intelli-sense demo at the launch event, but can’t really test it as I already have
SQL Prompt installed. My job as a Pseudo-DBA just got easier.Here are some new features
I found. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
When running queries, you can view the results in traditional grid view, but also
as text (with options to choose your column delimiters), or export to a text (.rpt)
file. 
&lt;li&gt;
The new activity monitor actually provides useful information (well alot more information
then the old one ever did). It reminds me of the task manager in Windows Server 2008.
The new activity monitor does not work with SQL 2000, but I will be eliminating all
SQL 2000 boxes by the end of September. As 4 line graphs across the top you get %
Processor time, Waiting Tasks, Database I/O and Batch Requests/Sec. On the bottom
you get 4 collapsible lists: Processes, Resource Waits, Data File I/O and Recent Expensive
Queries. 
&lt;li&gt;
The database publishing wizard from Visual Studio is now included. Actually there
are a lot more options to control how your scripts are generated. 
&lt;li&gt;
There are some very nice default reports built in now as well. The reports were an
add-on for SQL 2005, but they are now included (and you can of course write your own).
Stuff like Disk Usage, Index Usage, etc. I hope I can find a way to schedule these
to be emailed. 
&lt;li&gt;
New option to generate Create and Drop Script (along with the original separate options
of generate create and generate drop). There is also an option to generate as SQL
Agent job.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Finally I went ahead and upgraded our TFS server to SP1. First thing I did was install
this month’s Windows Updates, as I was going to have to reboot anyway. Next up was
Visual Studio 2008 SP1, as I have VS and Team Explorer installed. Unfortunately I
was out of room on my system drive so I had to take the extra step of expanding my
virtual hard disk first. 
&lt;/p&gt;
&lt;p&gt;
I rebooted the server, and then proceeded to install TFS 2008 SP1. It looked like
everything was going good, but it failed at some point. Turns out the SQL server did
not survive the reboot, VS 2008 SP1, or the system drive expansion. Somehow my mssqlsystemresource.ldf
file got messed up at some point. The event log error stated “One or more files do
not match the primary file of the database.”. I got better information out of the
SQL error log which pointed me right to the System Resource ldf. I copied the ldf
file from another SQL 2005 server and was back in business. The TFS update proceeded
without incident after that. In case you are wondering, you can determine your TFS
version by looking at the version of Microsoft.TeamFoundation.Server.dll in %Program
Files%\Microsoft Visual Studio 2008 Team Foundation Server\Web Services\Services\bin.
For SP1, the version number matches that which is displayed in Visual Studio 2008,
or 9.0.30729.1.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=89e7ce6c-e260-417b-8c7f-1406725b6702" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,89e7ce6c-e260-417b-8c7f-1406725b6702.aspx</comments>
      <category>Technology</category>
      <category>Technology/Programming</category>
      <category>Technology/Sql</category>
    <feedburner:origLink>http://blog.salvoz.com/2008/08/17/InstallingVisualStudio2008SP1TFS2008SP1AndSQL2008RTM.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=4092eb38-b984-4ca6-b443-7de71d51dd84</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,4092eb38-b984-4ca6-b443-7de71d51dd84.aspx</pingback:target>
      <dc:creator>Adam</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,4092eb38-b984-4ca6-b443-7de71d51dd84.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=4092eb38-b984-4ca6-b443-7de71d51dd84</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My weekly <a href="http://www.codeproject.com">Code Project</a> newsletter had a link
to a submission which talked about, and rated various Aspect Orientated Programming
(AOP) frameworks for .Net. While I’ve heard about AOP in the past, I haven’t looked
into much. What got me off the side lines, was that one of the .Net AOP frameworks, <a href="http://www.postsharp.org/">Post
Sharp</a>, lists support for the Compact Framework and Silverlight. In my experience,
it is rare to see stuff that actually supports the compact framework, so this is a
welcome change, however I have not tested it out yet. 
</p>
        <p>
Before I dive into Post Sharp anymore then I have, I wanted to read up a bit on AOP. <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming ">WikiPedia</a> has
a good article explaining the AOP using AspectJ as the example language. PostSharp
itself has a an <a href="http://www.postsharp.org/aop.net/">article</a> that focuses
on the .Net Framework as well. 
</p>
        <p>
          <strong>What is Aspect Orientated Programming (AOP)?</strong>
        </p>
        <ul>
          <li>
AOP increases modularity by allowing the separation of cross-cutting concerns 
</li>
          <li>
A concern is a cohesive area of functionality (think encapsulation). 
</li>
          <li>
Cross-Cutting concerns are those concerns which are used in multiple concerns 
</li>
          <li>
Logging is the most typical example of a cross-cutting concern. It itself is a concern
(encapsulated functionality), that is used everywhere in your program.</li>
        </ul>
        <p>
          <strong>Examples of Cross-Cutting Concerns</strong>
        </p>
        <ul>
          <li>
Logging 
</li>
          <li>
Exception Handling 
</li>
          <li>
Tracking is dirty on fields 
</li>
          <li>
Auditing 
</li>
          <li>
Security 
</li>
          <li>
Transactions</li>
        </ul>
        <p>
          <strong>How does it work (based on Post Sharp)</strong>
        </p>
        <ul>
          <li>
Implement cross-cutting concerns as classes creating attributes (implementing various
interfaces in Post Sharp) 
</li>
          <li>
Decorate your code using your attributes. Attributes can be added at the method, field,
class and assembly level. At the class and assembly level you can specify a filter
specify which methods or classes to work on. 
</li>
          <li>
When you compile, Post Sharp performs post build processing injecting code into your
compile MSIL, producing modified MSIL as the final output.</li>
        </ul>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>AOP Frameworks</strong>
        </p>
        <ul>
          <li>
See the <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming#Implementations">Implementations</a> section
of the Wikipedia article.</li>
        </ul>
        <p>
          <strong>Performance</strong>
        </p>
        <p>
I was originally under the impression that by injecting code at compile time, there
would be <em>no</em> performance hit at run time. This is not true, at least in PostSharp
using the simple performance test from the <a href="http://code.google.com/p/postsharp-user-samples/">user
provided samples</a>.
</p>
        <p>
The simple performance test sample shows that AOP using Post Sharp incurs a variable
performance hit. Running the sample application multiple times shows the first time
the post sharp code is hit (view the complied .exe in reflector) it takes 73ms, and
then this drops down to 14 ms, compared to 4 ms for the non PostSharp code. On subsequent
runs, the first access of the post sharp code takes ~21ms and then drops down to 14ms,
while the non PostSharp code remains at 4ms. 
</p>
        <p>
The sample in question uses the works on a field in a class. The aspect (attribute
code) is required to cast an object passed in by the event args to a string. Perhaps
generics could help with performance by eliminating the cast?
</p>
        <p>
          <strong>Final Thoughts</strong>
        </p>
        <p>
AOP and PostSharp look like very powerful tools that I would like to take advantage
of. Learning from my past mistakes, I need to make sure that I take the time to understand
these tools and use them where appropriate and not go overboard with their use. I
think a good first step would be to find, or write some examples that implement some
basic AOP functionality covering all of the cross-cutting concerns identified above. 
</p>
        <p>
The only complaint I have so far is that you have to either install PostSharp on your
computer, or manually edit <em>every</em> project file that needs post processing.
This seems a little heavy handed, but I’m willing to consider it a fair tradeoff.
It just makes it hard to do a strictly x-copy deployment of a project/solution.
</p>
        <p>
I’ve also been reading up on software architecture, including topics on Separation
of Concerns and Loose Coupling. I think it is obvious that AOP can help with the separation
of concerns (it’s pretty much stated in the definition). I also get the feeling that
it could help with loose coupling, but I haven't seen a good example on that yet.
All the examples I have seen would require tight coupling of your aspects (attributes)
to something like log4net (in the logging example).
</p>
        <p>
Finally, I will need to continue to evaluate performance to determine if it’s a fair
tradeoff with increased maintainability of code. I am most concerned on the compact
framework side of things, as the processing power that those apps run on is not as
great as their desktop counterparts. This is not a knock on PostSharp, but just something
to be aware of.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=4092eb38-b984-4ca6-b443-7de71d51dd84" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Intro Aspect Orientated Programming</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,4092eb38-b984-4ca6-b443-7de71d51dd84.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SalvoZ/~3/363993830/IntroAspectOrientatedProgramming.aspx</link>
      <pubDate>Wed, 13 Aug 2008 15:36:47 GMT</pubDate>
      <description>&lt;p&gt;
My weekly &lt;a href="http://www.codeproject.com"&gt;Code Project&lt;/a&gt; newsletter had a link
to a submission which talked about, and rated various Aspect Orientated Programming
(AOP) frameworks for .Net. While I’ve heard about AOP in the past, I haven’t looked
into much. What got me off the side lines, was that one of the .Net AOP frameworks, &lt;a href="http://www.postsharp.org/"&gt;Post
Sharp&lt;/a&gt;, lists support for the Compact Framework and Silverlight. In my experience,
it is rare to see stuff that actually supports the compact framework, so this is a
welcome change, however I have not tested it out yet. 
&lt;/p&gt;
&lt;p&gt;
Before I dive into Post Sharp anymore then I have, I wanted to read up a bit on AOP. &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming "&gt;WikiPedia&lt;/a&gt; has
a good article explaining the AOP using AspectJ as the example language. PostSharp
itself has a an &lt;a href="http://www.postsharp.org/aop.net/"&gt;article&lt;/a&gt; that focuses
on the .Net Framework as well. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What is Aspect Orientated Programming (AOP)?&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
AOP increases modularity by allowing the separation of cross-cutting concerns 
&lt;li&gt;
A concern is a cohesive area of functionality (think encapsulation). 
&lt;li&gt;
Cross-Cutting concerns are those concerns which are used in multiple concerns 
&lt;li&gt;
Logging is the most typical example of a cross-cutting concern. It itself is a concern
(encapsulated functionality), that is used everywhere in your program.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Examples of Cross-Cutting Concerns&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Logging 
&lt;li&gt;
Exception Handling 
&lt;li&gt;
Tracking is dirty on fields 
&lt;li&gt;
Auditing 
&lt;li&gt;
Security 
&lt;li&gt;
Transactions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;How does it work (based on Post Sharp)&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Implement cross-cutting concerns as classes creating attributes (implementing various
interfaces in Post Sharp) 
&lt;li&gt;
Decorate your code using your attributes. Attributes can be added at the method, field,
class and assembly level. At the class and assembly level you can specify a filter
specify which methods or classes to work on. 
&lt;li&gt;
When you compile, Post Sharp performs post build processing injecting code into your
compile MSIL, producing modified MSIL as the final output.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;AOP Frameworks&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
See the &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming#Implementations"&gt;Implementations&lt;/a&gt; section
of the Wikipedia article.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Performance&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I was originally under the impression that by injecting code at compile time, there
would be &lt;em&gt;no&lt;/em&gt; performance hit at run time. This is not true, at least in PostSharp
using the simple performance test from the &lt;a href="http://code.google.com/p/postsharp-user-samples/"&gt;user
provided samples&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The simple performance test sample shows that AOP using Post Sharp incurs a variable
performance hit. Running the sample application multiple times shows the first time
the post sharp code is hit (view the complied .exe in reflector) it takes 73ms, and
then this drops down to 14 ms, compared to 4 ms for the non PostSharp code. On subsequent
runs, the first access of the post sharp code takes ~21ms and then drops down to 14ms,
while the non PostSharp code remains at 4ms. 
&lt;/p&gt;
&lt;p&gt;
The sample in question uses the works on a field in a class. The aspect (attribute
code) is required to cast an object passed in by the event args to a string. Perhaps
generics could help with performance by eliminating the cast?
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Final Thoughts&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
AOP and PostSharp look like very powerful tools that I would like to take advantage
of. Learning from my past mistakes, I need to make sure that I take the time to understand
these tools and use them where appropriate and not go overboard with their use. I
think a good first step would be to find, or write some examples that implement some
basic AOP functionality covering all of the cross-cutting concerns identified above. 
&lt;/p&gt;
&lt;p&gt;
The only complaint I have so far is that you have to either install PostSharp on your
computer, or manually edit &lt;em&gt;every&lt;/em&gt; project file that needs post processing.
This seems a little heavy handed, but I’m willing to consider it a fair tradeoff.
It just makes it hard to do a strictly x-copy deployment of a project/solution.
&lt;/p&gt;
&lt;p&gt;
I’ve also been reading up on software architecture, including topics on Separation
of Concerns and Loose Coupling. I think it is obvious that AOP can help with the separation
of concerns (it’s pretty much stated in the definition). I also get the feeling that
it could help with loose coupling, but I haven't seen a good example on that yet.
All the examples I have seen would require tight coupling of your aspects (attributes)
to something like log4net (in the logging example).
&lt;/p&gt;
&lt;p&gt;
Finally, I will need to continue to evaluate performance to determine if it’s a fair
tradeoff with increased maintainability of code. I am most concerned on the compact
framework side of things, as the processing power that those apps run on is not as
great as their desktop counterparts. This is not a knock on PostSharp, but just something
to be aware of.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=4092eb38-b984-4ca6-b443-7de71d51dd84" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,4092eb38-b984-4ca6-b443-7de71d51dd84.aspx</comments>
      <category>Technology/Programming</category>
    <feedburner:origLink>http://blog.salvoz.com/2008/08/13/IntroAspectOrientatedProgramming.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=0c1d5588-94f0-45e1-82e0-af6e1ae8dc93</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,0c1d5588-94f0-45e1-82e0-af6e1ae8dc93.aspx</pingback:target>
      <dc:creator>Adam</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,0c1d5588-94f0-45e1-82e0-af6e1ae8dc93.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=0c1d5588-94f0-45e1-82e0-af6e1ae8dc93</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I spent the last day and a half trying to figure out why a query using FOR XML AUTO
was returning the wrong result set. Some background is in order. I’m migrating a database
from SQL 2000 to SQL 2005, as well as running the same database created from scripts
on SQL 2005 but in a different environment. Both databases contain the exact same
SQL in the stored procedure that was the source of the problem, but they were returning
different result sets. I even restored the database that worked to the server that
had the non-working database and saw that the database created from scripts was still
working as expected.
</p>
        <p>
I figured there was a database level setting causing the issue, so I opened up the
database properties for both databases and compared them side by side, except I missed
the 3 drop down boxes at the top, specifically the compatibility mode. I finally decided
to run the <a href="http://msdn.microsoft.com/en-us/library/ms144256.aspx">SQL 2005
Update Advisor</a>, which comes on the install media, or available online as a <a href="http://go.microsoft.com/fwlink/?LinkId=45788">download</a>.
After about 10 minutes of checking my database (it was across a remote connection),
it found the exact problem I was having, and the fix was to get rid of my derived
tables, or set the comparability mode to 90. 
</p>
        <p>
From the Upgrade Advisor help, here is an example of my original problem.
</p>
        <p>
Consider the following table:
</p>
        <pre class="csharpcode">
          <span class="kwrd">CREATE</span>
          <span class="kwrd">TABLE</span> Test(id <span class="kwrd">int</span>);
INSERT <span class="kwrd">INTO</span> Test <span class="kwrd">VALUES</span>(1); INSERT <span class="kwrd">INTO</span> Test <span class="kwrd">VALUES</span>(2);</pre>
        <pre class="csharpcode">Now run this query, which produces different results under different compatibility levels.</pre>
        <pre class="csharpcode">
          <span class="kwrd">SELECT</span> * <span class="kwrd">FROM</span> (<span class="kwrd">SELECT</span> a.id <span class="kwrd">AS</span> a,
b.id <span class="kwrd">AS</span> b <span class="kwrd">FROM</span> Test a <span class="kwrd">JOIN</span> Test
b <span class="kwrd">ON</span> a.id=b.id) <span class="kwrd">AS</span> DerivedTest <span class="kwrd">FOR</span> XML
AUTO; </pre>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
 
</p>
        <p>
Under Compatibility Level 80 you get:
</p>
        <blockquote>
          <pre>&lt;a a="1"&gt;&lt;b b="1"/&gt;&lt;/a&gt;&lt;a a="2"&gt;&lt;b b="2"/&gt;&lt;/a&gt;</pre>
        </blockquote>
        <p>
Under Compatibility Level 90 you get:
</p>
        <blockquote>
          <pre>&lt;DerivedTest a="1" b="1"/&gt;&lt;DerivedTest a="2" b="2"/&gt;</pre>
        </blockquote>
        <p>
The XML under Level 90 is what I was looking for. Remmeber, under SQL 2000, the same
query worked fine, it was only under SQL 2005 with Level 80 that I started having
problems.
</p>
        <p>
Of course after switching to level 90 I found another bug, and wouldn’t you know it,
the compatibility wizard told me about this one as well, I just felt like ignoring
it at first. This time it was a problem with a table prefix in an order by clause.
Funny thing is, the table prefix didn’t even exist in the stored procedure, but under
SQL 2000 it worked fine. Turns out someone else had already fixed the issue in the
SQL 2005 version.
</p>
        <p>
While looking for the stored procedure in error (since at first I ignored the warning
in the upgrade advisor which even told me what stored procedure), I found a quick
way to search stored procedures and functions in SQL 2005.
</p>
        <pre class="csharpcode">
          <span class="kwrd">SELECT</span> ROUTINE_NAME, ROUTINE_DEFINITION <span class="kwrd">FROM</span> INFORMATION_SCHEMA.ROUTINES <span class="kwrd">WHERE</span> ROUTINE_DEFINITION <span class="kwrd">LIKE</span><span class="str">'%SearchString%'</span></pre>
        <p>
          <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        </p>
        <p>
Lesson of the day, try using and paying attention to the tools that Microsoft gives
you.
</p>
        <p>
          <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        </p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=0c1d5588-94f0-45e1-82e0-af6e1ae8dc93" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Sql 2000 to Sql 2005 upgrade FOR XML problem</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,0c1d5588-94f0-45e1-82e0-af6e1ae8dc93.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SalvoZ/~3/360586897/Sql2000ToSql2005UpgradeFORXMLProblem.aspx</link>
      <pubDate>Sat, 09 Aug 2008 21:13:25 GMT</pubDate>
      <description>&lt;p&gt;
I spent the last day and a half trying to figure out why a query using FOR XML AUTO
was returning the wrong result set. Some background is in order. I’m migrating a database
from SQL 2000 to SQL 2005, as well as running the same database created from scripts
on SQL 2005 but in a different environment. Both databases contain the exact same
SQL in the stored procedure that was the source of the problem, but they were returning
different result sets. I even restored the database that worked to the server that
had the non-working database and saw that the database created from scripts was still
working as expected.
&lt;/p&gt;
&lt;p&gt;
I figured there was a database level setting causing the issue, so I opened up the
database properties for both databases and compared them side by side, except I missed
the 3 drop down boxes at the top, specifically the compatibility mode. I finally decided
to run the &lt;a href="http://msdn.microsoft.com/en-us/library/ms144256.aspx"&gt;SQL 2005
Update Advisor&lt;/a&gt;, which comes on the install media, or available online as a &lt;a href="http://go.microsoft.com/fwlink/?LinkId=45788"&gt;download&lt;/a&gt;.
After about 10 minutes of checking my database (it was across a remote connection),
it found the exact problem I was having, and the fix was to get rid of my derived
tables, or set the comparability mode to 90. 
&lt;/p&gt;
&lt;p&gt;
From the Upgrade Advisor help, here is an example of my original problem.
&lt;/p&gt;
&lt;p&gt;
Consider the following table:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; Test(id &lt;span class="kwrd"&gt;int&lt;/span&gt;);
INSERT &lt;span class="kwrd"&gt;INTO&lt;/span&gt; Test &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(1); INSERT &lt;span class="kwrd"&gt;INTO&lt;/span&gt; Test &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(2);&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;Now run this query, which produces different results under different compatibility levels.&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; a.id &lt;span class="kwrd"&gt;AS&lt;/span&gt; a,
b.id &lt;span class="kwrd"&gt;AS&lt;/span&gt; b &lt;span class="kwrd"&gt;FROM&lt;/span&gt; Test a &lt;span class="kwrd"&gt;JOIN&lt;/span&gt; Test
b &lt;span class="kwrd"&gt;ON&lt;/span&gt; a.id=b.id) &lt;span class="kwrd"&gt;AS&lt;/span&gt; DerivedTest &lt;span class="kwrd"&gt;FOR&lt;/span&gt; XML
AUTO; &lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Under Compatibility Level 80 you get:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;a a="1"&amp;gt;&amp;lt;b b="1"/&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a a="2"&amp;gt;&amp;lt;b b="2"/&amp;gt;&amp;lt;/a&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Under Compatibility Level 90 you get:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;DerivedTest a="1" b="1"/&amp;gt;&amp;lt;DerivedTest a="2" b="2"/&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The XML under Level 90 is what I was looking for. Remmeber, under SQL 2000, the same
query worked fine, it was only under SQL 2005 with Level 80 that I started having
problems.
&lt;/p&gt;
&lt;p&gt;
Of course after switching to level 90 I found another bug, and wouldn’t you know it,
the compatibility wizard told me about this one as well, I just felt like ignoring
it at first. This time it was a problem with a table prefix in an order by clause.
Funny thing is, the table prefix didn’t even exist in the stored procedure, but under
SQL 2000 it worked fine. Turns out someone else had already fixed the issue in the
SQL 2005 version.
&lt;/p&gt;
&lt;p&gt;
While looking for the stored procedure in error (since at first I ignored the warning
in the upgrade advisor which even told me what stored procedure), I found a quick
way to search stored procedures and functions in SQL 2005.
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; ROUTINE_NAME, ROUTINE_DEFINITION &lt;span class="kwrd"&gt;FROM&lt;/span&gt; INFORMATION_SCHEMA.ROUTINES &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; ROUTINE_DEFINITION &lt;span class="kwrd"&gt;LIKE&lt;/span&gt; &lt;span class="str"&gt;'%SearchString%'&lt;/span&gt; &lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;
Lesson of the day, try using and paying attention to the tools that Microsoft gives
you.
&lt;/p&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=0c1d5588-94f0-45e1-82e0-af6e1ae8dc93" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,0c1d5588-94f0-45e1-82e0-af6e1ae8dc93.aspx</comments>
      <category>Technology/Sql</category>
    <feedburner:origLink>http://blog.salvoz.com/2008/08/09/Sql2000ToSql2005UpgradeFORXMLProblem.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=3fbb1539-d3b2-4f3f-9935-694738a72f60</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,3fbb1539-d3b2-4f3f-9935-694738a72f60.aspx</pingback:target>
      <dc:creator>Adam</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,3fbb1539-d3b2-4f3f-9935-694738a72f60.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=3fbb1539-d3b2-4f3f-9935-694738a72f60</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Late last year I posted briefly on the <a href="http://blog.salvoz.com/2007/12/27/SqlPublishingWizard.aspx">SQL
Publishing Wizard</a>. I haven’t had a need for this since I reformatted and installed
Server 2008 64 bit as my main workstation at work, and wouldn’t you know it, it’s
not there now.
</p>
        <p>
As usual I headed off to Google and found some posts that pointed to this install
path, C:\Program Files\Microsoft SQL Server\90\Tools\Publishing\1.2. Seeing as I am
running a 64 bit Windows OS, my path is actually C:\Program Files (x86)\Microsoft
SQL Server\90\Tools\Publishing\1.2. Now you could just run SqlPubWiz.exe, or run the
VSInt.reg file to add the context menu option in Visual Studio 2008.
</p>
        <p>
Not so fast, the registry file doesn’t seem to work as is on a 74 bit OS due to the
new subkey, Wow6432Node. I modified VSInet.reg to include the keys the Wow6432node,
and in the end got my Publish to Provider context menu option back.
</p>
        <blockquote>
          <p>
Windows Registry Editor Version 5.00 
</p>
          <p>
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VWDExpress\9.0\Menus]<br />
"{40d75537-ce10-4311-a7b0-6b164d80405d}"=",1000,1"<br />
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Menus]<br />
"{40d75537-ce10-4311-a7b0-6b164d80405d}"=",1000,1" 
</p>
          <p>
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VWDExpress\9.0\Menus]<br />
"{40d75537-ce10-4311-a7b0-6b164d80405d}"=",1000,1"<br />
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Menus]<br />
"{40d75537-ce10-4311-a7b0-6b164d80405d}"=",1000,1"
</p>
        </blockquote>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <pre class="c#" name="code"> </pre>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=3fbb1539-d3b2-4f3f-9935-694738a72f60" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Installing SQL Publishing Wizard for Visual Studio 2008 on a 64bit OS</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,3fbb1539-d3b2-4f3f-9935-694738a72f60.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SalvoZ/~3/349578590/InstallingSQLPublishingWizardForVisualStudio2008OnA64bitOS.aspx</link>
      <pubDate>Tue, 29 Jul 2008 16:10:48 GMT</pubDate>
      <description>&lt;p&gt;
Late last year I posted briefly on the &lt;a href="http://blog.salvoz.com/2007/12/27/SqlPublishingWizard.aspx"&gt;SQL
Publishing Wizard&lt;/a&gt;. I haven’t had a need for this since I reformatted and installed
Server 2008 64 bit as my main workstation at work, and wouldn’t you know it, it’s
not there now.
&lt;/p&gt;
&lt;p&gt;
As usual I headed off to Google and found some posts that pointed to this install
path, C:\Program Files\Microsoft SQL Server\90\Tools\Publishing\1.2. Seeing as I am
running a 64 bit Windows OS, my path is actually C:\Program Files (x86)\Microsoft
SQL Server\90\Tools\Publishing\1.2. Now you could just run SqlPubWiz.exe, or run the
VSInt.reg file to add the context menu option in Visual Studio 2008.
&lt;/p&gt;
&lt;p&gt;
Not so fast, the registry file doesn’t seem to work as is on a 74 bit OS due to the
new subkey, Wow6432Node. I modified VSInet.reg to include the keys the Wow6432node,
and in the end got my Publish to Provider context menu option back.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Windows Registry Editor Version 5.00 
&lt;p&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VWDExpress\9.0\Menus]&lt;br&gt;
"{40d75537-ce10-4311-a7b0-6b164d80405d}"=",1000,1"&lt;br&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Menus]&lt;br&gt;
"{40d75537-ce10-4311-a7b0-6b164d80405d}"=",1000,1" 
&lt;p&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VWDExpress\9.0\Menus]&lt;br&gt;
"{40d75537-ce10-4311-a7b0-6b164d80405d}"=",1000,1"&lt;br&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Menus]&lt;br&gt;
"{40d75537-ce10-4311-a7b0-6b164d80405d}"=",1000,1"
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;pre class="c#" name="code"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=3fbb1539-d3b2-4f3f-9935-694738a72f60" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,3fbb1539-d3b2-4f3f-9935-694738a72f60.aspx</comments>
      <category>Technology/Sql</category>
      <category>Technology/Tools</category>
    <feedburner:origLink>http://blog.salvoz.com/2008/07/29/InstallingSQLPublishingWizardForVisualStudio2008OnA64bitOS.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=abf6adcf-b02b-46e1-9d18-8df7af4a0f15</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,abf6adcf-b02b-46e1-9d18-8df7af4a0f15.aspx</pingback:target>
      <dc:creator>Adam</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,abf6adcf-b02b-46e1-9d18-8df7af4a0f15.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=abf6adcf-b02b-46e1-9d18-8df7af4a0f15</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Just found a blog post by the <a href="http://blogs.msdn.com/sqlcat/default.aspx">Microsoft
SQL Server Development Customer Advisory Team</a>  entitled <a href="http://http://blogs.msdn.com/sqlcat/archive/2006/02/13/531339.aspx">How
can SQL Server 2005 help me evaluate and manage indexes?</a>. This post goes over
5 ways to analyze your index usage in SQL 2005. There looks to be some good technical
information on this blog, worthy of any DBA in training.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=abf6adcf-b02b-46e1-9d18-8df7af4a0f15" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Indexes in SQL 2005</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,abf6adcf-b02b-46e1-9d18-8df7af4a0f15.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SalvoZ/~3/340233298/IndexesInSQL2005.aspx</link>
      <pubDate>Sat, 19 Jul 2008 23:48:03 GMT</pubDate>
      <description>&lt;p&gt;
Just found a blog post by the &lt;a href="http://blogs.msdn.com/sqlcat/default.aspx"&gt;Microsoft
SQL Server Development Customer Advisory Team&lt;/a&gt;&amp;nbsp; entitled &lt;a href="http://http://blogs.msdn.com/sqlcat/archive/2006/02/13/531339.aspx"&gt;How
can SQL Server 2005 help me evaluate and manage indexes?&lt;/a&gt;. This post goes over
5 ways to analyze your index usage in SQL 2005. There looks to be some good technical
information on this blog, worthy of any DBA in training.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=abf6adcf-b02b-46e1-9d18-8df7af4a0f15" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,abf6adcf-b02b-46e1-9d18-8df7af4a0f15.aspx</comments>
      <category>Technology/Review For Future Projects</category>
      <category>Technology/Sql</category>
    <feedburner:origLink>http://blog.salvoz.com/2008/07/19/IndexesInSQL2005.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=476f92e8-5094-451b-846c-3ed35a586e2a</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,476f92e8-5094-451b-846c-3ed35a586e2a.aspx</pingback:target>
      <dc:creator>Adam</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,476f92e8-5094-451b-846c-3ed35a586e2a.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=476f92e8-5094-451b-846c-3ed35a586e2a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My domain controllers, and thus my member servers and workstations were having some
serious time drift. I’ve seen +/- 30 minutes this week so far. I found a good article
from Microsoft on how to enable a computer (including domain controllers) to sync
to an external time source (<a title="http://support.microsoft.com/kb/816042" href="http://support.microsoft.com/kb/816042">http://support.microsoft.com/kb/816042</a>).
I’m running two instances of Server 2008 server core, so I used the remote registry
functionality to set the registry keys for w32time and restarted. I’m syncing to north-america.pool.ntp.org
(don’t forget the ,0x1 at the end of our peer list). 
</p>
        <p>
Since my domain controllers are virtual machines, I also setup one of my physical
hosts to sync to an external source as a backup.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=476f92e8-5094-451b-846c-3ed35a586e2a" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Windows Server 2008 Time Sync</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,476f92e8-5094-451b-846c-3ed35a586e2a.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SalvoZ/~3/339541898/WindowsServer2008TimeSync.aspx</link>
      <pubDate>Sat, 19 Jul 2008 02:37:51 GMT</pubDate>
      <description>&lt;p&gt;
My domain controllers, and thus my member servers and workstations were having some
serious time drift. I’ve seen +/- 30 minutes this week so far. I found a good article
from Microsoft on how to enable a computer (including domain controllers) to sync
to an external time source (&lt;a title="http://support.microsoft.com/kb/816042" href="http://support.microsoft.com/kb/816042"&gt;http://support.microsoft.com/kb/816042&lt;/a&gt;).
I’m running two instances of Server 2008 server core, so I used the remote registry
functionality to set the registry keys for w32time and restarted. I’m syncing to north-america.pool.ntp.org
(don’t forget the ,0x1 at the end of our peer list). 
&lt;/p&gt;
&lt;p&gt;
Since my domain controllers are virtual machines, I also setup one of my physical
hosts to sync to an external source as a backup.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=476f92e8-5094-451b-846c-3ed35a586e2a" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,476f92e8-5094-451b-846c-3ed35a586e2a.aspx</comments>
      <category>Technology</category>
    <feedburner:origLink>http://blog.salvoz.com/2008/07/19/WindowsServer2008TimeSync.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=067ffe4f-5030-46b4-9d47-c4f57e22a42a</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,067ffe4f-5030-46b4-9d47-c4f57e22a42a.aspx</pingback:target>
      <dc:creator>Adam</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,067ffe4f-5030-46b4-9d47-c4f57e22a42a.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=067ffe4f-5030-46b4-9d47-c4f57e22a42a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It’s been awhile (4 months) since I last update my HTC mogul from the stock ROM that
came with the phone to a cooked ROM and leaked radio ROM. Lately my phone has been
acting kind of buggy, with having to reset it every morning to get my data connection
back. So I decided it’s time to upgrade to the RTM version of the radio, and a new
version of DCD’s ROM.
</p>
        <p>
I will be highlighting the steps I outlined in my last post <a href="http://blog.salvoz.com/2008/02/03/CookedROMsOnTheHTCMogulTitan6800Etc.aspx">Cooked
ROMs on the HTC Mogul</a>, which seems to get quite a few hits from the search engines.
Here are some additional links with good information:
</p>
        <ul>
          <li>
            <a href="http://forum.xda-developers.com/showthread.php?t=392133">ROM/Radio compatibility
guide</a> on <a href="http://xda-developers.com">Xda Developers</a></li>
          <li>
            <a href="http://wiki.xda-developers.com/index.php?pagename=HTC_Titan">HTC Titan Wiki</a> on <a href="http://xda-developers.com">Xda
Developers</a></li>
        </ul>
        <p>
Here are my updated steps for updating my phone
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <ol>
          <li>
Download all required files 
<ul><li>
DCD Rom 3.2.2 (listed in forums not wiki) 
</li><li>
Sprint CAB File 
</li><li>
Olipro 2.4 (I already had this bootloader installed on my phone). 
</li><li>
Titan Radio ROM 3.42.30 (listed in the forums, not wiki)</li></ul></li>
          <li>
Write down your MSID, MSD and AKey settings from ##778#. If you do not know your MSL,
you will need to get the SPC program. 
</li>
          <li>
Write down data from ##3282 
</li>
          <li>
Format your non-SDHC (smaller then 2GB Secure Digital Card) as FAT32. I backed up
the contents of my SD card and formatted it clean for this process. 
</li>
          <li>
Extract the Titaimg.nbh file from the Sprint Radio Rom rar file and copy to your SD
card. The file must be named Titaimg.nbh (notice there is no N, it’s not titaN). 
</li>
          <li>
Load the ROM by launching the boot loader using the power+camera+reset combination 
<ol><li>
Wiki states that the update will stop 5 times for 9 seconds each time, so don’t freak
out. 
</li><li>
When it says update complete, update success, do a soft reset and the the phone boot.
You can verify the Radio version under Device Information in your System Settings
page.</li></ol></li>
          <li>
Extract the RUU_signed.nbh from DCD’s 3.2.2 executable you downloaded using winrar.
Rename this file TITAIMG.nbh and copy to your SD card overwriting the previous .nbh
file. 
</li>
          <li>
NOTE: You are about to wipe all data from your phone so back up what you need. 
</li>
          <li>
Reboot into the boot loader with your SD card loaded. 
<ol><li>
Soft reset when you see update complete/update success</li></ol></li>
          <li>
Complete the touch screen calibration, but perform a soft reset before the customization
crap starts. 
</li>
          <li>
Run the sprint carrier cab on your device and then reset. This will let you access
the ##778# and ##3282# screens. If you can’t use your phone or data connection, access
the ## screens and re-enter the data you copied down in step 2</li>
        </ol>
        <p>
Step 11 thru me for a loop until I remembered I had downloaded that carrier cab and
should probably install it. I miss the default gray theme that I had in the last ROM,
and it takes awhile to load everything back up on my phone. I hope that my daily reset
requirement is no more, or I will be a little disappointed in my time invested in
this project.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=067ffe4f-5030-46b4-9d47-c4f57e22a42a" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>ROM upgrade for my HTC Mogul (Titan, 6800)</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,067ffe4f-5030-46b4-9d47-c4f57e22a42a.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SalvoZ/~3/334681776/ROMUpgradeForMyHTCMogulTitan6800.aspx</link>
      <pubDate>Mon, 14 Jul 2008 01:06:51 GMT</pubDate>
      <description>&lt;p&gt;
It’s been awhile (4 months) since I last update my HTC mogul from the stock ROM that
came with the phone to a cooked ROM and leaked radio ROM. Lately my phone has been
acting kind of buggy, with having to reset it every morning to get my data connection
back. So I decided it’s time to upgrade to the RTM version of the radio, and a new
version of DCD’s ROM.
&lt;/p&gt;
&lt;p&gt;
I will be highlighting the steps I outlined in my last post &lt;a href="http://blog.salvoz.com/2008/02/03/CookedROMsOnTheHTCMogulTitan6800Etc.aspx"&gt;Cooked
ROMs on the HTC Mogul&lt;/a&gt;, which seems to get quite a few hits from the search engines.
Here are some additional links with good information:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://forum.xda-developers.com/showthread.php?t=392133"&gt;ROM/Radio compatibility
guide&lt;/a&gt; on &lt;a href="http://xda-developers.com"&gt;Xda Developers&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://wiki.xda-developers.com/index.php?pagename=HTC_Titan"&gt;HTC Titan Wiki&lt;/a&gt; on &lt;a href="http://xda-developers.com"&gt;Xda
Developers&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Here are my updated steps for updating my phone
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Download all required files 
&lt;ul&gt;
&lt;li&gt;
DCD Rom 3.2.2 (listed in forums not wiki) 
&lt;li&gt;
Sprint CAB File 
&lt;li&gt;
Olipro 2.4 (I already had this bootloader installed on my phone). 
&lt;li&gt;
Titan Radio ROM 3.42.30 (listed in the forums, not wiki)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Write down your MSID, MSD and AKey settings from ##778#. If you do not know your MSL,
you will need to get the SPC program. 
&lt;li&gt;
Write down data from ##3282 
&lt;li&gt;
Format your non-SDHC (smaller then 2GB Secure Digital Card) as FAT32. I backed up
the contents of my SD card and formatted it clean for this process. 
&lt;li&gt;
Extract the Titaimg.nbh file from the Sprint Radio Rom rar file and copy to your SD
card. The file must be named Titaimg.nbh (notice there is no N, it’s not titaN). 
&lt;li&gt;
Load the ROM by launching the boot loader using the power+camera+reset combination 
&lt;ol&gt;
&lt;li&gt;
Wiki states that the update will stop 5 times for 9 seconds each time, so don’t freak
out. 
&lt;li&gt;
When it says update complete, update success, do a soft reset and the the phone boot.
You can verify the Radio version under Device Information in your System Settings
page.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;
Extract the RUU_signed.nbh from DCD’s 3.2.2 executable you downloaded using winrar.
Rename this file TITAIMG.nbh and copy to your SD card overwriting the previous .nbh
file. 
&lt;li&gt;
NOTE: You are about to wipe all data from your phone so back up what you need. 
&lt;li&gt;
Reboot into the boot loader with your SD card loaded. 
&lt;ol&gt;
&lt;li&gt;
Soft reset when you see update complete/update success&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;
Complete the touch screen calibration, but perform a soft reset before the customization
crap starts. 
&lt;li&gt;
Run the sprint carrier cab on your device and then reset. This will let you access
the ##778# and ##3282# screens. If you can’t use your phone or data connection, access
the ## screens and re-enter the data you copied down in step 2&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Step 11 thru me for a loop until I remembered I had downloaded that carrier cab and
should probably install it. I miss the default gray theme that I had in the last ROM,
and it takes awhile to load everything back up on my phone. I hope that my daily reset
requirement is no more, or I will be a little disappointed in my time invested in
this project.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=067ffe4f-5030-46b4-9d47-c4f57e22a42a" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,067ffe4f-5030-46b4-9d47-c4f57e22a42a.aspx</comments>
      <category>Technology</category>
    <feedburner:origLink>http://blog.salvoz.com/2008/07/14/ROMUpgradeForMyHTCMogulTitan6800.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=ce5bab49-15f4-4ccb-8053-b44272019501</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,ce5bab49-15f4-4ccb-8053-b44272019501.aspx</pingback:target>
      <dc:creator>Adam</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,ce5bab49-15f4-4ccb-8053-b44272019501.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ce5bab49-15f4-4ccb-8053-b44272019501</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We have some WSE 2.0 secured Web Services that we are migrating to a new data center.
As part of this migration effort I needed to write some automated tests to make sure
everything was working. In addition to working with the WSE 2.0 clients our customers
have, I also wanted to see what was needed to make the services consumable by WCF
clients. After finding this article on <a href="http://wcf.netfx3.com/content/WindowsCommunicationFoundationWCFInteroperabilityandMigrationwithWSE20.aspx">WSE
2.0 Interoperability</a> on <a href="http://wcf.netfx3.com">http://wcf.netfx3.com</a>,
it was pretty easy.
</p>
        <p>
The main problem I was having was issues with the username token. In WCF some basic
concepts were changed, such the removal of password encryption (instead recurring
the transport, https for example to handle encryption), and replay detection.   
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
Here is the config section from the WSE 2.0 server piece (the diagnostic piece is
optional)
</p>
        <pre class="csharpcode">
          <span class="kwrd">&lt;</span>
          <span class="html">microsoft.web.services2</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">security</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">securityTokenManager</span>
          <span class="attr">xmlns:wsse</span>
          <span class="kwrd">="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"</span>
          <span class="attr">qname</span>
          <span class="kwrd">="wsse:UsernameToken"</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">replayDetection</span>
          <span class="attr">enabled</span>
          <span class="kwrd">="false"</span>
          <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">securityTokenManager</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">security</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">diagnostics</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">trace</span>
          <span class="attr">enabled</span>
          <span class="kwrd">="true"</span>
          <span class="attr">input</span>
          <span class="kwrd">="logs\InputTrace.webinfo"</span>
          <span class="attr">output</span>
          <span class="kwrd">="logs\OutputTrace.webinfo"</span>
          <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">diagnostics</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">microsoft.web.services2</span>
          <span class="kwrd">&gt;</span>
        </pre>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
Here is a sample configuration section for the WCF Client:
</p>
        <pre class="csharpcode">
          <span class="kwrd">&lt;</span>
          <span class="html">system.serviceModel</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">bindings</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">basicHttpBinding</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">binding</span>
          <span class="attr">name</span>
          <span class="kwrd">="InventorySoap"</span>
          <span class="attr">closeTimeout</span>
          <span class="kwrd">="00:01:00"</span>
          <span class="attr">openTimeout</span>
          <span class="kwrd">="00:01:00"</span>
          <span class="attr">receiveTimeout</span>
          <span class="kwrd">="00:10:00"</span>
          <span class="attr">sendTimeout</span>
          <span class="kwrd">="00:01:00"</span>
          <span class="attr">allowCookies</span>
          <span class="kwrd">="false"</span>
          <span class="attr">bypassProxyOnLocal</span>
          <span class="kwrd">="false"</span>
          <span class="attr">hostNameComparisonMode</span>
          <span class="kwrd">="StrongWildcard"</span>
          <span class="attr">maxBufferSize</span>
          <span class="kwrd">="65536"</span>
          <span class="attr">maxBufferPoolSize</span>
          <span class="kwrd">="524288"</span>
          <span class="attr">maxReceivedMessageSize</span>
          <span class="kwrd">="65536"</span>
          <span class="attr">messageEncoding</span>
          <span class="kwrd">="Text"</span>
          <span class="attr">textEncoding</span>
          <span class="kwrd">="utf-8"</span>
          <span class="attr">transferMode</span>
          <span class="kwrd">="Buffered"</span>
          <span class="attr">useDefaultWebProxy</span>
          <span class="kwrd">="true"</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">readerQuotas</span>
          <span class="attr">maxDepth</span>
          <span class="kwrd">="32"</span>
          <span class="attr">maxStringContentLength</span>
          <span class="kwrd">="8192"</span>
          <span class="attr">maxArrayLength</span>
          <span class="kwrd">="16384"</span>
          <span class="attr">maxBytesPerRead</span>
          <span class="kwrd">="4096"</span>
          <span class="attr">maxNameTableCharCount</span>
          <span class="kwrd">="16384"</span>
          <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">security</span>
          <span class="attr">mode</span>
          <span class="kwrd">="TransportWithMessageCredential"</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">message</span>
          <span class="attr">clientCredentialType</span>
          <span class="kwrd">="UserName"</span>
          <span class="attr">algorithmSuite</span>
          <span class="kwrd">="Default"</span>
          <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">security</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">binding</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">basicHttpBinding</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">bindings</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">client</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">endpoint</span>
          <span class="attr">address</span>
          <span class="kwrd">="https://Server/Directory/Service.asmx"</span>
          <span class="attr">binding</span>
          <span class="kwrd">="basicHttpBinding"</span>
          <span class="attr">bindingConfiguration</span>
          <span class="kwrd">="InventorySoap"</span>
          <span class="attr">contract</span>
          <span class="kwrd">="MonitoringServices.Inventory.Wcf.InventorySoap"</span>
          <span class="attr">name</span>
          <span class="kwrd">="InventorySoap"</span>
          <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">client</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">system.serviceModel</span>
          <span class="kwrd">&gt;</span>
        </pre>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
Most of the client configuration was created for me when I added a service reference
to my project. The key part is the mode=TransportWithMessageCredential and clientCredntialType
= “UserName”.
</p>
        <p>
We have another project underway were we want to rewrite the WSE 2.0 services with
WCF while maintaining full compatibility with deployed WSE 2.0 clients. The netfx3
article covers this scenario as well, and it seems like we will be able to accomplish
our task. Look for a future post on that endeavor.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=ce5bab49-15f4-4ccb-8053-b44272019501" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>WSE2 and WCF Interoperability</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,ce5bab49-15f4-4ccb-8053-b44272019501.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SalvoZ/~3/330921150/WSE2AndWCFInteroperability.aspx</link>
      <pubDate>Wed, 09 Jul 2008 16:30:23 GMT</pubDate>
      <description>&lt;p&gt;
We have some WSE 2.0 secured Web Services that we are migrating to a new data center.
As part of this migration effort I needed to write some automated tests to make sure
everything was working. In addition to working with the WSE 2.0 clients our customers
have, I also wanted to see what was needed to make the services consumable by WCF
clients. After finding this article on &lt;a href="http://wcf.netfx3.com/content/WindowsCommunicationFoundationWCFInteroperabilityandMigrationwithWSE20.aspx"&gt;WSE
2.0 Interoperability&lt;/a&gt; on &lt;a href="http://wcf.netfx3.com"&gt;http://wcf.netfx3.com&lt;/a&gt;,
it was pretty easy.
&lt;/p&gt;
&lt;p&gt;
The main problem I was having was issues with the username token. In WCF some basic
concepts were changed, such the removal of password encryption (instead recurring
the transport, https for example to handle encryption), and replay detection.&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Here is the config section from the WSE 2.0 server piece (the diagnostic piece is
optional)
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;microsoft.web.services2&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;securityTokenManager&lt;/span&gt; &lt;span class="attr"&gt;xmlns:wsse&lt;/span&gt;&lt;span class="kwrd"&gt;="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"&lt;/span&gt; &lt;span class="attr"&gt;qname&lt;/span&gt;&lt;span class="kwrd"&gt;="wsse:UsernameToken"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;replayDetection&lt;/span&gt; &lt;span class="attr"&gt;enabled&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;securityTokenManager&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;diagnostics&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;trace&lt;/span&gt; &lt;span class="attr"&gt;enabled&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="attr"&gt;input&lt;/span&gt;&lt;span class="kwrd"&gt;="logs\InputTrace.webinfo"&lt;/span&gt; &lt;span class="attr"&gt;output&lt;/span&gt;&lt;span class="kwrd"&gt;="logs\OutputTrace.webinfo"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;diagnostics&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;microsoft.web.services2&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;p&gt;
Here is a sample configuration section for the WCF Client:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;bindings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;basicHttpBinding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;binding&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="InventorySoap"&lt;/span&gt; &lt;span class="attr"&gt;closeTimeout&lt;/span&gt;&lt;span class="kwrd"&gt;="00:01:00"&lt;/span&gt; &lt;span class="attr"&gt;openTimeout&lt;/span&gt;&lt;span class="kwrd"&gt;="00:01:00"&lt;/span&gt; &lt;span class="attr"&gt;receiveTimeout&lt;/span&gt;&lt;span class="kwrd"&gt;="00:10:00"&lt;/span&gt; &lt;span class="attr"&gt;sendTimeout&lt;/span&gt;&lt;span class="kwrd"&gt;="00:01:00"&lt;/span&gt; &lt;span class="attr"&gt;allowCookies&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt; &lt;span class="attr"&gt;bypassProxyOnLocal&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt; &lt;span class="attr"&gt;hostNameComparisonMode&lt;/span&gt;&lt;span class="kwrd"&gt;="StrongWildcard"&lt;/span&gt; &lt;span class="attr"&gt;maxBufferSize&lt;/span&gt;&lt;span class="kwrd"&gt;="65536"&lt;/span&gt; &lt;span class="attr"&gt;maxBufferPoolSize&lt;/span&gt;&lt;span class="kwrd"&gt;="524288"&lt;/span&gt; &lt;span class="attr"&gt;maxReceivedMessageSize&lt;/span&gt;&lt;span class="kwrd"&gt;="65536"&lt;/span&gt; &lt;span class="attr"&gt;messageEncoding&lt;/span&gt;&lt;span class="kwrd"&gt;="Text"&lt;/span&gt; &lt;span class="attr"&gt;textEncoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt; &lt;span class="attr"&gt;transferMode&lt;/span&gt;&lt;span class="kwrd"&gt;="Buffered"&lt;/span&gt; &lt;span class="attr"&gt;useDefaultWebProxy&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;readerQuotas&lt;/span&gt; &lt;span class="attr"&gt;maxDepth&lt;/span&gt;&lt;span class="kwrd"&gt;="32"&lt;/span&gt; &lt;span class="attr"&gt;maxStringContentLength&lt;/span&gt;&lt;span class="kwrd"&gt;="8192"&lt;/span&gt; &lt;span class="attr"&gt;maxArrayLength&lt;/span&gt;&lt;span class="kwrd"&gt;="16384"&lt;/span&gt; &lt;span class="attr"&gt;maxBytesPerRead&lt;/span&gt;&lt;span class="kwrd"&gt;="4096"&lt;/span&gt; &lt;span class="attr"&gt;maxNameTableCharCount&lt;/span&gt;&lt;span class="kwrd"&gt;="16384"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="TransportWithMessageCredential"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;message&lt;/span&gt; &lt;span class="attr"&gt;clientCredentialType&lt;/span&gt;&lt;span class="kwrd"&gt;="UserName"&lt;/span&gt; &lt;span class="attr"&gt;algorithmSuite&lt;/span&gt;&lt;span class="kwrd"&gt;="Default"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;binding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;basicHttpBinding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;bindings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;client&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;endpoint&lt;/span&gt; &lt;span class="attr"&gt;address&lt;/span&gt;&lt;span class="kwrd"&gt;="https://Server/Directory/Service.asmx"&lt;/span&gt; &lt;span class="attr"&gt;binding&lt;/span&gt;&lt;span class="kwrd"&gt;="basicHttpBinding"&lt;/span&gt; &lt;span class="attr"&gt;bindingConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;="InventorySoap"&lt;/span&gt; &lt;span class="attr"&gt;contract&lt;/span&gt;&lt;span class="kwrd"&gt;="MonitoringServices.Inventory.Wcf.InventorySoap"&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="InventorySoap"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;client&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;p&gt;
Most of the client configuration was created for me when I added a service reference
to my project. The key part is the mode=TransportWithMessageCredential and clientCredntialType
= “UserName”.
&lt;/p&gt;
&lt;p&gt;
We have another project underway were we want to rewrite the WSE 2.0 services with
WCF while maintaining full compatibility with deployed WSE 2.0 clients. The netfx3
article covers this scenario as well, and it seems like we will be able to accomplish
our task. Look for a future post on that endeavor.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=ce5bab49-15f4-4ccb-8053-b44272019501" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,ce5bab49-15f4-4ccb-8053-b44272019501.aspx</comments>
      <category>Technology/Programming</category>
    <feedburner:origLink>http://blog.salvoz.com/2008/07/09/WSE2AndWCFInteroperability.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=7c8b7172-c685-477a-944e-db0fb66c2f44</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,7c8b7172-c685-477a-944e-db0fb66c2f44.aspx</pingback:target>
      <dc:creator>Adam</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,7c8b7172-c685-477a-944e-db0fb66c2f44.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=7c8b7172-c685-477a-944e-db0fb66c2f44</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today I tried to use the web recorder in Visual Studio to create some new web tests,
but the recorder tool bar would not show in IE. A quick search found <a href="http://blogs.msdn.com/mtaute/archive/2007/11/09/diagnosing-and-fixing-web-test-recorder-bar-issues.aspx">Diagnosing
and fixing Web Test recorder bar issues</a>, by <a href="http://blogs.msdn.com/mtaute/default.aspx">Michael
Taute</a> which had several troubleshooting tips. 
</p>
        <p>
I ended up changing my home page which is about:blank (and loads when web recorder
is launched) to belong to the local intranet zone, as this is where my test site is.
That didn’t fix the problem initially, so I deleted the following two registry keys
using the 32 bit registry editor (C:\Windows\SysWOW64\regedit.exe):
</p>
        <ul>
          <li>
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component
Categories\{00021493-0000-0000-C000-000000000046}</li>
          <li>
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component
Categories\{00021494-0000-0000-C000-000000000046}</li>
        </ul>
        <p>
You need to make sure all instances of IE are closed before deleting the registry
keys. Once I did this, my web recorder was up and running. I’ve left about:blank in
the local intranet zone for now.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=7c8b7172-c685-477a-944e-db0fb66c2f44" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Visual Studio Web Recorder under Vista/Server 2008 64bit</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,7c8b7172-c685-477a-944e-db0fb66c2f44.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SalvoZ/~3/329273155/VisualStudioWebRecorderUnderVistaServer200864bit.aspx</link>
      <pubDate>Mon, 07 Jul 2008 20:24:10 GMT</pubDate>
      <description>&lt;p&gt;
Today I tried to use the web recorder in Visual Studio to create some new web tests,
but the recorder tool bar would not show in IE. A quick search found &lt;a href="http://blogs.msdn.com/mtaute/archive/2007/11/09/diagnosing-and-fixing-web-test-recorder-bar-issues.aspx"&gt;Diagnosing
and fixing Web Test recorder bar issues&lt;/a&gt;, by &lt;a href="http://blogs.msdn.com/mtaute/default.aspx"&gt;Michael
Taute&lt;/a&gt; which had several troubleshooting tips. 
&lt;/p&gt;
&lt;p&gt;
I ended up changing my home page which is about:blank (and loads when web recorder
is launched) to belong to the local intranet zone, as this is where my test site is.
That didn’t fix the problem initially, so I deleted the following two registry keys
using the 32 bit registry editor (C:\Windows\SysWOW64\regedit.exe):
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component
Categories\{00021493-0000-0000-C000-000000000046}&lt;/li&gt;
&lt;li&gt;
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component
Categories\{00021494-0000-0000-C000-000000000046}&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You need to make sure all instances of IE are closed before deleting the registry
keys. Once I did this, my web recorder was up and running. I’ve left about:blank in
the local intranet zone for now.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=7c8b7172-c685-477a-944e-db0fb66c2f44" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,7c8b7172-c685-477a-944e-db0fb66c2f44.aspx</comments>
      <category>Technology/Programming</category>
    <feedburner:origLink>http://blog.salvoz.com/2008/07/07/VisualStudioWebRecorderUnderVistaServer200864bit.aspx</feedburner:origLink></item>
  </channel>
</rss>
