<?xml version="1.0" encoding="utf-8"?>
<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/" version="2.0">
  <channel>
    <title>NSilverBullet</title>
    <link>http://www.nsilverbullet.net/</link>
    <description>Complex solutions for simple problems.</description>
    <language>en-us</language>
    <copyright>Joshua Anthony</copyright>
    <lastBuildDate>Thu, 16 Apr 2009 07:53:37 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.2.8279.16125</generator>
    <managingEditor>joshua.anthony@objectware.se</managingEditor>
    <webMaster>joshua.anthony@objectware.se</webMaster>
    <item>
      <trackback:ping>http://www.nsilverbullet.net/Trackback.aspx?guid=442c0411-0f35-43bd-b082-118b14e76023</trackback:ping>
      <pingback:server>http://www.nsilverbullet.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.nsilverbullet.net/PermaLink,guid,442c0411-0f35-43bd-b082-118b14e76023.aspx</pingback:target>
      <dc:creator>Joshua Anthony</dc:creator>
      <wfw:comment>http://www.nsilverbullet.net/CommentView,guid,442c0411-0f35-43bd-b082-118b14e76023.aspx</wfw:comment>
      <wfw:commentRss>http://www.nsilverbullet.net/SyndicationService.asmx/GetEntryCommentsRss?guid=442c0411-0f35-43bd-b082-118b14e76023</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
These last few days I have been having enormous problems with my BizTalk development
environment running in a windows Server 2003 Virtual PC environment. Whenever the
BizTalkServerApplication host was started CPU usage would stay at 100% consistently.
Stopping all my applications and even deleting them changed nothing. No running or
suspended instances were visible. For some reason the sqlservr.exe process was consuming
all available CPU resources. I found a couple of links that helped me solve the problem:
</p>
        <p>
          <a title="http://www.tech-archive.net/Archive/BizTalk/microsoft.public.biztalk.general/2006-11/msg00243.html" href="http://www.tech-archive.net/Archive/BizTalk/microsoft.public.biztalk.general/2006-11/msg00243.html" target="_blank">http://www.tech-archive.net/Archive/BizTalk/microsoft.public.biztalk.general/2006-11/msg00243.html</a>
          <br />
          <a title="http://www.digitaldeposit.net/saravana/post/2008/06/04/Read-this-before-using-bts_CleanupMsgBox-stored-procedure.aspx" href="http://www.digitaldeposit.net/saravana/post/2008/06/04/Read-this-before-using-bts_CleanupMsgBox-stored-procedure.aspx" target="_blank">http://www.digitaldeposit.net/saravana/post/2008/06/04/Read-this-before-using-bts_CleanupMsgBox-stored-procedure.aspx</a>
          <br />
          <a title="http://technet.microsoft.com/en-us/library/bb727781.aspx" href="http://technet.microsoft.com/en-us/library/bb727781.aspx" target="_blank">http://technet.microsoft.com/en-us/library/bb727781.aspx</a>
        </p>
        <p>
Basically running the following SQL: 
<br /></p>
        <div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:dc8e959a-9c7e-4738-9cf4-89d614e3a8c1" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="sql:nogutter:nocontrols">exec bts_CleanupMsgbox</pre>
        </div>
        <p>
After installing the script according to the instructions provided by Microsoft solved
my issues! I suspect that this could have to do with a problem with zombie messages
that I have had. 
</p>
        <p>
There is also a hotfix available in case you have the wrong version installed. <a title="http://support.microsoft.com/kb/924715" href="http://support.microsoft.com/kb/924715" target="_blank">http://support.microsoft.com/kb/924715</a></p>
      </body>
      <title>100% CPU usage in BizTalk development environment</title>
      <guid isPermaLink="false">http://www.nsilverbullet.net/PermaLink,guid,442c0411-0f35-43bd-b082-118b14e76023.aspx</guid>
      <link>http://www.nsilverbullet.net/2009/04/16/100CPUUsageInBizTalkDevelopmentEnvironment.aspx</link>
      <pubDate>Thu, 16 Apr 2009 07:53:37 GMT</pubDate>
      <description>&lt;p&gt;
These last few days I have been having enormous problems with my BizTalk development
environment running in a windows Server 2003 Virtual PC environment. Whenever the
BizTalkServerApplication host was started CPU usage would stay at 100% consistently.
Stopping all my applications and even deleting them changed nothing. No running or
suspended instances were visible. For some reason the sqlservr.exe process was consuming
all available CPU resources. I found a couple of links that helped me solve the problem:
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://www.tech-archive.net/Archive/BizTalk/microsoft.public.biztalk.general/2006-11/msg00243.html" href="http://www.tech-archive.net/Archive/BizTalk/microsoft.public.biztalk.general/2006-11/msg00243.html" target="_blank"&gt;http://www.tech-archive.net/Archive/BizTalk/microsoft.public.biztalk.general/2006-11/msg00243.html&lt;/a&gt; 
&lt;br /&gt;
&lt;a title="http://www.digitaldeposit.net/saravana/post/2008/06/04/Read-this-before-using-bts_CleanupMsgBox-stored-procedure.aspx" href="http://www.digitaldeposit.net/saravana/post/2008/06/04/Read-this-before-using-bts_CleanupMsgBox-stored-procedure.aspx" target="_blank"&gt;http://www.digitaldeposit.net/saravana/post/2008/06/04/Read-this-before-using-bts_CleanupMsgBox-stored-procedure.aspx&lt;/a&gt; 
&lt;br /&gt;
&lt;a title="http://technet.microsoft.com/en-us/library/bb727781.aspx" href="http://technet.microsoft.com/en-us/library/bb727781.aspx" target="_blank"&gt;http://technet.microsoft.com/en-us/library/bb727781.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Basically running the following SQL: 
&lt;br /&gt;
&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:dc8e959a-9c7e-4738-9cf4-89d614e3a8c1" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="sql:nogutter:nocontrols"&gt;exec bts_CleanupMsgbox&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
After installing the script according to the instructions provided by Microsoft solved
my issues! I suspect that this could have to do with a problem with zombie messages
that I have had. 
&lt;/p&gt;
&lt;p&gt;
There is also a hotfix available in case you have the wrong version installed. &lt;a title="http://support.microsoft.com/kb/924715" href="http://support.microsoft.com/kb/924715" target="_blank"&gt;http://support.microsoft.com/kb/924715&lt;/a&gt;
&lt;/p&gt;</description>
      <comments>http://www.nsilverbullet.net/CommentView,guid,442c0411-0f35-43bd-b082-118b14e76023.aspx</comments>
      <category>BizTalk</category>
      <category>Fixes</category>
    </item>
    <item>
      <trackback:ping>http://www.nsilverbullet.net/Trackback.aspx?guid=5023395d-a44f-4fdf-8f16-86abeb2c0650</trackback:ping>
      <pingback:server>http://www.nsilverbullet.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.nsilverbullet.net/PermaLink,guid,5023395d-a44f-4fdf-8f16-86abeb2c0650.aspx</pingback:target>
      <dc:creator>Joshua Anthony</dc:creator>
      <wfw:comment>http://www.nsilverbullet.net/CommentView,guid,5023395d-a44f-4fdf-8f16-86abeb2c0650.aspx</wfw:comment>
      <wfw:commentRss>http://www.nsilverbullet.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5023395d-a44f-4fdf-8f16-86abeb2c0650</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is my third day at Tech Ed 2008 in Barcelona, the breadth of the technologies
and languages that we as .Net developers now need to at least understand and preferably
master to some degree is enormous. I believe that developers will need to specialize
more explicitly on certain technology areas to remain productive in the future. It
has been impossible to master all of Microsoft's products for many years now but up
until a year or so ago it was at least conceivable for a developer to master all of
the developer technologies that Microsoft had on offer. With the introduction of cloud
based services and all the news in .Net, both libraries and new languages I cannot
see how any one person will be able to master it all... I want to sum of some of my
thoughts on the sessions that I have attended here at Tech Ed on Visual Studio 2010.
</p>
        <h3>Fixing Continuous Integration
</h3>
        <p>
CI is a great principle and has moved into the mainstream along with many other agile
principles. While Continuous Integration as such has never been broken there has always
been a problem with developer discipline. If you check in something that is broken
then it will be discovered quickly with CI but if you don't fix the broken code other
developers will be less productive if they cannot get the latest code or have their
own checkins fail in CI due to previously broken builds. With Visual Studio Team System
2010 Microsoft is introducing a new concept for CI, the gated check. It is not a big
change to the CI flow but a very clever use of a shelving, a feature in TFS which
I find generally is underutilized. Instead of doing a standard checking in and then
running a build on that code, gated checkins shelve the developers changes and then
performs a build on the shelveset. If this build is successful then the shelveset
is promoted to a proper check in, if the build fails then the check in is not committed
to the mainline. The visibility that CI offers is maintained but using gated checkins
other developers will never get failing code from other developers which was discoverable!
Obviously undiscovered errors can still sneak into the code due to bad or missing
tests or incorrect configuration of the build environment but it I believe that this
will lower or eliminate the fear of checking in that some developers have. It will
also allow you to check in before you go home without the need to wait and see that
the CI build completes successfully. If I check in my code 5 minutes before I go home
I should ideally wait to see that the build is successful, if it does not then I need
to fix that immediately since other developers will be getting that code tomorrow
morning when they come in. Using a gated check in I can go home, let the CI build
complete on my shelved changes and if the build is successful then everyone can get
my changes in the morning, if it fails I can safely wait until the morning before
fixing the code and no one else is impacted by my errors.
</p>
        <h3>Reproduction of Errors and Architecture Compilation Failures
</h3>
        <p>
Visual Studio 2010 looks like it contains some pretty good testing tools like the
ability to record a testers GUI while performing manual tests and also including debugging
and tracing info from remote machines. Pretty powerful stuff! It seems Microsoft have
their mind set on eliminating the problem of irreproducible errors. 
</p>
        <p>
Another interesting feature is the architecture layer diagram which allows you to
specify how the different layers in your application may and may not call each other.
This is useful for validating that your code follows the intended architecture at
compile time instead of detecting it when problems arise. All of these features (and
there are more) are great but unfortunately Microsoft still has silly distinctions
between different editions of Visual Studio Team System, so many of the cool demo
features will probably be marginalized in most organisations due to them not actually
having the appropriate edition of Visual Studio.
</p>
      </body>
      <title>Reflections on three days at Tech Ed</title>
      <guid isPermaLink="false">http://www.nsilverbullet.net/PermaLink,guid,5023395d-a44f-4fdf-8f16-86abeb2c0650.aspx</guid>
      <link>http://www.nsilverbullet.net/2008/11/12/ReflectionsOnThreeDaysAtTechEd.aspx</link>
      <pubDate>Wed, 12 Nov 2008 13:26:08 GMT</pubDate>
      <description>&lt;p&gt;
This is my third day at Tech Ed 2008 in Barcelona, the breadth of the technologies
and languages that we as .Net developers now need to at least understand and preferably
master to some degree is enormous. I believe that developers will need to specialize
more explicitly on certain technology areas to remain productive in the future. It
has been impossible to master all of Microsoft's products for many years now but up
until a year or so ago it was at least conceivable for a developer to master all of
the developer technologies that Microsoft had on offer. With the introduction of cloud
based services and all the news in .Net, both libraries and new languages I cannot
see how any one person will be able to master it all... I want to sum of some of my
thoughts on the sessions that I have attended here at Tech Ed on Visual Studio 2010.
&lt;/p&gt;
&lt;h3&gt;Fixing Continuous Integration
&lt;/h3&gt;
&lt;p&gt;
CI is a great principle and has moved into the mainstream along with many other agile
principles. While Continuous Integration as such has never been broken there has always
been a problem with developer discipline. If you check in something that is broken
then it will be discovered quickly with CI but if you don't fix the broken code other
developers will be less productive if they cannot get the latest code or have their
own checkins fail in CI due to previously broken builds. With Visual Studio Team System
2010 Microsoft is introducing a new concept for CI, the gated check. It is not a big
change to the CI flow but a very clever use of a shelving, a feature in TFS which
I find generally is underutilized. Instead of doing a standard checking in and then
running a build on that code, gated checkins shelve the developers changes and then
performs a build on the shelveset. If this build is successful then the shelveset
is promoted to a proper check in, if the build fails then the check in is not committed
to the mainline. The visibility that CI offers is maintained but using gated checkins
other developers will never get failing code from other developers which was discoverable!
Obviously undiscovered errors can still sneak into the code due to bad or missing
tests or incorrect configuration of the build environment but it I believe that this
will lower or eliminate the fear of checking in that some developers have. It will
also allow you to check in before you go home without the need to wait and see that
the CI build completes successfully. If I check in my code 5 minutes before I go home
I should ideally wait to see that the build is successful, if it does not then I need
to fix that immediately since other developers will be getting that code tomorrow
morning when they come in. Using a gated check in I can go home, let the CI build
complete on my shelved changes and if the build is successful then everyone can get
my changes in the morning, if it fails I can safely wait until the morning before
fixing the code and no one else is impacted by my errors.
&lt;/p&gt;
&lt;h3&gt;Reproduction of Errors and Architecture Compilation Failures
&lt;/h3&gt;
&lt;p&gt;
Visual Studio 2010 looks like it contains some pretty good testing tools like the
ability to record a testers GUI while performing manual tests and also including debugging
and tracing info from remote machines. Pretty powerful stuff! It seems Microsoft have
their mind set on eliminating the problem of irreproducible errors. 
&lt;/p&gt;
&lt;p&gt;
Another interesting feature is the architecture layer diagram which allows you to
specify how the different layers in your application may and may not call each other.
This is useful for validating that your code follows the intended architecture at
compile time instead of detecting it when problems arise. All of these features (and
there are more) are great but unfortunately Microsoft still has silly distinctions
between different editions of Visual Studio Team System, so many of the cool demo
features will probably be marginalized in most organisations due to them not actually
having the appropriate edition of Visual Studio.
&lt;/p&gt;</description>
      <comments>http://www.nsilverbullet.net/CommentView,guid,5023395d-a44f-4fdf-8f16-86abeb2c0650.aspx</comments>
      <category>.Net</category>
      <category>BizTalk</category>
      <category>Ramblings</category>
      <category>Team System</category>
      <category>Tech Ed 2008</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.nsilverbullet.net/Trackback.aspx?guid=13c1b7b1-8254-4736-acc3-d45f1a3f235a</trackback:ping>
      <pingback:server>http://www.nsilverbullet.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.nsilverbullet.net/PermaLink,guid,13c1b7b1-8254-4736-acc3-d45f1a3f235a.aspx</pingback:target>
      <dc:creator>Joshua Anthony</dc:creator>
      <wfw:comment>http://www.nsilverbullet.net/CommentView,guid,13c1b7b1-8254-4736-acc3-d45f1a3f235a.aspx</wfw:comment>
      <wfw:commentRss>http://www.nsilverbullet.net/SyndicationService.asmx/GetEntryCommentsRss?guid=13c1b7b1-8254-4736-acc3-d45f1a3f235a</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Working with Websphere MQ and the MQSC adapter is quite new for me and I have been
struggling with a couple of problems which have been very difficult to find solutions
to. One of our main issues has been getting the correct character encoding of outgoing
messages to MQ. BizTalk would output the message with the correct encoding (using
a file send port to verify) and it looked like the messages on the WebSphere MQ queue
were correctly encoded when we checked them using rhutilc. In our case we encoded
our unicode messages as UTF-8 but when the Java system which is the destination read
the messages any non-standard US characters came out as rubbish. They were correctly
encoded as two bytes in the message but the destination system was reading them using
codepage 850. Also all unicode messages that the Java system sent to us encoded with
UTF-8 over MQ worked correctly in BizTalk.
</p>
        <p>
What I have found out through much trial and error and the sparse clues I have been
able to find on the Internet is that the WebSphere client that BizTalk uses under
the covers will set the character encoding of any messages that you write to the systems
default codepage, which for windows is 850 according to IBM. This setting does not
take into account the actual encoding that BizTalk 2006 has done to the message. If
you force your message to be encoded as 850 in BizTalk then it will most likely work
as long as you don't use characters that are outside the codepage. There is a context
property in MQSeries.dll called MQMD_CodedCharSetId which will allow you to set the
codepage value (CCSID in the MQ world) for your outgoing message.
</p>
        <p>
I have found three ways to remedy the encoding problem:
</p>
        <ol>
          <li>
Set the context property in an orchestration to whatever value you require. The drawback
with this is that if you need to change your encoding you have to recompile and redeploy
everything. Also changing your context property does not actually change the encoding
just how MQ should interpret the message.</li>
          <li>
Set an MQ environment variable named MQCCSID to the codepage that you send your messages
as. This will override the system default value and force messages to be tagged with
your required codepage. Obviously you can only have one system wide default so if
you need to send messages out with different encodings this isn't going to help. Again
the actual encoding of your messages is not going to be changed.</li>
          <li>
Create an encoding pipeline component that allows you to set the MQ codepage for an
outgoing message. This is the option that we have settled on for now. The encoding
of your message is still not actually changed, unless you implement it, but now you
can have different encodings for different destinations and you can change the encoding
value using MMC and binding files.</li>
        </ol>
        <p>
One important point to remember is that UTF-8 is codepage 65001 in Windows but 1208
in IBM, so wherever you set the codepage you need to have this in mind - as far as
I know all other codepages have the same ids. 
</p>
        <p>
Using rfhutilc you can verify the codepage of a message in an MQ queue by browsing
to the message and then checking what codepage has been set under the MQMD tab. 
</p>
        <p>
I have not verified this but the solutions that I have outlined above should work
for EBCDIC and any other odd encodings that you may require as long as you can actually
create a message with that encoding.
</p>
      </body>
      <title>BizTalk 2006 MQSC Adapter Encoding Solution</title>
      <guid isPermaLink="false">http://www.nsilverbullet.net/PermaLink,guid,13c1b7b1-8254-4736-acc3-d45f1a3f235a.aspx</guid>
      <link>http://www.nsilverbullet.net/2008/11/03/BizTalk2006MQSCAdapterEncodingSolution.aspx</link>
      <pubDate>Mon, 03 Nov 2008 15:45:34 GMT</pubDate>
      <description>&lt;p&gt;
Working with Websphere MQ and the MQSC adapter is quite new for me and I have been
struggling with a couple of problems which have been very difficult to find solutions
to. One of our main issues has been getting the correct character encoding of outgoing
messages to MQ. BizTalk would output the message with the correct encoding (using
a file send port to verify) and it looked like the messages on the WebSphere MQ queue
were correctly encoded when we checked them using rhutilc. In our case we encoded
our unicode messages as UTF-8 but when the Java system which is the destination read
the messages any non-standard US characters came out as rubbish. They were correctly
encoded as two bytes in the message but the destination system was reading them using
codepage 850. Also all unicode messages that the Java system sent to us encoded with
UTF-8 over MQ worked correctly in BizTalk.
&lt;/p&gt;
&lt;p&gt;
What I have found out through much trial and error and the sparse clues I have been
able to find on the Internet is that the WebSphere client that BizTalk uses under
the covers will set the character encoding of any messages that you write to the systems
default codepage, which for windows is 850 according to IBM. This setting does not
take into account the actual encoding that BizTalk 2006 has done to the message. If
you force your message to be encoded as 850 in BizTalk then it will most likely work
as long as you don't use characters that are outside the codepage. There is a context
property in MQSeries.dll called MQMD_CodedCharSetId which will allow you to set the
codepage value (CCSID in the MQ world) for your outgoing message.
&lt;/p&gt;
&lt;p&gt;
I have found three ways to remedy the encoding problem:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Set the context property in an orchestration to whatever value you require. The drawback
with this is that if you need to change your encoding you have to recompile and redeploy
everything. Also changing your context property does not actually change the encoding
just how MQ should interpret the message.&lt;/li&gt;
&lt;li&gt;
Set an MQ environment variable named MQCCSID to the codepage that you send your messages
as. This will override the system default value and force messages to be tagged with
your required codepage. Obviously you can only have one system wide default so if
you need to send messages out with different encodings this isn't going to help. Again
the actual encoding of your messages is not going to be changed.&lt;/li&gt;
&lt;li&gt;
Create an encoding pipeline component that allows you to set the MQ codepage for an
outgoing message. This is the option that we have settled on for now. The encoding
of your message is still not actually changed, unless you implement it, but now you
can have different encodings for different destinations and you can change the encoding
value using MMC and binding files.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
One important point to remember is that UTF-8 is codepage 65001 in Windows but 1208
in IBM, so wherever you set the codepage you need to have this in mind - as far as
I know all other codepages have the same ids. 
&lt;/p&gt;
&lt;p&gt;
Using rfhutilc you can verify the codepage of a message in an MQ queue by browsing
to the message and then checking what codepage has been set under the MQMD tab. 
&lt;/p&gt;
&lt;p&gt;
I have not verified this but the solutions that I have outlined above should work
for EBCDIC and any other odd encodings that you may require as long as you can actually
create a message with that encoding.
&lt;/p&gt;</description>
      <comments>http://www.nsilverbullet.net/CommentView,guid,13c1b7b1-8254-4736-acc3-d45f1a3f235a.aspx</comments>
      <category>.Net</category>
      <category>BizTalk</category>
      <category>Fixes</category>
      <category>Java</category>
    </item>
    <item>
      <trackback:ping>http://www.nsilverbullet.net/Trackback.aspx?guid=e61869c0-71ce-4c95-85e0-ed799284359b</trackback:ping>
      <pingback:server>http://www.nsilverbullet.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.nsilverbullet.net/PermaLink,guid,e61869c0-71ce-4c95-85e0-ed799284359b.aspx</pingback:target>
      <dc:creator>Joshua Anthony</dc:creator>
      <wfw:comment>http://www.nsilverbullet.net/CommentView,guid,e61869c0-71ce-4c95-85e0-ed799284359b.aspx</wfw:comment>
      <wfw:commentRss>http://www.nsilverbullet.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e61869c0-71ce-4c95-85e0-ed799284359b</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have been messing about with some template experiments in dasBlog using Notepad++
and Visual Studio 2008. That is changing the site layout by editing <em>homeTemplate.blogtemplate</em>, <em>dayTemplate.blogtemplate</em> and <em>itemTemplate.blogtemplate</em> for
a dasBlog Theme. These files are basically html files with dasBlog specific macros
for inserting the blog functionality.
</p>
        <h3>Notepad++
</h3>
        <p>
First off I love Notepad++ as a <a target="_blank" href="http://www.davidtan.org/replace-windows-notepad-with-notepad-plus/">replacement
for Notepad</a>.  I have had a hard time doing more complex things in Notepad++
due to my addiction to Microsoft's intellisense... Editing the .blogtemplate
files is dead simple in Notepad++ since it is very easy to get syntax coloring
- you simply choose a language (html) from the language menu and viola everything
is color coded. The file that you are editing doesn't need to have the correct extension
or even be written in the language you choose. Notepad++ does its best and highlights
whatever it can recognize. 
</p>
        <p>
There is also an auto completion function that you access by pressing CTRL+space,
but this function is really only a text completion function and does not take any
notice of the context that you are typing in. It just pops up an alphabetical list
of potential text candidates based on the letters that you have already typed. For
simple programming tasks this is more than adequate and Notepad++ does have a significantly
smaller footprint than Visual Studio, so you can install it on pretty much any computer
or server without anyone complaining for quick debugging tasks.
</p>
        <p>
What I really have been missing is proper html intellisense for the .blogtemplate
files.
</p>
        <h3>Visual Studio 2008
</h3>
        <p>
Obviously Visual Studio does not have support for the .blogtemplate extension. For
awhile I hacked my way around it by renaming the files to have a html extension while
editing, which sort of works. The main problem is that I keep forgetting to change
the extension back before I start testing my changes - so this was causing unnecessary
pain... I had a vague memory of configuring something like this before and found <a target="_blank" href="http://vladimir.bychkov.info/blog/PermaLink,guid,be76b3bf-c524-456c-9c8f-a2584924aa32.aspx">these
instructions</a>. For the sake of completeness I include them here also:
</p>
        <p>
1. Go to the <strong>Tools-&gt;Options</strong> menu.<br />
2. Pick <strong>Text Editor -&gt; File Extension</strong> from the tree in the
left part of the Options dialog.<br />
3. Type your file extension, <em>.blogtemplate</em> in my case, in the <strong>Extension</strong> text
box.<br />
4. Select the appropriate editor from the <strong>Editor</strong> dropdown.<br />
5. Click <strong>Add </strong>and then <strong>Ok</strong> to close the dialog
and re-open your files.
</p>
        <p>
If you cannot see the <strong>Text Editor</strong> node in the tree view of the Options
dialog then you probably need to click on <strong>Show all settings</strong> in the
bottom left hand corner of the dialog...
</p>
        <p>
Using this feature you can set up pretty much any color coding and intellisense support
that you like in Visual Studio for file types that Visual Studio lacks support
for. All I am missing now is auto completion for dasBlog macros in .blogtemplate files,
this seems like a much tougher problem.
</p>
      </body>
      <title>Add intellisense for any file extension in Visual Studio 2005 or 2008</title>
      <guid isPermaLink="false">http://www.nsilverbullet.net/PermaLink,guid,e61869c0-71ce-4c95-85e0-ed799284359b.aspx</guid>
      <link>http://www.nsilverbullet.net/2008/10/30/AddIntellisenseForAnyFileExtensionInVisualStudio2005Or2008.aspx</link>
      <pubDate>Thu, 30 Oct 2008 21:56:57 GMT</pubDate>
      <description>&lt;p&gt;
I have been messing about with some template experiments in dasBlog using Notepad++
and Visual Studio 2008. That is changing the site layout by editing &lt;em&gt;homeTemplate.blogtemplate&lt;/em&gt;, &lt;em&gt;dayTemplate.blogtemplate&lt;/em&gt; and &lt;em&gt;itemTemplate.blogtemplate&lt;/em&gt; for
a dasBlog Theme. These files are basically html files with dasBlog specific macros
for inserting the blog functionality.
&lt;/p&gt;
&lt;h3&gt;Notepad++
&lt;/h3&gt;
&lt;p&gt;
First off I love Notepad++ as a &lt;a target="_blank" href="http://www.davidtan.org/replace-windows-notepad-with-notepad-plus/"&gt;replacement
for Notepad&lt;/a&gt;. &amp;nbsp;I have had a hard time doing more complex things&amp;nbsp;in Notepad++
due to my addiction to Microsoft's intellisense... Editing the&amp;nbsp;.blogtemplate
files is&amp;nbsp;dead simple in&amp;nbsp;Notepad++ since it is very easy to get syntax coloring
- you simply choose a language (html) from the&amp;nbsp;language menu and viola everything
is color coded. The file that you are editing doesn't need to have the correct extension
or even be written in the language you choose. Notepad++ does its best and highlights
whatever it can recognize. 
&lt;/p&gt;
&lt;p&gt;
There is also an auto completion function that you access by pressing CTRL+space,
but this function is really only a text completion function and does not take any
notice of the context that you are typing in. It just pops up an alphabetical list
of potential text candidates based on the letters that you have already typed. For
simple programming tasks this is more than adequate and Notepad++ does have a significantly
smaller footprint than Visual Studio, so you can install it on pretty much any computer
or server without anyone complaining for quick debugging tasks.
&lt;/p&gt;
&lt;p&gt;
What I really have been missing is proper html intellisense for the .blogtemplate
files.
&lt;/p&gt;
&lt;h3&gt;Visual Studio 2008
&lt;/h3&gt;
&lt;p&gt;
Obviously Visual Studio does not have support for the .blogtemplate extension. For
awhile I hacked my way around it by renaming the files to have a html extension while
editing,&amp;nbsp;which sort of works. The main problem is that I keep forgetting to change
the extension back before I start testing my changes - so this was causing unnecessary
pain... I had a vague memory of configuring something like this before and&amp;nbsp;found &lt;a target="_blank" href="http://vladimir.bychkov.info/blog/PermaLink,guid,be76b3bf-c524-456c-9c8f-a2584924aa32.aspx"&gt;these
instructions&lt;/a&gt;.&amp;nbsp;For the sake of completeness I include them here also:
&lt;/p&gt;
&lt;p&gt;
1. Go to the&amp;nbsp;&lt;strong&gt;Tools-&amp;gt;Options&lt;/strong&gt; menu.&lt;br&gt;
2. Pick &lt;strong&gt;Text Editor -&amp;gt; File Extension&lt;/strong&gt; from&amp;nbsp;the tree in the
left part of the Options dialog.&lt;br&gt;
3. Type your file extension, &lt;em&gt;.blogtemplate&lt;/em&gt; in my case,&amp;nbsp;in&amp;nbsp;the &lt;strong&gt;Extension&lt;/strong&gt; text
box.&lt;br&gt;
4. Select the appropriate editor from the &lt;strong&gt;Editor&lt;/strong&gt; dropdown.&lt;br&gt;
5. Click &lt;strong&gt;Add &lt;/strong&gt;and then &lt;strong&gt;Ok&lt;/strong&gt; to close the&amp;nbsp;dialog
and re-open your files.
&lt;/p&gt;
&lt;p&gt;
If you cannot see the &lt;strong&gt;Text Editor&lt;/strong&gt; node in the tree view of the Options
dialog then you probably need to click on &lt;strong&gt;Show all settings&lt;/strong&gt; in the
bottom left hand corner of the dialog...
&lt;/p&gt;
&lt;p&gt;
Using this feature you can set up pretty much any color coding and intellisense support
that you like in Visual Studio for file types&amp;nbsp;that Visual Studio lacks support
for. All I am missing now is auto completion for dasBlog macros in .blogtemplate files,
this seems like a much tougher problem.
&lt;/p&gt;</description>
      <comments>http://www.nsilverbullet.net/CommentView,guid,e61869c0-71ce-4c95-85e0-ed799284359b.aspx</comments>
      <category>dasBlog</category>
      <category>Fixes</category>
      <category>Reviews</category>
      <category>Team System</category>
      <category>Visual Studio</category>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://www.nsilverbullet.net/Trackback.aspx?guid=e4c94fa0-0c0d-4461-873c-b89cf45c17b6</trackback:ping>
      <pingback:server>http://www.nsilverbullet.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.nsilverbullet.net/PermaLink,guid,e4c94fa0-0c0d-4461-873c-b89cf45c17b6.aspx</pingback:target>
      <dc:creator>Joshua Anthony</dc:creator>
      <wfw:comment>http://www.nsilverbullet.net/CommentView,guid,e4c94fa0-0c0d-4461-873c-b89cf45c17b6.aspx</wfw:comment>
      <wfw:commentRss>http://www.nsilverbullet.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e4c94fa0-0c0d-4461-873c-b89cf45c17b6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The BOM is a two to four byte sequence at the start of an encoded file which tells
the recipient if the characters are encoded using big-endian or little-endian byte
order. In BizTalk generally the byte order mark is added when a file is UTF-8 or UTF-16
encoded using an XML assembler in a send pipeline. Sometimes applications cannot handle
the initial bytes and you don't want them to be added to your message. I recently
read two articles about removing the Byte Order Mark (BOM) from outgoing messages
in BizTalk 2006 one by <a href="http://www.digitaldeposit.net/saravana/post/2006/08/23/Delete-Byte-Order-Mark-from-outgoing-messages-in-Biztalk-20042006.aspx">Saravana
Kumar</a> and the other an official <a href="http://support.microsoft.com/kb/921044">Microsoft
KB article</a>. Both of them recommend creating a custom pipeline with an XML assemble
stage where the PreserveBom property is set to false. I find it a little strange that
they don't point out that you can accomplish this using the default XMLTransmit pipeline
also. Just open the pipeline configuration in the Send Port properties and set PreserveBom
to false... No custom Pipeline, no coding required.
</p>
        <p>
          <a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RemoveByteOrderMarkfromBizTalk2006outgoi_93F1/xmltransmitbom.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="xmltransmitbom" src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RemoveByteOrderMarkfromBizTalk2006outgoi_93F1/xmltransmitbom_thumb.png" width="223" border="0" />
          </a>
        </p>
      </body>
      <title>Remove Byte Order Mark from a BizTalk 2006 outgoing messages</title>
      <guid isPermaLink="false">http://www.nsilverbullet.net/PermaLink,guid,e4c94fa0-0c0d-4461-873c-b89cf45c17b6.aspx</guid>
      <link>http://www.nsilverbullet.net/2008/10/10/RemoveByteOrderMarkFromABizTalk2006OutgoingMessages.aspx</link>
      <pubDate>Fri, 10 Oct 2008 08:53:02 GMT</pubDate>
      <description>&lt;p&gt;
The BOM is a two to four byte sequence at the start of an encoded file which tells
the recipient if the characters are encoded using big-endian or little-endian byte
order. In BizTalk generally the byte order mark is added when a file is UTF-8 or UTF-16
encoded using an XML assembler in a send pipeline. Sometimes applications cannot handle
the initial bytes and you don't want them to be added to your message. I recently
read two articles about removing the Byte Order Mark (BOM) from outgoing messages
in BizTalk 2006 one by &lt;a href="http://www.digitaldeposit.net/saravana/post/2006/08/23/Delete-Byte-Order-Mark-from-outgoing-messages-in-Biztalk-20042006.aspx"&gt;Saravana
Kumar&lt;/a&gt; and the other an official &lt;a href="http://support.microsoft.com/kb/921044"&gt;Microsoft
KB article&lt;/a&gt;. Both of them recommend creating a custom pipeline with an XML assemble
stage where the PreserveBom property is set to false. I find it a little strange that
they don't point out that you can accomplish this using the default XMLTransmit pipeline
also. Just open the pipeline configuration in the Send Port properties and set PreserveBom
to false... No custom Pipeline, no coding required.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RemoveByteOrderMarkfromBizTalk2006outgoi_93F1/xmltransmitbom.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="xmltransmitbom" src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RemoveByteOrderMarkfromBizTalk2006outgoi_93F1/xmltransmitbom_thumb.png" width="223" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;</description>
      <comments>http://www.nsilverbullet.net/CommentView,guid,e4c94fa0-0c0d-4461-873c-b89cf45c17b6.aspx</comments>
      <category>.Net</category>
      <category>BizTalk</category>
      <category>Fixes</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.nsilverbullet.net/Trackback.aspx?guid=5575685e-ad2d-4df2-bb53-410fafd208fa</trackback:ping>
      <pingback:server>http://www.nsilverbullet.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.nsilverbullet.net/PermaLink,guid,5575685e-ad2d-4df2-bb53-410fafd208fa.aspx</pingback:target>
      <dc:creator>Joshua Anthony</dc:creator>
      <wfw:comment>http://www.nsilverbullet.net/CommentView,guid,5575685e-ad2d-4df2-bb53-410fafd208fa.aspx</wfw:comment>
      <wfw:commentRss>http://www.nsilverbullet.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5575685e-ad2d-4df2-bb53-410fafd208fa</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
While trying out a complex URL rewriting scenario in ASP.Net I ran into a pretty strange
problem that resulted in a 404 error: 
</p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f26be293-c663-4f2b-acf4-00c3085a0912" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="xml:nogutter:nocontrols">Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

Requested Url: /6.aspx/t.aspx
</pre>
        </div>
        <p>
My code is very similar to a solution that I have created previously in ASP.Net 2.0
on Windows XP so I was a little surprised that I was getting an error. The strange
thing is that /6.aspx is the original URL and /default.aspx is the rewritten url,
in the error message it looks like the original URL has partially overwritten the
new URL! 
</p>
        <p>
The exception that is caught has a stack trace that ends with: System.Web.UI.Util.CheckVirtualFileExists(VirtualPath
virtualPath) 
</p>
        <p>
Looking around the Internet for people who have already encountered this problem (as
I always do) didn't lead to any immediate solutions. On the IIS forum there is one
discussion on <a href="http://forums.iis.net/p/1149754/1871196.aspx">Module doesn't
work on IIS7 under vista business</a> which lead me to a solution. It seems to me
that URL rewriting is broken on Vista prior to SP1. Part of the SP1 upgrade incorporates
changes to IIS 7 that were made in Windows Server 2008 as detailed on <a href="http://technet.microsoft.com/en-us/library/cc709618.aspx">Microsoft
TechNet</a>. So after installing SP1 my solution works as expected.
</p>
      </body>
      <title>URL Rewrite Does Not Work on Vista</title>
      <guid isPermaLink="false">http://www.nsilverbullet.net/PermaLink,guid,5575685e-ad2d-4df2-bb53-410fafd208fa.aspx</guid>
      <link>http://www.nsilverbullet.net/2008/10/08/URLRewriteDoesNotWorkOnVista.aspx</link>
      <pubDate>Wed, 08 Oct 2008 05:04:56 GMT</pubDate>
      <description>&lt;p&gt;
While trying out a complex URL rewriting scenario in ASP.Net I ran into a pretty strange
problem that resulted in a 404 error: 
&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f26be293-c663-4f2b-acf4-00c3085a0912" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="xml:nogutter:nocontrols"&gt;Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

Requested Url: /6.aspx/t.aspx
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
My code is very similar to a solution that I have created previously in ASP.Net 2.0
on Windows XP so I was a little surprised that I was getting an error. The strange
thing is that /6.aspx is the original URL and /default.aspx is the rewritten url,
in the error message it looks like the original URL has partially overwritten the
new URL! 
&lt;/p&gt;
&lt;p&gt;
The exception that is caught has a stack trace that ends with: System.Web.UI.Util.CheckVirtualFileExists(VirtualPath
virtualPath) 
&lt;/p&gt;
&lt;p&gt;
Looking around the Internet for people who have already encountered this problem (as
I always do) didn't lead to any immediate solutions. On the IIS forum there is one
discussion on &lt;a href="http://forums.iis.net/p/1149754/1871196.aspx"&gt;Module doesn't
work on IIS7 under vista business&lt;/a&gt; which lead me to a solution. It seems to me
that URL rewriting is broken on Vista prior to SP1. Part of the SP1 upgrade incorporates
changes to IIS 7 that were made in Windows Server 2008 as detailed on &lt;a href="http://technet.microsoft.com/en-us/library/cc709618.aspx"&gt;Microsoft
TechNet&lt;/a&gt;. So after installing SP1 my solution works as expected.
&lt;/p&gt;</description>
      <comments>http://www.nsilverbullet.net/CommentView,guid,5575685e-ad2d-4df2-bb53-410fafd208fa.aspx</comments>
      <category>.Net</category>
      <category>Bugs</category>
      <category>Fixes</category>
      <category>Vista</category>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://www.nsilverbullet.net/Trackback.aspx?guid=f1d406c6-aa2a-4027-95e4-d84038206e6d</trackback:ping>
      <pingback:server>http://www.nsilverbullet.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.nsilverbullet.net/PermaLink,guid,f1d406c6-aa2a-4027-95e4-d84038206e6d.aspx</pingback:target>
      <dc:creator>Joshua Anthony</dc:creator>
      <wfw:comment>http://www.nsilverbullet.net/CommentView,guid,f1d406c6-aa2a-4027-95e4-d84038206e6d.aspx</wfw:comment>
      <wfw:commentRss>http://www.nsilverbullet.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f1d406c6-aa2a-4027-95e4-d84038206e6d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
There is a nice little SFTP adapter for BizTalk on CodePlex <a title="http://www.codeplex.com/SftpAdapter/" href="http://www.codeplex.com/SftpAdapter/">http://www.codeplex.com/SftpAdapter/</a>.
I have been trying this out for a couple of days and it works quite nicely. I have
been using <a href="http://www.freesshd.com/" target="_blank">freeSSHd</a> as SFTP
server and <a href="http://winscp.net/" target="_blank">WinScp</a> as a client to
see that the SFTP functionality works. WinScp comes with PuttyGen for generating key
pairs for authentication and there are a couple of guides on the web which offer clues
as to how this should all be configured but I still had to resort to trial and error
to get the SFTP authentication working. So this is my super concise guide to getting
it up and running for local testing (presuming you have installed all the software
first).
</p>
        <h4>Generate a keypair with PuTTYGen
</h4>
        <p>
Under WinScp in the start menu you have "Key Tools/PuTTYGen"
</p>
        <p>
          <a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_10.png" target="_blank">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="231" alt="image" src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_thumb_4.png" width="240" border="0" />
          </a>
        </p>
        <p>
Click "Generate" and move the mouse about. When PuTTYGen has created your keypair
enter a comment so that you key is easier to identify, you can use a passphrase for
your master key if you like. Save your private key as a .ppk file somewhere safe this
is your master file and you can open it in PuTTYGen later if you need to export it
again. Export the key (under the Conversions menu) as an OpenSSH key, but remove the
passphrase first since the SFTP adapter doesn't currently support passphrases for
private keys, save this key somewhere where the SFTP adapter can access it. This key
should also be kept safe since it is the equivalent of a password. Select the entire
textbox with the public key and copy to the clipboard.
</p>
        <h4>Configure freeSSHd for public key authentication
</h4>
        <p>
Open up the freeSSHd settings dialogue and go to Authentication. Enter a directory
where the public keys for your users will be stored. Make sure that "Public Key Authentication"
is not set to disabled and that "Password Authentication" isn't required.
</p>
        <p>
          <a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_12.png" target="_blank">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="227" alt="image" src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_thumb_5.png" width="240" border="0" />
          </a>
        </p>
        <p>
You also need to set a directory under the SFTP tab for storing the files. Add users
in the Users tab selecting "Public key (SSH only)" as the authorization method. Also
make sure that the SFTP checkbox is selected.
</p>
        <p>
          <a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_14.png" target="_blank">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="240" alt="image" src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_thumb_6.png" width="222" border="0" />
          </a>
        </p>
        <p>
Go to the directory that has been configured for freeSSHd keys. Create a text file
named "username" ( the users login name and no extension) and paste the public key
string from PuTTYGen into it making sure it is all on one line.
</p>
        <p>
          <a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_16.png">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="47" alt="image" src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_thumb_7.png" width="244" border="0" />
          </a>
        </p>
        <p>
Test it with WinScp before trying it from BizTalk. Now you should be up and running
with your SFTP adapter and an SFTP server.
</p>
      </body>
      <title>SFTP Adapter authentication for BizTalk</title>
      <guid isPermaLink="false">http://www.nsilverbullet.net/PermaLink,guid,f1d406c6-aa2a-4027-95e4-d84038206e6d.aspx</guid>
      <link>http://www.nsilverbullet.net/2008/07/04/SFTPAdapterAuthenticationForBizTalk.aspx</link>
      <pubDate>Fri, 04 Jul 2008 10:38:14 GMT</pubDate>
      <description>&lt;p&gt;
There is a nice little SFTP adapter for BizTalk on CodePlex &lt;a title=http://www.codeplex.com/SftpAdapter/ href="http://www.codeplex.com/SftpAdapter/"&gt;http://www.codeplex.com/SftpAdapter/&lt;/a&gt;.
I have been trying this out for a couple of days and it works quite nicely. I have
been using &lt;a href="http://www.freesshd.com/" target=_blank&gt;freeSSHd&lt;/a&gt; as SFTP server
and &lt;a href="http://winscp.net/" target=_blank&gt;WinScp&lt;/a&gt; as a client to see that
the SFTP functionality works. WinScp comes with PuttyGen for generating key pairs
for authentication and there are a couple of guides on the web which offer clues as
to how this should all be configured but I still had to resort to trial and error
to get the SFTP authentication working. So this is my super concise guide to getting
it up and running for local testing (presuming you have installed all the software
first).
&lt;/p&gt;
&lt;h4&gt;Generate a keypair with PuTTYGen
&lt;/h4&gt;
&lt;p&gt;
Under WinScp in the start menu you have "Key Tools/PuTTYGen"
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_10.png" target=_blank&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=231 alt=image src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_thumb_4.png" width=240 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Click "Generate" and move the mouse about. When PuTTYGen has created your keypair
enter a comment so that you key is easier to identify, you can use a passphrase for
your master key if you like. Save your private key as a .ppk file somewhere safe this
is your master file and you can open it in PuTTYGen later if you need to export it
again. Export the key (under the Conversions menu) as an OpenSSH key, but remove the
passphrase first since the SFTP adapter doesn't currently support passphrases for
private keys, save this key somewhere where the SFTP adapter can access it. This key
should also be kept safe since it is the equivalent of a password. Select the entire
textbox with the public key and copy to the clipboard.
&lt;/p&gt;
&lt;h4&gt;Configure freeSSHd for public key authentication
&lt;/h4&gt;
&lt;p&gt;
Open up the freeSSHd settings dialogue and go to Authentication. Enter a directory
where the public keys for your users will be stored. Make sure that "Public Key Authentication"
is not set to disabled and that "Password Authentication" isn't required.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_12.png" target=_blank&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=227 alt=image src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_thumb_5.png" width=240 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
You also need to set a directory under the SFTP tab for storing the files. Add users
in the Users tab selecting "Public key (SSH only)" as the authorization method. Also
make sure that the SFTP checkbox is selected.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_14.png" target=_blank&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=240 alt=image src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_thumb_6.png" width=222 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Go to the directory that has been configured for freeSSHd keys. Create a text file
named "username" ( the users login name and no extension) and paste the public key
string from PuTTYGen into it making sure it is all on one line.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_16.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=47 alt=image src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RecursiveSFTPAdapterforBizTalk_9BB3/image_thumb_7.png" width=244 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Test it with WinScp before trying it from BizTalk. Now you should be up and running
with your SFTP adapter and an SFTP server.
&lt;/p&gt;</description>
      <comments>http://www.nsilverbullet.net/CommentView,guid,f1d406c6-aa2a-4027-95e4-d84038206e6d.aspx</comments>
      <category>BizTalk</category>
      <category>Security</category>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://www.nsilverbullet.net/Trackback.aspx?guid=f25fa61e-6b11-4045-becf-b1cf8dc063bc</trackback:ping>
      <pingback:server>http://www.nsilverbullet.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.nsilverbullet.net/PermaLink,guid,f25fa61e-6b11-4045-becf-b1cf8dc063bc.aspx</pingback:target>
      <dc:creator>Joshua Anthony</dc:creator>
      <wfw:comment>http://www.nsilverbullet.net/CommentView,guid,f25fa61e-6b11-4045-becf-b1cf8dc063bc.aspx</wfw:comment>
      <wfw:commentRss>http://www.nsilverbullet.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f25fa61e-6b11-4045-becf-b1cf8dc063bc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have been reading a lot about Event Driven Architecture (EDA) in relation to SOA
recently and while the ideas are very interesting and the benefits are alluring it
adds an additional complexity and uncertainty to the overall behaviour. Two good articles
on EDA are <a title="http://martinfowler.com/eaaDev/EventCollaboration.html" href="http://martinfowler.com/eaaDev/EventCollaboration.html" target="_blank">http://martinfowler.com/eaaDev/EventCollaboration.html</a> and <a title="http://eaipatterns.com/docs/EDA.pdf" href="http://eaipatterns.com/docs/EDA.pdf" target="_blank">http://eaipatterns.com/docs/EDA.pdf</a></p>
        <p>
From my view the main problem is that when implementing a business process that spans
several services (for example entity services) we do not generally want the entity
services to react to events and then store or retrieve data based on the events because
this means that the services need to have some kind of knowledge of the expected behaviour
relating to the process - generally seen as a bad thing in SOA, as the northbound
- southbound dependencies get reversed. We also want to have some stability from a
callers perspective that the overall flow will be moved forward, traditionally done
by issuing a command. If events get turned into commands then I believe we will have
problems coordinating the different actors (presuming that the command event was only
meant to be acted on once). Jack Hof has an interesting take on the relationship between <a href="http://soa-eda.blogspot.com/2006/11/how-eda-extends-soa-and-why-it-is.html" target="_blank">SOA
and EDA</a> especially his <a href="http://jack.vanhoof.soa.eda.googlepages.com/How_EDA_extends_SOA_and_why_it_is_important_-_Jack_van_Hoof_-_v6.0_-_2006.pdf" target="_blank">extended
pdf version</a> has some interesting ideas about how to realise SOA and EDA together
which contains a potential solution to the problem, basically by just combining EDA
and SOA and knowing when to implement which principles. 
</p>
        <p>
A related problem is what should our messages contain - are command messages even
required? Two slightly different takes on the problem are presented <a href="http://soa-eda.blogspot.com/2007/06/how-to-implement-loosely-coupled.html" target="_blank">here</a> and <a href="http://blogs.msdn.com/nickmalik/archive/2007/08/07/getting-away-from-request-and-response-soa.aspx" target="_blank">here</a>.
Thinking about events and messages has lead me to attempt to create (a very crude)
classification system for events that are related to a solution that I am developing
for a client.
</p>
        <ul>
          <li>
State-change events: no messages are published as long as the underlying values are
not updated, the message is related to a specific instance of an entity or service.
There is no expected behaviour for the recipient. 
</li>
          <li>
Scheduled events: messages are published at a certain frequency whether the values
are updated or not, all available data should be published simultaneously within a
single message or as multiple messages. There is no expected behaviour for the recipient. 
</li>
          <li>
Request or reservation events: these messages are requests for behaviour. A receiver
may safely ignore the message, send a negative response if it cannot fulfil the request
or a positive response if it can fulfil the request. The event needs to have a predefined
response message which the event source can understand and the response needs to be
able to be routed back to the source without the listener needing to have prior knowledge
of all sources. This is basically an event which initiates a dialogue between two
parties based on the <a href="http://msdn.microsoft.com/en-us/library/ms954638.aspx" target="_blank">reservation
pattern</a>. It is the requestors responsibility to coordinate the possible responses
and outcomes. There is an expected behaviour for recipients who return a positive
response but no prescribed behaviour for those who ignore the event or actively return
a negative response. 
</li>
          <li>
Command events: This must be an anti-pattern since a command denotes that the sender
expects the recipient to perform some specific task and thus exhibit an expected behaviour,
which is impossible in a loosely coupled, event-driven, service oriented world since
the sender does not know who is listening.</li>
        </ul>
        <p>
The first two event types are just statements, the third (reservation) is really just
a variation of a state-change event with additional semantics attached to it. Using
EDA the expected behaviour that is needed for a specific business process must be
realised with the help of some kind of process controller (notification server in
Jack Hof's world) which follows the traditional Command and Control (call stack) approach
for coordination but uses events to track what stage the overall process or task is
at.
</p>
      </body>
      <title>Is EDA the way to go?</title>
      <guid isPermaLink="false">http://www.nsilverbullet.net/PermaLink,guid,f25fa61e-6b11-4045-becf-b1cf8dc063bc.aspx</guid>
      <link>http://www.nsilverbullet.net/2008/07/01/IsEDATheWayToGo.aspx</link>
      <pubDate>Tue, 01 Jul 2008 10:37:26 GMT</pubDate>
      <description>&lt;p&gt;
I have been reading a lot about Event Driven Architecture (EDA) in relation to SOA
recently and while the ideas are very interesting and the benefits are alluring it
adds an additional complexity and uncertainty to the overall behaviour. Two good articles
on EDA are &lt;a title=http://martinfowler.com/eaaDev/EventCollaboration.html href="http://martinfowler.com/eaaDev/EventCollaboration.html" target=_blank&gt;http://martinfowler.com/eaaDev/EventCollaboration.html&lt;/a&gt; and &lt;a title=http://eaipatterns.com/docs/EDA.pdf href="http://eaipatterns.com/docs/EDA.pdf" target=_blank&gt;http://eaipatterns.com/docs/EDA.pdf&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
From my view the main problem is that when implementing a business process that spans
several services (for example entity services) we do not generally want the entity
services to react to events and then store or retrieve data based on the events because
this means that the services need to have some kind of knowledge of the expected behaviour
relating to the process - generally seen as a bad thing in SOA, as the northbound
- southbound dependencies get reversed. We also want to have some stability from a
callers perspective that the overall flow will be moved forward, traditionally done
by issuing a command. If events get turned into commands then I believe we will have
problems coordinating the different actors (presuming that the command event was only
meant to be acted on once). Jack Hof has an interesting take on the relationship between &lt;a href="http://soa-eda.blogspot.com/2006/11/how-eda-extends-soa-and-why-it-is.html" target=_blank&gt;SOA
and EDA&lt;/a&gt; especially his &lt;a href="http://jack.vanhoof.soa.eda.googlepages.com/How_EDA_extends_SOA_and_why_it_is_important_-_Jack_van_Hoof_-_v6.0_-_2006.pdf" target=_blank&gt;extended
pdf version&lt;/a&gt; has some interesting ideas about how to realise SOA and EDA together
which contains a potential solution to the problem, basically by just combining EDA
and SOA and knowing when to implement which principles. 
&lt;/p&gt;
&lt;p&gt;
A related problem is what should our messages contain - are command messages even
required? Two slightly different takes on the problem are presented &lt;a href="http://soa-eda.blogspot.com/2007/06/how-to-implement-loosely-coupled.html" target=_blank&gt;here&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/nickmalik/archive/2007/08/07/getting-away-from-request-and-response-soa.aspx" target=_blank&gt;here&lt;/a&gt;.
Thinking about events and messages has lead me to attempt to create (a very crude)
classification system for events that are related to a solution that I am developing
for a client.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
State-change events: no messages are published as long as the underlying values are
not updated, the message is related to a specific instance of an entity or service.
There is no expected behaviour for the recipient. 
&lt;li&gt;
Scheduled events: messages are published at a certain frequency whether the values
are updated or not, all available data should be published simultaneously within a
single message or as multiple messages. There is no expected behaviour for the recipient. 
&lt;li&gt;
Request or reservation events: these messages are requests for behaviour. A receiver
may safely ignore the message, send a negative response if it cannot fulfil the request
or a positive response if it can fulfil the request. The event needs to have a predefined
response message which the event source can understand and the response needs to be
able to be routed back to the source without the listener needing to have prior knowledge
of all sources. This is basically an event which initiates a dialogue between two
parties based on the &lt;a href="http://msdn.microsoft.com/en-us/library/ms954638.aspx" target=_blank&gt;reservation
pattern&lt;/a&gt;. It is the requestors responsibility to coordinate the possible responses
and outcomes. There is an expected behaviour for recipients who return a positive
response but no prescribed behaviour for those who ignore the event or actively return
a negative response. 
&lt;li&gt;
Command events: This must be an anti-pattern since a command denotes that the sender
expects the recipient to perform some specific task and thus exhibit an expected behaviour,
which is impossible in a loosely coupled, event-driven, service oriented world since
the sender does not know who is listening.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The first two event types are just statements, the third (reservation) is really just
a variation of a state-change event with additional semantics attached to it. Using
EDA the expected behaviour that is needed for a specific business process must be
realised with the help of some kind of process controller (notification server in
Jack Hof's world) which follows the traditional Command and Control (call stack) approach
for coordination but uses events to track what stage the overall process or task is
at.
&lt;/p&gt;</description>
      <comments>http://www.nsilverbullet.net/CommentView,guid,f25fa61e-6b11-4045-becf-b1cf8dc063bc.aspx</comments>
      <category>Architecture</category>
      <category>EDA</category>
      <category>SOA</category>
    </item>
    <item>
      <trackback:ping>http://www.nsilverbullet.net/Trackback.aspx?guid=a790b445-4d25-4a91-9db5-6657bcc5cd54</trackback:ping>
      <pingback:server>http://www.nsilverbullet.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.nsilverbullet.net/PermaLink,guid,a790b445-4d25-4a91-9db5-6657bcc5cd54.aspx</pingback:target>
      <dc:creator>Joshua Anthony</dc:creator>
      <wfw:comment>http://www.nsilverbullet.net/CommentView,guid,a790b445-4d25-4a91-9db5-6657bcc5cd54.aspx</wfw:comment>
      <wfw:commentRss>http://www.nsilverbullet.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a790b445-4d25-4a91-9db5-6657bcc5cd54</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was just surfing around on <a href="http://forums.microsoft.com">http://forums.microsoft.com</a> and
got a yellow screen of death! 
</p>
        <p>
          <a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RemembertoalwayshaveastaticCustomErrorsp_9CD5/msforumsyellowscreenofdeath_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="372" alt="msforumsyellowscreenofdeath" src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RemembertoalwayshaveastaticCustomErrorsp_9CD5/msforumsyellowscreenofdeath_thumb.png" width="644" border="0" />
          </a>
        </p>
        <p>
I must say I was slightly surprised. In web projects that I have been involved in
we have always added two customErrors pages one to handle generic errors which redirects
to an errorpage.aspx page and then a static html page errorpage.html which is only
used when an error occurs on the dynamic error page... A sample configuration using
location follows:
</p>
        <p>
        </p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a3557798-077c-4763-bd71-336a9f0da6f8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="xml:nogutter:nocontrols">&lt;configuration&gt;

&lt;system.web&gt;
&lt;customErrors mode="on" defaultRedirect="errorpage.aspx"/&gt;
&lt;/system.web&gt;

&lt;location path="errorpage.aspx"&gt;
&lt;system.web&gt;
&lt;customErrors mode="on" defaultRedirect="errorpage.html"/&gt;
&lt;/system.web&gt;
&lt;/location&gt;

&lt;/configuration&gt;
</pre>
        </div>
        <p>
        </p>
        <p>
That way if we have a problem with our application that affects the entire site, for
instance menu and navigational rendering, we can still show a nice error page with
a message like "The site is temporarily unavailable, please try again in a few minutes." 
</p>
      </body>
      <title>Remember to always have a static customErrors page</title>
      <guid isPermaLink="false">http://www.nsilverbullet.net/PermaLink,guid,a790b445-4d25-4a91-9db5-6657bcc5cd54.aspx</guid>
      <link>http://www.nsilverbullet.net/2008/06/26/RememberToAlwaysHaveAStaticCustomErrorsPage.aspx</link>
      <pubDate>Thu, 26 Jun 2008 11:10:37 GMT</pubDate>
      <description>&lt;p&gt;
I was just surfing around on &lt;a href="http://forums.microsoft.com"&gt;http://forums.microsoft.com&lt;/a&gt; and
got a yellow screen of death! 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RemembertoalwayshaveastaticCustomErrorsp_9CD5/msforumsyellowscreenofdeath_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="372" alt="msforumsyellowscreenofdeath" src="http://www.nsilverbullet.net/content/binary/WindowsLiveWriter/RemembertoalwayshaveastaticCustomErrorsp_9CD5/msforumsyellowscreenofdeath_thumb.png" width="644" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I must say I was slightly surprised. In web projects that I have been involved in
we have always added two customErrors pages one to handle generic errors which redirects
to an errorpage.aspx page and then a static html page errorpage.html which is only
used when an error occurs on the dynamic error page... A sample configuration using
location follows:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a3557798-077c-4763-bd71-336a9f0da6f8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="xml:nogutter:nocontrols"&gt;&amp;lt;configuration&amp;gt;

&amp;lt;system.web&amp;gt;
&amp;lt;customErrors mode="on" defaultRedirect="errorpage.aspx"/&amp;gt;
&amp;lt;/system.web&amp;gt;

&amp;lt;location path="errorpage.aspx"&amp;gt;
&amp;lt;system.web&amp;gt;
&amp;lt;customErrors mode="on" defaultRedirect="errorpage.html"/&amp;gt;
&amp;lt;/system.web&amp;gt;
&amp;lt;/location&amp;gt;

&amp;lt;/configuration&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
That way if we have a problem with our application that affects the entire site, for
instance menu and navigational rendering, we can still show a nice error page with
a message like "The site is temporarily unavailable, please try again in a few minutes." 
&lt;/p&gt;</description>
      <comments>http://www.nsilverbullet.net/CommentView,guid,a790b445-4d25-4a91-9db5-6657bcc5cd54.aspx</comments>
      <category>.Net</category>
      <category>Fixes</category>
      <category>Ramblings</category>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://www.nsilverbullet.net/Trackback.aspx?guid=0e2765b5-d5d8-42cf-ac57-b3b24b9adc4c</trackback:ping>
      <pingback:server>http://www.nsilverbullet.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.nsilverbullet.net/PermaLink,guid,0e2765b5-d5d8-42cf-ac57-b3b24b9adc4c.aspx</pingback:target>
      <dc:creator>Joshua Anthony</dc:creator>
      <wfw:comment>http://www.nsilverbullet.net/CommentView,guid,0e2765b5-d5d8-42cf-ac57-b3b24b9adc4c.aspx</wfw:comment>
      <wfw:commentRss>http://www.nsilverbullet.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0e2765b5-d5d8-42cf-ac57-b3b24b9adc4c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We have just had a major Active Directory issue that has affected the Team Foundation
Server instance that all the developers at the client that I am working at use. The
problem occured when some users where erased in the Active Directory and were subsequently
recreated with the same user names. These new user accounts cannot access the Team
Foundation Server.
</p>
        <p>
A large part of the problem was solved by just removing users from TFS and then putting
them back in again. This recreates all the wiring under the surface in TFS so that
the users can access the server but all their existing workspace info, pending checkins
and so on are lost locally yet exist in Team Foundation Server with a different Owner
under the same user name... The only way to tell them apart is by their SID and that
the original account may get suffixed with a number in workspace lists: AD\username:61. 
</p>
        <p>
My first thought was to remove all the workspaces and pending checkins and let people
manually resynch their projects. When I clicked undo pending change for a bunch of
changes in Attrice Sidekicks an unhandled exception popped up: "Object reference not
set to an instance of an object". I just can't undo these changes, there is a clue
to the problem when I try to unlock a changed file, I get an Unlock error: 
</p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c224a1a4-8b0e-4a73-842a-589d62384851" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="xml:nogutter:nocontrols">Failed to unlock $/Project/Path/file (TF14061: The workspace COMPUTERNAME; AD\username does not exist.)</pre>
        </div>
        <p>
I can't search for workspaces by username either, even doing a simple TFSSecurtiy
/i "ad\username" /server:TFSName for one of the affected accounts returns "Error:
The identity cannot be resolved." Since the original accounts have been removed from
Active Directory I cannot easily get hold of their SIDs for querying with TFSSecurity.
Attempting to delete the workspaces from the command line return the following error: 
</p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:996e6e82-ea8b-4bc2-8802-01fa529d295b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="xml:nogutter:nocontrols">TF14061: The workspace WORKSPACENAME;AD\username does not exist.</pre>
        </div>
        <p>
Things seemed pretty messed up... I found some clues as to what was required to get
things working again:<br /><a title="http://support.microsoft.com/kb/948679" href="http://support.microsoft.com/kb/948679">http://support.microsoft.com/kb/948679</a><br /><a href="http://support.microsoft.com/kb/823278">http://support.microsoft.com/kb/823278</a><br /><a title="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=454060&amp;SiteID=1" href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=454060&amp;SiteID=1">http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=454060&amp;SiteID=1</a></p>
        <p>
According to the KnowledgeBase articles trying to create a new project while TFS is
in this state may result in the following error:
</p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:60223321-090b-4415-871f-aa94d0c4b6df" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="xml:nogutter:nocontrols">TF30170: the plugin Microsoft.ProjectCreationWizard.WorkItemTracking Failed during task WITS from group WorkItemTracking</pre>
        </div>
        <p>
Basically Team Foundation Server has a bug that causes deleted accounts to not be
resynched correctly and SharePoint doesn't handle recreated user accounts at all -
you have to resynch them manually. Unfortunately in addition to this there is a bug
in TFS SP1 which prevents TfsAdminUtilI from correcting the SIDS! You get the following
error:
</p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:607fa7d5-0c70-4c4b-9170-bfc3328f6a60" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="xml:nogutter:nocontrols">ERROR: Could not access database.</pre>
        </div>
        <p>
In the end I managed to correct all the problems, here are the steps required:
</p>
        <ol>
          <li>
Contact Microsoft Support and request the hotfix for <a title="http://support.microsoft.com/kb/934216" href="http://support.microsoft.com/kb/934216">http://support.microsoft.com/kb/934216</a></li>
          <li>
Install the hotfix... 
</li>
          <li>
Follow the steps in <a href="http://support.microsoft.com/kb/948679">http://support.microsoft.com/kb/948679</a> to
resynch the users SIDs in TFS 
</li>
          <li>
Follow the steps in <a href="http://support.microsoft.com/kb/823278">http://support.microsoft.com/kb/823278</a> to
resynch the users in SharePoint 
</li>
          <li>
Recycle the TFS App Pool to force an update of all users and groups in TFS.</li>
        </ol>
        <p>
Look out with users who have their workspaces mapped to "c:\documents and settings\"
the new user accounts cannot necessarily access their old files there since they now
log on with a new account (which just happens to have the same name).
</p>
      </body>
      <title>Duplicate User Accounts in Active Directory</title>
      <guid isPermaLink="false">http://www.nsilverbullet.net/PermaLink,guid,0e2765b5-d5d8-42cf-ac57-b3b24b9adc4c.aspx</guid>
      <link>http://www.nsilverbullet.net/2008/06/26/DuplicateUserAccountsInActiveDirectory.aspx</link>
      <pubDate>Thu, 26 Jun 2008 08:55:10 GMT</pubDate>
      <description>&lt;p&gt;
We have just had a major Active Directory issue that has affected the Team Foundation
Server instance that all the developers at the client that I am working at use. The
problem occured when some users where erased in the Active Directory and were subsequently
recreated with the same user names. These new user accounts cannot access the Team
Foundation Server.
&lt;/p&gt;
&lt;p&gt;
A large part of the problem was solved by just removing users from TFS and then putting
them back in again. This recreates all the wiring under the surface in TFS so that
the users can access the server but all their existing workspace info, pending checkins
and so on are lost locally yet exist in Team Foundation Server with a different Owner
under the same user name... The only way to tell them apart is by their SID and that
the original account may get suffixed with a number in workspace lists: AD\username:61. 
&lt;/p&gt;
&lt;p&gt;
My first thought was to remove all the workspaces and pending checkins and let people
manually resynch their projects. When I clicked undo pending change for a bunch of
changes in Attrice Sidekicks an unhandled exception popped up: "Object reference not
set to an instance of an object". I just can't undo these changes, there is a clue
to the problem when I try to unlock a changed file, I get an Unlock error: 
&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c224a1a4-8b0e-4a73-842a-589d62384851" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="xml:nogutter:nocontrols"&gt;Failed to unlock $/Project/Path/file (TF14061: The workspace COMPUTERNAME; AD\username does not exist.)&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
I can't search for workspaces by username either, even doing a simple TFSSecurtiy
/i "ad\username" /server:TFSName for one of the affected accounts returns "Error:
The identity cannot be resolved." Since the original accounts have been removed from
Active Directory I cannot easily get hold of their SIDs for querying with TFSSecurity.
Attempting to delete the workspaces from the command line return the following error: 
&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:996e6e82-ea8b-4bc2-8802-01fa529d295b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="xml:nogutter:nocontrols"&gt;TF14061: The workspace WORKSPACENAME;AD\username does not exist.&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Things seemed pretty messed up... I found some clues as to what was required to get
things working again:&lt;br&gt;
&lt;a title="http://support.microsoft.com/kb/948679" href="http://support.microsoft.com/kb/948679"&gt;http://support.microsoft.com/kb/948679&lt;/a&gt; 
&lt;br&gt;
&lt;a href="http://support.microsoft.com/kb/823278"&gt;http://support.microsoft.com/kb/823278&lt;/a&gt;
&lt;br&gt;
&lt;a title="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=454060&amp;amp;SiteID=1" href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=454060&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=454060&amp;amp;SiteID=1&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
According to the KnowledgeBase articles trying to create a new project while TFS is
in this state may result in the following error:
&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:60223321-090b-4415-871f-aa94d0c4b6df" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="xml:nogutter:nocontrols"&gt;TF30170: the plugin Microsoft.ProjectCreationWizard.WorkItemTracking Failed during task WITS from group WorkItemTracking&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Basically Team Foundation Server has a bug that causes deleted accounts to not be
resynched correctly and SharePoint doesn't handle recreated user accounts at all -
you have to resynch them manually. Unfortunately in addition to this there is a bug
in TFS SP1 which prevents TfsAdminUtilI from correcting the SIDS! You get the following
error:
&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:607fa7d5-0c70-4c4b-9170-bfc3328f6a60" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="xml:nogutter:nocontrols"&gt;ERROR: Could not access database.&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
In the end I managed to correct all the problems, here are the steps required:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Contact Microsoft Support and request the hotfix for &lt;a title="http://support.microsoft.com/kb/934216" href="http://support.microsoft.com/kb/934216"&gt;http://support.microsoft.com/kb/934216&lt;/a&gt; 
&lt;li&gt;
Install the hotfix... 
&lt;li&gt;
Follow the steps in &lt;a href="http://support.microsoft.com/kb/948679"&gt;http://support.microsoft.com/kb/948679&lt;/a&gt; to
resynch the users SIDs in TFS 
&lt;li&gt;
Follow the steps in &lt;a href="http://support.microsoft.com/kb/823278"&gt;http://support.microsoft.com/kb/823278&lt;/a&gt; to
resynch the users in SharePoint 
&lt;li&gt;
Recycle the TFS App Pool to force an update of all users and groups in TFS.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Look out with users who have their workspaces mapped to "c:\documents and settings\"
the new user accounts cannot necessarily access their old files there since they now
log on with a new account (which just happens to have the same name).
&lt;/p&gt;</description>
      <comments>http://www.nsilverbullet.net/CommentView,guid,0e2765b5-d5d8-42cf-ac57-b3b24b9adc4c.aspx</comments>
      <category>.Net</category>
      <category>Bugs</category>
      <category>Fixes</category>
      <category>Team System</category>
    </item>
    <item>
      <trackback:ping>http://www.nsilverbullet.net/Trackback.aspx?guid=864e0389-f756-41a8-a3e2-6b156fe1ef2b</trackback:ping>
      <pingback:server>http://www.nsilverbullet.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.nsilverbullet.net/PermaLink,guid,864e0389-f756-41a8-a3e2-6b156fe1ef2b.aspx</pingback:target>
      <dc:creator>Joshua Anthony</dc:creator>
      <wfw:comment>http://www.nsilverbullet.net/CommentView,guid,864e0389-f756-41a8-a3e2-6b156fe1ef2b.aspx</wfw:comment>
      <wfw:commentRss>http://www.nsilverbullet.net/SyndicationService.asmx/GetEntryCommentsRss?guid=864e0389-f756-41a8-a3e2-6b156fe1ef2b</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <h5>This is a guest post by <a href="http://www.linkedin.com/in/herbjorn" target="_blank">Herbjörn
Wilhelmsen</a> @ Objectware 
</h5>
        <p>
        </p>
        <p>
        </p>
        <h2>After working for years with business people and SOA Jim Webber has come around
to thinking that fighting against real world complexity is neither successful nor
valuable.
</h2>
        <img style="FLOAT: right; MARGIN: 15px" alt="Jim Webber handling spaghetti?" src="http://www.nsilverbullet.net/content/binary/Jim.Webber.2008.250.jpg" border="0" />
        <p>
          <a href="http://jim.webber.name/" target="_blank">Dr Jim "World Wide" Webber</a> -
an author as well as global architecture lead for <a href="http://www.thoughtworks.com/" target="_blank">Thoughtworks</a> -
gave an interview last month after finishing his "Guerilla SOA" presentation at the <a href="http://www.expertzone.se/dev08/speakers.aspx" target="_blank">Developer
Summit 2008</a> conference in Stockholm. 
</p>
        <h4>Watch the interview to see Jim Webber
</h4>
        <ul>
          <li>
Say that <b>business people are spaghettiheads</b>, tell us why <b>business people
scare him</b> and that <b>business people should be the architects</b> of our projects! 
</li>
          <li>
            <b>Come down hard</b> on message oriented middleware (<b>ESB</b>’s) and <b>WSDL</b></li>
          <li>
Give his <b>definition of a what a service should be</b></li>
          <li>
Talk about why <b><a href="http://jim.webber.name/2005/04/16/26e0bdcf-65de-4cce-9c0b-1f35bc43620e.aspx" target="_blank">M<a><a href="http://jim.webber.name/2005/02/02/31a34962-c0da-4ec2-93ff-a8c99f3659f1.aspx" target="_blank">E</a><a href="http://savas.parastatidis.name/2004/11/09/92ede84c-ca1f-41ab-8feb-8ba50d07e86f.aspx" target="_blank">S</a><a href="http://savas.parastatidis.name/2005/01/29/544a6902-40e1-47e8-a51c-18776f3dd036.aspx" target="_blank">T</a> and <a href="http://www.ssdl.org/" target="_blank">SSDL</a> makes
for better SOA
</a></a></b></li>
          <li>
Describe how <b>MEST and SSDL helps you handle versioning problems in an SOA</b></li>
          <li>
Talk about <b>his next big thing: Middleware!</b> (despite his grudge for ESB’s) 
</li>
        </ul>
        <p>
        </p>
        <p>
Jim does a great job - he explains things that seem contradictory in a very smooth
and straightforward way and in the end you just can't help yourself: You have to like
him! 
</p>
        <p>
Thanks for the interview Jim! 
</p>
        <p>
I also want to thank my colleague Joshua Anthony (the owner of this blog) for standing
behind the camera and doing a lot of post production work! 
</p>
        <p>
video://jim%20webber%201.flv,jimwebber_part1.jpg 
</p>
        <p>
video://jim%20webber%202.flv,jimwebber_part2.jpg 
</p>
        <p>
          <b>Update</b>: 
<br />
During the interview Jim talked about the SOYA project and a case study. Here are
some links: 
</p>
        <ul>
          <li>
            <a href="http://soya.sourceforge.net/" target="_blank">SOYA</a> @ sourceforge 
</li>
          <li>
A description of the <a href="http://soya.sourceforge.net/files/thesis.pdf " target="_blank">LIXI
case study</a> can be found inside Patric Fornasier’s master thesis 
</li>
        </ul>
      </body>
      <title>Jim Webber: "Business people are spaghettiheads!"</title>
      <guid isPermaLink="false">http://www.nsilverbullet.net/PermaLink,guid,864e0389-f756-41a8-a3e2-6b156fe1ef2b.aspx</guid>
      <link>http://www.nsilverbullet.net/2008/05/29/JimWebberBusinessPeopleAreSpaghettiheads.aspx</link>
      <pubDate>Thu, 29 May 2008 06:29:20 GMT</pubDate>
      <description>&lt;p&gt;
&lt;h5&gt;This is a guest post by &lt;a href="http://www.linkedin.com/in/herbjorn" target=_blank&gt;Herbjörn
Wilhelmsen&lt;/a&gt;&amp;nbsp;@ Objectware 
&lt;/h5&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;h2&gt;After working for years with business people and SOA Jim Webber has come around
to thinking that fighting against real world complexity is neither successful nor
valuable.
&lt;/h2&gt;
&lt;img style="FLOAT: right; MARGIN: 15px" alt="Jim Webber handling spaghetti?" src="http://www.nsilverbullet.net/content/binary/Jim.Webber.2008.250.jpg" border=0&gt; 
&lt;p&gt;
&lt;a href="http://jim.webber.name/" target=_blank&gt;Dr Jim "World Wide" Webber&lt;/a&gt; - an
author as well as global architecture lead for &lt;a href="http://www.thoughtworks.com/" target=_blank&gt;Thoughtworks&lt;/a&gt; -
gave an interview last month after finishing his "Guerilla SOA" presentation at the &lt;a href="http://www.expertzone.se/dev08/speakers.aspx" target=_blank&gt;Developer
Summit 2008&lt;/a&gt; conference in Stockholm. &gt;
&lt;/p&gt;
&lt;h4&gt;Watch the interview to see Jim Webber
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
Say that &lt;b&gt;business people are spaghettiheads&lt;/b&gt;, tell us why &lt;b&gt;business people
scare him&lt;/b&gt; and that &lt;b&gt;business people should be the architects&lt;/b&gt; of our projects! 
&lt;li&gt;
&lt;b&gt;Come down hard&lt;/b&gt; on message oriented middleware (&lt;b&gt;ESB&lt;/b&gt;’s) and &lt;b&gt;WSDL&lt;/b&gt; 
&lt;li&gt;
Give his &lt;b&gt;definition of a what a service should be&lt;/b&gt; 
&lt;li&gt;
Talk about why &lt;b&gt;&lt;a href="http://jim.webber.name/2005/04/16/26e0bdcf-65de-4cce-9c0b-1f35bc43620e.aspx" target=_blank&gt;M&lt;a&gt;&lt;a href="http://jim.webber.name/2005/02/02/31a34962-c0da-4ec2-93ff-a8c99f3659f1.aspx" target=_blank&gt;E&lt;/a&gt;&lt;a href="http://savas.parastatidis.name/2004/11/09/92ede84c-ca1f-41ab-8feb-8ba50d07e86f.aspx" target=_blank&gt;S&lt;/a&gt;&lt;a href="http://savas.parastatidis.name/2005/01/29/544a6902-40e1-47e8-a51c-18776f3dd036.aspx" target=_blank&gt;T&lt;/a&gt; and &lt;a href="http://www.ssdl.org/" target=_blank&gt;SSDL&lt;/a&gt; makes
for better SOA
&lt;/b&gt; 
&lt;li&gt;
Describe how &lt;b&gt;MEST and SSDL helps you handle versioning problems in an SOA&lt;/b&gt; 
&lt;li&gt;
Talk about &lt;b&gt;his next big thing: Middleware!&lt;/b&gt; (despite his grudge for ESB’s) 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Jim does a great job - he explains things that seem contradictory in a very smooth
and straightforward way and in the end you just can't help yourself: You have to like
him! 
&lt;/p&gt;
&lt;p&gt;
Thanks for the interview Jim! 
&lt;/p&gt;
&lt;p&gt;
I also want to thank my colleague Joshua Anthony (the owner of this blog) for standing
behind the camera and doing a&amp;nbsp;lot of post production work! 
&lt;/p&gt;
&lt;p&gt;
video://jim%20webber%201.flv,jimwebber_part1.jpg 
&lt;/p&gt;
&lt;p&gt;
video://jim%20webber%202.flv,jimwebber_part2.jpg 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Update&lt;/b&gt;: 
&lt;br&gt;
During the interview Jim talked about the SOYA project and a case study. Here are
some links: 
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://soya.sourceforge.net/" target=_blank&gt;SOYA&lt;/a&gt; @ sourceforge 
&lt;/li&gt;
&lt;li&gt;
A description of the &lt;a href="http://soya.sourceforge.net/files/thesis.pdf " target=_blank&gt;LIXI
case study&lt;/a&gt; can be found inside Patric Fornasier’s master thesis 
&lt;/li&gt;
&lt;/ul&gt;
&gt;</description>
      <comments>http://www.nsilverbullet.net/CommentView,guid,864e0389-f756-41a8-a3e2-6b156fe1ef2b.aspx</comments>
      <category>Architecture</category>
      <category>Interviews</category>
      <category>SOA</category>
    </item>
  </channel>
</rss>