<?xml-stylesheet type="text/xsl" href="/rss.xsl" media="screen"?><rss version="2.0"><channel><title>softlogger Latest Articles ::BizTalk</title><link>http://softlogger.com</link><description>softlogger Latest Articles ::BizTalk</description><ttl>180</ttl><item><title>patterns and practices Complete Catalog</title><link>http://softlogger.com/19811/BizTalk/patterns-and-practices-complete-catalog.aspx</link><description>&lt;p&gt;What's the full patterns &amp;amp; practices catalog?&amp;nbsp; I created a quick index of the patterns &amp;amp; practices catalog since I've needed to hunt down a few things.&amp;nbsp; I figured this might be useful to share. &lt;p&gt;&lt;strong&gt;Views&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/practices/bb969097.aspx" target="_blank"&gt;Complete Catalog&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms998404.aspx" target="_blank"&gt;Security Engineering Index&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms998408.aspx" target="_blank"&gt;Security Guidance for Applications Index&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms998408.aspx" target="_blank"&gt;Security Guidance for .NET Framework 2.0&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Blocks &lt;/strong&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480456.aspx" target="_blank"&gt;Caching Application Block&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480457.aspx" target="_blank"&gt;Cryptography Application Block&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480458.aspx" target="_blank"&gt;Data Access Application Block&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480461.aspx" target="_blank"&gt;Exception Handling Application Block&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480464.aspx" target="_blank"&gt;Logging Application Block&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb410104.aspx" target="_blank"&gt;Policy Injection Application Block&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480465.aspx" target="_blank"&gt;Security Application Block&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480450.aspx" target="_blank"&gt;Smart Client - Composite Application UI Block&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb410105.aspx" target="_blank"&gt;Validation Application Block&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Enterprise Library&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480453.aspx" target="_blank"&gt;Enterprise Library&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Factories&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480471.aspx" target="_blank"&gt;Mobile Client Software Factory&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480482.aspx" target="_blank"&gt;Smart Client Software Factory&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb264518.aspx" target="_blank"&gt;Web Client Software Factory&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb931187.aspx" target="_blank"&gt;Web Service Software Factory: Modeling Edition&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Guides&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms954595.aspx" target="_blank"&gt;Application Architecture for .NET: Designing Applications and Services&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms978732.aspx" target="_blank"&gt;Application Interoperability: Microsoft .NET and J2EE&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms978378.aspx" target="_blank"&gt;Authentication in ASP.NET: .NET Security Guidance&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa302415.aspx" target="_blank"&gt;Building Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms978498.aspx" target="_blank"&gt;Caching Architecture Guide for .NET Framework Applications&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms978510.aspx" target="_blank"&gt;Data Access Architecture Guide&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms954585.aspx" target="_blank"&gt;Deploying .NET Framework-based Applications&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms978655.aspx" target="_blank"&gt;Describing the Enterprise Architectural Space&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms978631.aspx" target="_blank"&gt;Design and Implementation Guidelines for Web Clients&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms954586.aspx" target="_blank"&gt;Designing Application-Managed Authorization&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms978496.aspx" target="_blank"&gt;Designing Data Tier Components and Passing Data Through Tiers&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms954599.aspx" target="_blank"&gt;Exception Management Architecture Guide&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms978650.aspx" target="_blank"&gt;Guidelines for Application Integration&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms998530.aspx" target="_blank"&gt;Improving .NET Application Performance and Scalability&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms994921.aspx" target="_blank"&gt;Improving Web Application Security: Threats and Countermeasures&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb931189.aspx" target="_blank"&gt;Microsoft ESB Guidance for BizTalk Server 2006 R2&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb924375.aspx" target="_blank"&gt;Performance Testing Guidance for Web Applications&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms998382.aspx" target="_blank"&gt;Security Engineering Explained&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms998506.aspx" target="_blank"&gt;Smart Client Architecture and Design Guide&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms998239.aspx" target="_blank"&gt;Team Development with Visual Studio .NET and Visual SourceSafe&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb668991.aspx" target="_blank"&gt;Team Development with Visual Studio Team Foundation Server&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms998205.aspx" target="_blank"&gt;Testing .NET Application Blocks - Version 1.0&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms978516.aspx" target="_blank"&gt;Threat Modeling Web Applications&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Patterns&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms998446.aspx" target="_blank"&gt;Data Patterns&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms998469.aspx" target="_blank"&gt;Enterprise Solution Patterns Using Microsoft .NET&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms978729.aspx" target="_blank"&gt;Integration Patterns&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480545.aspx" target="_blank"&gt;Web Service Security Guidance&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718948.aspx" target="_blank"&gt;Guidance Automation Toolkit (GAT) and Guidance Automation Extensions (GAX)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/GuidanceExplorer" target="_blank"&gt;Guidance Explorer&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8019185" width="1" height="1"&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=19811"&gt;</description><author>J.D. Meiers Blog</author><pubDate>2008-03-04T00:00:00</pubDate><category>BizTalk</category></item><item><title>Interactive BizTalk Capabilities Poster</title><link>http://softlogger.com/19559/BizTalk/interactive-biztalk-capabilities-poster.aspx</link><description>&lt;p&gt;
Check it out - &lt;a href="http://www.microsoft.com/biztalk/capabilities/reader/"&gt;http://www.microsoft.com/biztalk/capabilities/reader/&lt;/a&gt;&amp;nbsp;
Built with Silverlight (by little ol me ;-)).&amp;nbsp; I think its the first time I've
built something that went up on microsoft.com for sure.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.masteringbiztalk.com/blogs/jon/aggbug.ashx?id=1fb4eee3-18ed-4815-9827-0c22dcc95da4" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
Check out my &lt;a href="http://www.pluralsight.com/courses/AppliedBizTalkServer2006R2.aspx"&gt;BizTalk
R2 Training&lt;/a&gt;. &lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=19559"&gt;</description><author>Jon Flanders Blog</author><pubDate>2008-02-19T00:00:00</pubDate><category>BizTalk</category></item><item><title>BizTalk 2006, WCF (basicHttpBinding), Adding Web Reference will go in end less loop.</title><link>http://softlogger.com/15786/BizTalk/biztalk-2006-wcf-basichttpbinding--adding-web-reference-will-go-in-end-less-loop.aspx</link><description>&lt;p&gt;When I tried to add a "Web Reference" to&amp;nbsp;a WCF service (basicHttpBinding), I encountered following behaviors&lt;/p&gt; &lt;p&gt;1. Either it will throw an exception showing "Failed to&amp;nbsp;add Web Reference"&amp;nbsp;and no more clue anywhere, OR&lt;/p&gt; &lt;p&gt;2. Message saying "This page is accessing information that is not under its control. This poses a security risk. Do you want to continue?" it wont wait for your reply, it will go on endless loop until you click "NO" (then you need to close some 50 or windows), OR&lt;/p&gt; &lt;p&gt;3. It will throw an exception message saying, "Could not generate BizTalk files. Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index"&lt;/p&gt; &lt;p&gt;I attached following screen shots for reference:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.digitaldeposit.net/blog/images/BizTalk2006WCFbasicHttpBindingAddingWeb_FA20/image02.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="309" src="http://www.digitaldeposit.net/blog/images/BizTalk2006WCFbasicHttpBindingAddingWeb_FA20/image0_thumb.png" width="440" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(OR)&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.digitaldeposit.net/blog/images/BizTalk2006WCFbasicHttpBindingAddingWeb_FA20/image013.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="81" src="http://www.digitaldeposit.net/blog/images/BizTalk2006WCFbasicHttpBindingAddingWeb_FA20/image0_thumb5.png" width="449" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Tweaking the WCF config file with different setting didn't give me any luck. At last I figured out the issue is due to the namespace declaration for the WCF service. Just removing the namespace declaration and defaulting it to use "&lt;b&gt;http://tempuri.org/&lt;/b&gt;" (which is not the best practice) solved the problem.&lt;/p&gt; &lt;p&gt;Before:&lt;/p&gt; &lt;p&gt;&lt;em&gt;[ServiceContract(Name = "BackOfficeServices", Namespace = http://companyurl/Service/BackOffice)]&lt;/em&gt;&lt;/p&gt; &lt;p&gt;After:&lt;/p&gt; &lt;p&gt;&lt;em&gt;[ServiceContract(Name = "BackOfficeServices"]&lt;/em&gt;&lt;/p&gt; &lt;p&gt;I can't really justify the reason, but I guess it will help someone.&lt;/p&gt; &lt;p&gt;Nandri!&lt;/p&gt; &lt;p&gt;Saravana&lt;/p&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=15786"&gt;</description><author>Saravana Kumar in Biztalk                                                                           </author><pubDate>2008-01-05T00:00:00</pubDate><category>BizTalk</category></item><item><title>Detect CLR version under which your BizTalk service is running.</title><link>http://softlogger.com/15817/BizTalk/detect-clr-version-under-which-your-biztalk-service-is-running.aspx</link><description>&lt;p&gt;It's becoming more and more eminent to understand under which CLR version (1.0, 1.1 or 2.0) the BizTalk runtime, In-Process host is running. I've explained in &lt;a href="http://www.digitaldeposit.net/blog/2007/05/biztalk-2004-and-net-20.html"&gt;my previous post&lt;/a&gt; the various factors that influence loading appropriate CLR versions and also how you can make use of the config file to force a specific version of CLR is always loaded. &lt;/p&gt; &lt;p&gt;There is one more query raised, what happens if you install .NET Framework 3.0 on your BizTalk server (both 2004 and 2006)? The effect of installing .NET 3.0&amp;nbsp;doesn't introduce that&amp;nbsp;much behavior difference when compared to&amp;nbsp;installing .NET 2.0 on a BizTalk 2004 machine (built using .NET 1.1 with CLR 1.0). Because .NET&amp;nbsp;3.0 is still based on .NET 2.0 and shares the same compilers and Common Language Runtime (CLR 2.0).&amp;nbsp;See the following posts from &lt;a href="http://blogs.msdn.com/somasegar/archive/2006/06/09/624300.aspx"&gt;Somasegar&lt;/a&gt;&amp;nbsp;and &lt;a href="http://blogs.msdn.com/jasonz/archive/2006/06/09/624629.aspx"&gt;Jason Zanders&lt;/a&gt;&amp;nbsp;(comments are more interesting on the both the posts)to see the effect of .NET 3.0.&lt;/p&gt; &lt;p&gt;With all this confusions around different versions of .NET and different versions of BizTalk and different Service Packs, there will certainly be a situation where developers and administrators need to figure out the version of CLR under which the BizTalk Runtime is running. This is where &lt;a href="http://www.microsoft.com/technet/sysinternals/utilities/ProcessExplorer.mspx"&gt;Process Explorer&lt;/a&gt; comes to our rescue. &lt;/p&gt; &lt;p&gt;Process explorer's top window shows a list of currently active processes, and the bottom windows shows either the handles opened by&amp;nbsp;the selected&amp;nbsp; process or it shows the DLL's and memory mapped files that the selected process has loaded. You need to set the appropriate mode from the menu item "View-&amp;gt; Lower Pane View". In our case we need to figure out the version of &lt;font color="#ff0000"&gt;Common Language Runtime core dll (mscorwks.dll)&lt;/font&gt; loaded into the BizTalk runtime process (BtsNtSvc.exe). So, we'll set the "Lower Pane View" to DLL's (or Ctrl + D).&lt;/p&gt; &lt;p&gt;Also, make sure the following columns are visible &lt;em&gt;Description&lt;/em&gt;, &lt;em&gt;Image Path&lt;/em&gt;, and &lt;em&gt;Version&lt;/em&gt;. To do so, click on "View" menu and select "Select Columns" and in the "Process Image" tab select appropriate columns.&lt;/p&gt; &lt;p&gt;&amp;nbsp;The following screen shot is taken from a machine running BizTalk 2006. You can see clearly from the bottom pane the version of CLR running is 2.0 and physical dll is loaded from the location "C:\WINDOWS\Microsoft.NET\Framework\&lt;font color="#ff0000"&gt;v2.0.50727&lt;/font&gt;\mscorwks.dll". BTW, .NET 3.0 is installed in this particular machine, which also proves .NET 3.0 still uses CLR 2.0. In BizTalk 2006 box its quite straight forward it's all .NET 2.0. Things will become more interesting in BizTalk 2004 scenario.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.digitaldeposit.net/blog/images/DetectCLRversionunderwhichyourBizTalkse_E66D/image010.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="278" src="http://www.digitaldeposit.net/blog/images/DetectCLRversionunderwhichyourBizTalkse_E66D/image0_thumb6.png" width="504" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Nandri!&lt;/p&gt; &lt;p&gt;Saravana&lt;/p&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=15817"&gt;</description><author>Saravana Kumar in Biztalk                                                                           </author><pubDate>2008-01-05T00:00:00</pubDate><category>BizTalk</category></item><item><title>Implement Caching for your BizTalk applications using "static" classes and methods.</title><link>http://softlogger.com/15779/BizTalk/implement-caching-for-your-biztalk-applications-using-static-classes-and-methods.aspx</link><description>&lt;p&gt;&lt;font color="#ff0000"&gt;UPDATED:&lt;/font&gt; 24th August 2007, to reflect &lt;a href="http://seroter.wordpress.com/2007/08/17/behavior-of-static-objects-in-biztalk-runtime/"&gt;Richard Seroter's&lt;/a&gt; comment&lt;/p&gt; &lt;p&gt;There is no necessity to explain the importance of caching in any server based developments like BizTalk, ASP .NET etc. You need to plan early in your development cycle to cache resources in order to make most out of your limited server resources. &lt;/p&gt; &lt;p&gt;In BizTalk applications, it's quite common to lookup a&amp;nbsp;data store&amp;nbsp;to pickup a value, at different stages like custom Adapters, Pipelines, Orchestration, etc. The data store could be a custom SQL database/table,&amp;nbsp; a XML File, Active directory etc etc. Whatever the data store is, if you are doing the lookup for every message you process without any caching, its going to be an expensive and useless operation.&lt;/p&gt; &lt;p&gt;Due to the nature of BizTalk architecture and behavior of .NET run-time, its very easy to implement a caching logic just with a static class and a static method as shown below:&lt;/p&gt; &lt;p&gt;&lt;em&gt;public &lt;strong&gt;static&lt;/strong&gt; class CacheHelper&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private &lt;strong&gt;static&lt;/strong&gt; Dictionary&amp;lt;string, string&amp;gt; _authorIds = null;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;strong&gt;static&lt;/strong&gt; string GetAuthorName(string authorId)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_authorIds == null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine("Cache is empty. So populating the cache...");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _authorIds = new Dictionary&amp;lt;string, string&amp;gt;();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lock (_authorIds)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _authorIds.Add("2FC0CF1D-E107", "Matthew Johnstone");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _authorIds.Add("71F5C860-80FA", "Carl Reynolds");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _authorIds.Add("158FF294-1A89", "Robert Perkins");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _authorIds.Add("A71AE681-9C39", "Michael Killey");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _authorIds.Add("58794661-A9A3", "Saravana Kumar");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine("Cache list is pre-populated. Value is going to be taken from the cache.");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string authName = _authorIds[authorId];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (authName != string.Empty)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return authName;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Exception("Author cannot be found with id :" + authorId);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/em&gt;&lt;/p&gt; &lt;p&gt;In .NET static variables are maintained per&amp;nbsp;Common Language Runtime (CLR)&amp;nbsp;"AppDomain". We can just exploit this behavior of .NET for our caching needs.&amp;nbsp;&lt;/p&gt; &lt;p&gt;Inside the BizTalk server host instances,&amp;nbsp;several subservices will be running. The exact services can be found in the adm_HostInstance_SubServices table in the BizTalk Server Management database. The services are listed here for reference:&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="400" border="1" unselectable="on"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&lt;b&gt;Service&lt;/b&gt;&lt;/td&gt; &lt;td valign="top" width="200"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Caching &lt;/td&gt; &lt;td valign="top" width="200"&gt;Used internally by BizTalk Server to cache configuration information for the other services&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Endpoint Manager&lt;/td&gt; &lt;td valign="top" width="200"&gt;Responsible for hosting receive and send ports including adapters and pipelines&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Tracking&lt;/td&gt; &lt;td valign="top" width="200"&gt;Responsible for moving data out of the MessageBox database and into the BAM or Tracking databases as appropriate&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;XLANG/s&lt;/td&gt; &lt;td valign="top" width="200"&gt;Host engine for BizTalk Server orchestrations&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;MSMQT&lt;/td&gt; &lt;td valign="top" width="200"&gt;MSMQT adapter service; serves as a replacement for the MSMQ protocol when interacting with BizTalk Server&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;The BizTalk host instance simply acts as a container to host these other services. When the service is started, each of these subservices is started as well. They handle all of the processing related to the messaging and orchestration engines in BizTalk Server. For isolated hosts, the Endpoint Manager is the only service that is loaded into the process. Isolated hosts are only intended to be used for hosting adapters that send and/or receive messages.&lt;/p&gt; &lt;p&gt;So, inside the BizTalk host instance by default there will be one .NET "AppDomain" created per each BizTalk SubService (EPM, XLANG, etc). Majority of our custom code will be running under the "AppDomains" either created for EPM (if you are doing any&amp;nbsp;messaging related stuff, example custom pipeline components and any assemblies you reference)&amp;nbsp;or XLANG (any custom orchestration and any assemblies you reference).&amp;nbsp;Both the "AppDomains" will&amp;nbsp;be&amp;nbsp;hosted inside the BizTalk host instance. &lt;/p&gt; &lt;p&gt;As I mentioned earlier, in .NET static variables are maintained per&amp;nbsp;Common Language Runtime (CLR)&amp;nbsp;"AppDomain".&amp;nbsp;Any static data you hold lives inside the "AppDomain" for the life time of the "AppDomain", in BizTalk term that means from the time BizTalk Host Instance is started, corresponding DLL's (pipeline components, pipelines, orchestrations, in general&amp;nbsp;any custom assembly like schemas, maps, helper classes) are loaded (assemblies get loaded into "AppDomain" on demand)&amp;nbsp;into the "AppDomains" (EPM, XLANG, etc)&amp;nbsp;to the time BizTalk host instance is restarted.&lt;/p&gt; &lt;p&gt;We can utilize this behavior of .NET run-time, to create a pattern to cache values, which doesn't change very often. Lets see the behavior with an example.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Here is an example using Orchestration:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;In the above code snippet (showed earlier), I just added few Name-Value pair items to "authorsIds" collection, in real world scenarios we might need to populate them from a data store like SQL database. If we are doing that database lookup for every message, then its going to be unnecessary roundtrip's to the database and wastage of server resource.&lt;/p&gt; &lt;p&gt;This utility class can now be used in any of your custom BizTalk solution like Adapters, Pipelines, Orchestrations etc.&amp;nbsp; The following Orchestration shows its usage.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.digitaldeposit.net/blog/images/ImplementCachingforyourBizTalkapplicati_A155/image.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="372" alt="Orchestration" src="http://www.digitaldeposit.net/blog/images/ImplementCachingforyourBizTalkapplicati_A155/image_thumb.png" width="275" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The message assignment shape got the following lines of code.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;MSG_AUTHOR_OUT = MSG_AUTHOR_IN;&lt;br&gt;MSG_AUTHOR_OUT.Name = Utility.CacheHelper.GetAuthorName(MSG_AUTHOR_IN.Id);&lt;/strong&gt;  &lt;p&gt;When I Build, Deploy and run the sample, for the first message the DebugView showed the following output:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.digitaldeposit.net/blog/images/ImplementCachingforyourBizTalkapplicati_A155/image_3.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="37" alt="image" src="http://www.digitaldeposit.net/blog/images/ImplementCachingforyourBizTalkapplicati_A155/image_thumb_3.png" width="497" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;For subsequent messages (I posted 4), DebugView showed the following output:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.digitaldeposit.net/blog/images/ImplementCachingforyourBizTalkapplicati_A155/image_4.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="91" alt="image" src="http://www.digitaldeposit.net/blog/images/ImplementCachingforyourBizTalkapplicati_A155/image_thumb_4.png" width="458" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You can make sure the cache is repopulating by restarting the BizTalk host instance (NT Service).&lt;/p&gt; &lt;p&gt;NOTE: If you are using isolated adapters like HTTP/SOAP the data will be cached under the IIS worker process, so to reset the cache you need to reset IIS.&lt;/p&gt; &lt;p&gt;This technique is simple to implement and easy to use. If you want more advanced caching like cache expiration, dependency etc then you can consider using Enterprise Library caching application block.&lt;/p&gt; &lt;p&gt;&lt;a title="Caching Demo Download" href="http://www.digitaldeposit.net/blog/samples/CachingDemo.zip"&gt;Download the full sample here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Nandri!&lt;/p&gt; &lt;p&gt;Saravana&lt;/p&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=15779"&gt;</description><author>Saravana Kumar in Biztalk                                                                           </author><pubDate>2008-01-05T00:00:00</pubDate><category>BizTalk</category></item><item><title>Orchestration - Handle SOAP Exception and deal with Suspended (resumable) messages</title><link>http://softlogger.com/15802/BizTalk/orchestration--handle-soap-exception-and-deal-with-suspended-resumable-messages.aspx</link><description>&lt;p&gt;The main reason for this blog post is due to this &lt;a href="http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.biztalk.orchestration&amp;amp;tid=2f72c983-4607-44b3-bed2-8e9f9b3b71ea&amp;amp;p=1"&gt;newsgroup post&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Download Sample from &lt;a href="http://www.digitaldeposit.net/blog/samples/SOAPExceptionHandler.zip"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Step #1: Catching SOAP Exception:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Whenever you call a Web service it's a good practice to handle the SOAP exception specifically rather than just leaving the orchestration to throw an un-handled exception which will result in orchestration service instance and all the referenced message instances being suspended. As shown in the following Orchestration diagram, handling a&amp;nbsp; SOAP exception is straight forward. Place your "Send" shape inside a "Scope" and add an Exception Handler with "Exception Object Type" configured to &lt;em&gt;System.Web.Services.Protocols.SoapException&amp;nbsp;&lt;/em&gt;(You need&amp;nbsp;to add reference to "System.Web.Services"). The "Message Assignment" shape&amp;nbsp;&amp;nbsp;inside the catch block got this simple statement&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;SOAP_EXCEPTION_MESSAGE = soapException.Detail.InnerXml;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Where SOAP_EXCEPTION_MESSAGE is an Orchestration message of type System.String and soapException is the "Exception object name" we assigned for the exception handler. So, with the following setup, whenever there is an exception a message similar to the one shown below will be generated and send across the wire with configured adapter (FILE, SMTP etc).&lt;/p&gt; &lt;p&gt;&amp;lt;string&amp;gt;&amp;lt;ns0:NACK Type="NACK" xmlns:ns0="http://schema.microsoft.com/BizTalk/2003/NACKMessage.xsd"&amp;gt;&amp;lt;NAckID&amp;gt;{2DA185D7-40E7-4279-9F6E-ADCEB6EF599B}&amp;lt;/NAckID&amp;gt;&amp;lt;ErrorCode&amp;gt;0xc0c01f07&amp;lt;/ErrorCode&amp;gt;&amp;lt;ErrorCategory&amp;gt;0&amp;lt;/ErrorCategory&amp;gt;&amp;lt;ErrorDescription&amp;gt;SoapException: System.Web.Services.Protocols.SoapException: &lt;font color="#ff0000"&gt;Purposely raised this exception for testing&lt;/font&gt; at CustomerProcessing.Get500InternalSoapException(String yourName) &amp;lt;/ErrorDescription&amp;gt;&amp;lt;/ns0:NACK&amp;gt;&amp;lt;/string&amp;gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.digitaldeposit.net/blog/images/OrchestrationHandleSOAPExceptionanddealw_D155/image011.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="669" src="http://www.digitaldeposit.net/blog/images/OrchestrationHandleSOAPExceptionanddealw_D155/image0_thumb3.png" width="424" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Step #2: suspended(resumable) messages:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Even though you handled the SOAP exception using an exception handler in STEP #1, it's only going to complete the orchestration gracefully but it's going to leave the original request&amp;nbsp;message you posted to the web services in a suspended(resumable) state. Bear in mind the SOAP exception will be raised inside the orchestration only after the send port has exhausted all the retries.&amp;nbsp; During this period the messaging instance and orchestration service instance will be in the dehydrated state as shown below.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.digitaldeposit.net/blog/images/OrchestrationHandleSOAPExceptionanddealw_D155/image029.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="88" src="http://www.digitaldeposit.net/blog/images/OrchestrationHandleSOAPExceptionanddealw_D155/image0_thumb9.png" width="439" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;After all the retries, the SOAP exception will be raised inside the orchestration and corresponding SOAP request message will be suspended with resumable state as shown below. This will help the&amp;nbsp;administrator to either resume or terminate the message later.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://www.digitaldeposit.net/blog/images/OrchestrationHandleSOAPExceptionanddealw_D155/image026.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="74" src="http://www.digitaldeposit.net/blog/images/OrchestrationHandleSOAPExceptionanddealw_D155/image0_thumb8.png" width="444" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;But at some scenario we don't wont to leave the suspended (resumable) messages in the messagebox, instead move them to a different location (either to file system location or a remote server via HTTP etc, etc). Before BizTalk 2006 the only way to archive this behavior is by writing some WMI scripts, which is OK but doesn't really fit with the message flow infrastructure. But with BizTalk 2006 we can take advantage of "Failed Message routing" capability and make this task seamless.&lt;/p&gt; &lt;p&gt;All you have to do is, on your SOAP send port check the check box "Enable routing for failed messages" (as shown in the following figure) and also you can set optionally the "Retry Count" value to "0" if you want to raise the SOAP exception straight away.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.digitaldeposit.net/blog/images/OrchestrationHandleSOAPExceptionanddealw_D155/image017.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="221" src="http://www.digitaldeposit.net/blog/images/OrchestrationHandleSOAPExceptionanddealw_D155/image0_thumb5.png" width="414" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Then configure a "Send Port"&amp;nbsp; (or an orchestration, if you want to do more business logic with the suspended messages) with following filter condition&lt;/p&gt; &lt;p&gt;ErrorReport.ErrorType ==&amp;nbsp;"FailedMessage"&lt;/p&gt; &lt;p&gt;ErrorReport.OutboundTransportLocation == &amp;nbsp;http://localhost:47653/SOAPExceptionHandler.WebService/CustomerProcessing.asmx&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.digitaldeposit.net/blog/images/OrchestrationHandleSOAPExceptionanddealw_D155/image020.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="174" src="http://www.digitaldeposit.net/blog/images/OrchestrationHandleSOAPExceptionanddealw_D155/image0_thumb6.png" width="427" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The above filter condition will make sure you are dealing only with SOAP exception raised due to messages posted to that particular web service (CustomerProcessing.asmx). There are quite a bit of promoted properties that comes along with "ErrorReport" you can take advantage of to cater your situation as listed below.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Description  &lt;li&gt;ErrorType  &lt;li&gt;FailureCategory  &lt;li&gt;FailureCode  &lt;li&gt;InboundTransportLocation  &lt;li&gt;MessageType  &lt;li&gt;OutboundTransportLocation  &lt;li&gt;ReceivePortName  &lt;li&gt;RoutingFailureReportID  &lt;li&gt;SendPortName&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Related Reading:&lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.conchango.com/matthall/archive/2005/07/28/1894.aspx" href="http://blogs.conchango.com/matthall/archive/2005/07/28/1894.aspx"&gt;http://blogs.conchango.com/matthall/archive/2005/07/28/1894.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="http://objectsharp.com/cs/blogs/matt/archive/2006/11/01/4110.aspx" href="http://objectsharp.com/cs/blogs/matt/archive/2006/11/01/4110.aspx"&gt;http://objectsharp.com/cs/blogs/matt/archive/2006/11/01/4110.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Nandri!&lt;/p&gt; &lt;p&gt;Saravana&amp;nbsp;&lt;/p&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=15802"&gt;</description><author>Saravana Kumar in Biztalk                                                                           </author><pubDate>2008-01-05T00:00:00</pubDate><category>BizTalk</category></item><item><title>Pipeline Component, XmlSerialization and Performance</title><link>http://softlogger.com/15789/BizTalk/pipeline-component-xmlserialization-and-performance.aspx</link><description>&lt;p&gt;I'm basically replying to &lt;a href="http://www.sabratech.co.uk/blogs/yossidahan/2007/04/loading-custom-pipeline-component_30.html"&gt;Yossi's post here&lt;/a&gt;. I tried to leave it as a comment in his post but for some reasons my comments are not getting posted in his blog.&lt;/p&gt; &lt;p&gt;Myself and Yossi used to work together in a big public sector Healthcare BizTalk project for nearly 1.5 years.&lt;/p&gt; &lt;p&gt;First off all I need to thank&amp;nbsp;Yossi for his complement about&amp;nbsp;my white paper "&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8c2572a2-fb61-4016-a7a7-1c37518b39ff&amp;amp;displaylang=en"&gt;Understanding Design-Time Properties for Custom Pipeline Components in BizTalk Server&lt;/a&gt;". Yossi mentioned in his post about the potential performance problem in using XmlSerializer inside pipeline component. Until now I thought his point is valid, but after&amp;nbsp;reading the very first chapter from &lt;a href="http://www.amazon.co.uk/dp/0470046422?tag=biztalk247-21&amp;amp;camp=526&amp;amp;creative=3950&amp;amp;linkCode=st1&amp;amp;creativeASIN=0470046422&amp;amp;adid=1BHZF6AB5FWFJHK533CJ&amp;amp;"&gt;Professional BizTalk Server 2006&lt;/a&gt; by (DJ, KS and EF) , where&amp;nbsp;Darren&amp;nbsp;explains about Serialization and performance hit, its clear there is &lt;font color="#ff0000"&gt;NO PERFORMANCE HIT&lt;/font&gt; by using XmlSerialization in a BizTalk solution. &lt;/p&gt; &lt;p&gt;I thought the explanation will be helpful for readers to make the decision. The following extract is from the book (Page 11): &lt;p&gt;"&lt;em&gt;When you first use the XmlSerializer in your application against a given type, a dynamic class is created and compiled on the fly to represent the serialized class. This has an obvious performance over head, but it will be cached for susbsequent requests &lt;/em&gt; &lt;p&gt;&lt;em&gt;This cache is maintained per AppDomain, which is fine for applications like BizTalk, as there is by default only one AppDomain per BizTalk host.&lt;br&gt;"&lt;/em&gt;.  &lt;p&gt;So, eventually by using XmlSerialization inside the pipeline component, you'll hit the penalty only once during the lifetime of the component. That's until some one restarts the host.  &lt;p&gt;Nandri!,&lt;br&gt;Saravana&lt;/p&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=15789"&gt;</description><author>Saravana Kumar in Biztalk                                                                           </author><pubDate>2008-01-05T00:00:00</pubDate><category>BizTalk</category></item><item><title>BizTalk MQSC Adapter</title><link>http://softlogger.com/17374/BizTalk/biztalk-mqsc-adapter.aspx</link><description>&lt;blockquote&gt; &lt;p&gt;Previously, server based BizTalk adapter was used to access MQ Series and that requires MQ series server on Windows as intermediate server between BizTalk Server and non-Windows Queue Managers. In some situation, when installing the MQAgent to Windows MQ Series box is not an option the &lt;a href="http://technet.microsoft.com/en-us/library/aa772116.aspx"&gt;client based BizTalk adapter (MQSC)&lt;/a&gt; is needed to achieve the same goal.  &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Go and have a read here: &lt;a title="BizTalk MQSC Adapter" href="http://msdnrss.thecoderblogs.com/2008/01/02/biztalk-mqsc-adapter/" target="_blank"&gt;BizTalk MQSC Adapter&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118182"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118182" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://geekswithblogs.net/ajames/aggbug/118182.aspx" width="1" height="1" /&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=17374"&gt;</description><author>Connected Systems Chilled Out Blog</author><pubDate>2008-01-03T00:00:00</pubDate><category>BizTalk</category></item><item><title>Forms Authentication in Sharepoint</title><link>http://softlogger.com/17345/BizTalk/forms-authentication-in-sharepoint.aspx</link><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Explore several new features for authentication and authorization in &lt;a title=" " href=" "&gt;Microsoft&lt;/a&gt; Office SharePoint Server (MOSS) 2007 and Windows SharePoint Services 3.0 that make it easier to develop and deploy solutions in Internet-facing and extranet environments. &lt;/p&gt;&lt;p&gt;Have a look at these great articles by Steve Peschka of &lt;a title=" " href=" "&gt;Microsoft&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb975136.aspx"&gt;Forms Authentication in SharePoint Products and Technologies (Part 1): Introduction&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb975135.aspx"&gt;Forms Authentication in SharePoint Products and Technologies (Part 2): Membership and Role Provider Samples&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb977430.aspx"&gt;Forms Authentication in SharePoint Products and Technologies (Part 3): Forms Authentication vs. Windows Authentication&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118196"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118196" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://geekswithblogs.net/ajames/aggbug/118196.aspx" width="1" height="1" /&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=17345"&gt;</description><author>Connected Systems Chilled Out Blog</author><pubDate>2008-01-03T00:00:00</pubDate><category>BizTalk</category></item><item><title>Integrating Excel (Services) and PowerPoint with the Microsoft SDK for Open XML Formats</title><link>http://softlogger.com/14996/BizTalk/integrating-excel-services-and-powerpoint-with-the-microsoft-sdk-for-open-xml-formats.aspx</link><description>&lt;P&gt;&lt;EM&gt;Today's author: Danny Khen, a program manager who works on both the Excel and Excel Services teams.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What is this about?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Office 2007 introduced new default file formats – Open XML. Excel, Word and PowerPoint take advantage of them. One of the nicest things about those file formats is that they enable easy manipulation of Office documents without needing the Office applications up and running – by simply modifying XML “parts” within the files. In June 2007 we &lt;A class=" " href="http://www.microsoft.com/downloads/details.aspx?FamilyID=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&amp;amp;displaylang=en"&gt;published an SDK&lt;/A&gt; that facilitates this process.&lt;/P&gt;
&lt;P&gt;On an entirely unrelated subject (not really… wait for it…), Microsoft Office SharePoint Server 2007 introduced Excel Services – a true server-side, enterprise-grade version of Excel, that enables robust and scalable calculation of Excel workbooks on the server, displaying interactive, data-connected Excel reports in a browser, and controlling proprietary information while still sharing Excel-based results to a wide audience. Excel Services expose a SOAP-based web service, which lets developers create custom solutions that use Excel models as part of their logic – helping cut IT costs by letting the subject-matter experts maintain those models on an ongoing basis, without needing a developer to change code.&lt;/P&gt;
&lt;P&gt;All of this lends itself to a variety of interesting integrations between Office applications and server-side Excel models. I’d like to show you how you could create a useful solution this way.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The “UpdateChart” application&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Imagine that you regularly create and maintain Word documents or PowerPoint slide decks, which incorporate charts with data that needs to be updated. This is common, for example, in the investment industry, where portfolio managers and analysts present their results, proposals or analyses this way to their customers. The data charts would often be created in Excel. The analyst would have an Excel workbook, with all sorts of data aggregations and calculations, most of which are not to be exposed to customers – they represent the investment house’s intellectual property. So the analyst updates and refreshes the Excel workbook, then copies the charts and pastes them into the final pitch book, which is consequently handed to the customer.&lt;/P&gt;
&lt;P&gt;Another common case is budgeting or other what-if scenarios. For example, you prepare a sales projection, and you use an Excel model to calculate your projected sales. You then want the results in the form of a chart in a PowerPoint presentation.&lt;/P&gt;
&lt;P&gt;How cool would it be if all of this could be automated? Furthermore, imagine that the person preparing the end document did not even have to be the person maintaining the Excel model behind it – or even have access to open the Excel file! Responsibilities could be split this way, and the document creator could easily use the Excel results – even though s/he has no open rights to the Excel model. The benefits of this are great from a compliance standpoint.&lt;/P&gt;
&lt;P&gt;The “&lt;STRONG&gt;UpdateChart&lt;/STRONG&gt;” demo application (&lt;A class=" " href="http://officeblogs.net/excel/updatechart.zip" mce_href="http://officeblogs.net/excel/updatechart.zip"&gt;posted here&lt;/A&gt;) shows a simple case of doing exactly that. In this application, a server-side Excel workbook has a model that creates a chart. Conceptually (although it is not part of the demo), this workbook could be connected to data sources, and could calculate a different, up-to-date chart each time it is run. A client-side program uses this workbook to update a chart in a PowerPoint deck. The program connects to the server using a web service, gets the up-to-date calculated workbook, extracts the updated chart from it, and uses it to replace the chart within the PowerPoint deck – all by using the Open XML SDK, and requiring neither Excel nor PowerPoint to run.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The building blocks&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Projected Sales.xlsx: An Excel workbook that contains a chart with the title "Projected Sales".&lt;/LI&gt;
&lt;LI&gt;Projected Sales.pptx: A PowerPoint presentation that contains an identical chart on one of the sheets, with an identical title.&lt;/LI&gt;
&lt;LI&gt;UpdateChart.exe: The program. This is a console (command line) application; running it with no arguments displays its usage help. In the &lt;A class=" " href="http://officeblogs.net/excel/updatechart.zip" mce_href="http://officeblogs.net/excel/updatechart.zip"&gt;demo package&lt;/A&gt;, the compiled program is located under UpdateChart\bin\Debug.&lt;/LI&gt;
&lt;LI&gt;Microsoft Office SharePoint Server 2007: Not included with this demo, but also not entirely required in order to try out some of the demo program’s capabilities.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Running “UpdateChart”&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;The Basics: Simple Excel and PowerPoint file integration&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The simplest thing that this program can do is open the Excel file directly (not using Excel Services or Excel), grab the chart from it, and replace the chart in the PowePoint file. This is interesting from the standpoint of understanding how Open XML file manipulation works. It also highlights the fact that in Office 2007, the format of a chart in Excel and PowerPoint (and Word) is identical – they can be exchanged by mere file manipulations, without needing any of the Office applications.&lt;/P&gt;
&lt;P&gt;To see how this works, start by opening the Excel file in Excel, setting some values to the two parameter cells (G3 and H3), and saving the file. Then open a command window, and run the following in the folder where you have the demo Excel and PowerPoint files:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;UpdateChart.exe "Projected Sales.xlsx" "Projected Sales.pptx" "Projected Sales"&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;(The third argument is the chart title that the program looks for in both files.) If you now open the PowerPoint file, you’ll see that the chart changed to reflect the new values from the Excel file.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Moving to the server&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Using UpdateChart as shown in the previous section, while demonstrating Open XML SDK usage, is not very useful from the perspective of updating a live chart. The program does not know how to connect the Excel file to external data sources, refresh the data, and re-calculate the resulting chart. It just grabs the chart in whatever state it was when it was saved.&lt;/P&gt;
&lt;P&gt;Here’s where the server comes into play. If you have access to a MOSS 2007 server, publish the demo Excel file to the server. &lt;/P&gt;
&lt;P&gt;Then run this in a folder containing the demo PowerPoint file:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;UpdateChart.exe &lt;/STRONG&gt;-s &amp;lt;server_name&amp;gt; "&amp;lt;full path to server Excel file&amp;gt;" &lt;STRONG&gt;"Projected Sales.pptx" "Projected Sales"&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;You can now open your PowerPoint file and see that the chart is updated. Realize that this represents a much broader and stronger class of solutions than is actually implemented here; the Excel file on the server could be connected to data sources, and could generate a different updated file each time it is run, or potentially even different for each user who runs it.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Parameterization&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;What if your Excel model relies on parameter values within the workbook, instead of (or in addition to) external data sources? You’d want to let your users change some values in the workbook, and have those values affect the resulting chart. Well, this is possible, even if the users have no open access to the Excel file on the server – just the right to run it!&lt;/P&gt;
&lt;P&gt;To demonstrate this, I’ve designated the two parameter cells (G3 and H3) as named parameters that the server recognizes (you’ll need to select them as server parameters in Excel’s “Publish” dialog when you publish the workbook to the server). Now, a user – or a program – can easily set values to those parameters, causing Excel Services to recalculate the Excel models with the new values and affecting the resulting chart. Our program does exactly that.&lt;/P&gt;
&lt;P&gt;To see this, add an extra argument to the command line, that sets the parameter “Growth2007” to 70%:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;UpdateChart.exe&lt;/STRONG&gt; -s &amp;lt;server_name&amp;gt; &lt;STRONG&gt;-p Growth2007 "70%" "&lt;/STRONG&gt;&amp;lt;full path to server Excel file&amp;gt;&lt;STRONG&gt;" "Projected Sales.pptx" "Projected Sales"&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Your PowerPoint file should show a chart that reflects this growth in 2007.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What the code does&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Note: The &lt;A class=" " href="http://officeblogs.net/excel/updatechart.zip" mce_href="http://officeblogs.net/excel/updatechart.zip"&gt;code sample&lt;/A&gt;, UpdateChart, was created using Microsoft Visual Studio 2008, however you do not need this particular version of Visual Studio to use the code. You can use the main source file, Program.cs, in a project of a previous VS version, or just open the file in a text editor and grab the pieces of the code that you find useful.&lt;/P&gt;
&lt;P&gt;UpdateChart’s code does the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Parses arguments.&lt;/LI&gt;
&lt;LI&gt;In the case of server usage (-s), uses the Excel Web Service to open a server workbook, optionally set a parameter value (when -p is used), and get the resulting workbook. The workbook is returned into the program as a bite array; this is a snapshot of the entire server-side Excel workbook, in the calculated state that it was when it was retrieved from the server.&lt;/LI&gt;
&lt;LI&gt;In all cases, the code uses the Open XML SDK to:&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Look for and extract the chart part within the Excel file.&lt;/LI&gt;
&lt;LI&gt;Look for the chart part in the PowerPoint file, then override it with the new Excel chart.&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;One thing to notice is that in the case of the server-side Excel file, no client-side temporary file is used. The code receives the server result directly into memory as a byte array, then uses the option to initialize an Open XML file package from a stream – feeding the byte array directly into the package.&lt;/P&gt;
&lt;P&gt;In the client-side Excel file case, the code simply initializes the Open XML package from a file.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Useful links&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Code sample for this post: &lt;A href="http://officeblogs.net/excel/updatechart.zip"&gt;http://officeblogs.net/excel/updatechart.zip&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Open XML SDK download: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&amp;amp;displaylang=en&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;MOSS 2007 SDK – Creating Custom Solutions with Excel Services: &lt;A href="http://msdn2.microsoft.com/en-us/library/ms517343.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms517343.aspx&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;MOSS 2007 SDK – Excel Web Service reference: &lt;A href="http://msdn2.microsoft.com/en-us/library/microsoft.office.excel.server.webservices.aspx"&gt;http://msdn2.microsoft.com/en-us/library/microsoft.office.excel.server.webservices.aspx&lt;/A&gt; &lt;BR&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6830866" width="1" height="1"&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=14996"&gt;</description><author>Microsoft Excel 2007 (nee Excel 12)</author><pubDate>2007-12-24T00:00:00</pubDate><category>BizTalk</category></item><item><title>Microsoft Dynamics CRM Data Import</title><link>http://softlogger.com/14477/BizTalk/microsoft-dynamics-crm-data-import.aspx</link><description>&lt;p&gt;&lt;em&gt;CRM MVP &lt;/em&gt;&lt;a href="http://blogs.msdn.com/crm/pages/bio-ronald-lemmen.aspx" target="_blank"&gt;&lt;em&gt;Ronald Lemmen&lt;/em&gt;&lt;/a&gt;&lt;em&gt; returns as a guest blogger. You can read more from Ronald at &lt;/em&gt;&lt;a href="http://www.ronaldlemmen.com" target="_blank"&gt;&lt;em&gt;his blog&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt; &lt;p&gt;This post will dive deep into the possibilities for Data Import for Microsoft Dynamics CRM. Discussed will be the options which Microsoft gives for importing data in both the versions 3.0 as well as 4.0, which third party tools are available and what the possibilities are for creating your own custom build data import. Directly related to Data Import, is data cleansing. In this post I will discuss possible data cleansing as well.  &lt;p&gt;What I won’t discuss in this post, is the most commonly used approach for getting data into CRM: Manual. While planning your data migration, don’t forget about the option to manually enter the data into the system. Depending on the amount of data, it might be cheaper to enter all data by hand. Also when you have too much data to import by hand, look at the rare data. Maybe some entities can be entered by hand. If you do want to bulk import data and will not go the manual route, then make sure you read on.  &lt;p&gt;&lt;em&gt;Disclaimer: All the information on Microsoft Dynamics CRM 4.0 is based on RC0 which means that it is still subject to change.&lt;/em&gt;  &lt;h3&gt;Microsoft Solutions&lt;/h3&gt; &lt;p&gt;Microsoft offers multiple options to import data into your CRM implementation. These options are:  &lt;ul&gt; &lt;li&gt;Bulk Import Wizard &lt;/li&gt; &lt;li&gt;Data Migration Framework / Manager &lt;/li&gt; &lt;li&gt;Data Migration Wizard for Microsoft Office Outlook with Business Contact Manager &lt;/li&gt; &lt;li&gt;Outlook Client &lt;/li&gt;&lt;/ul&gt; &lt;h4&gt;Bulk Import Wizard&lt;/h4&gt; &lt;p&gt;The Bulk Import Wizard is available from the User Interface as you can see on the image below.  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/crm/WindowsLiveWriter/MicrosoftDynamicsCRMDataImport_7BA8/clip_image001_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="278" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/crm/WindowsLiveWriter/MicrosoftDynamicsCRMDataImport_7BA8/clip_image001_thumb.jpg" width="644" border="0"&gt;&lt;/a&gt;&amp;nbsp; &lt;p&gt;This feature allows the end user to import the following entities:  &lt;ul&gt; &lt;li&gt;Contact &lt;/li&gt; &lt;li&gt;Account &lt;/li&gt; &lt;li&gt;Leads &lt;/li&gt; &lt;li&gt;Campaign Responses &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The end user can upload csv (comma-delimited values) files or text files delimited with semicolons, colons or tabs. Data to be imported can only be of one specific entity, although lookup data can be uploaded as well when the guid is specified.  &lt;p&gt;Examples for when to use the Bulk Import Wizard are:  &lt;ul&gt; &lt;li&gt;Exports from Outlook to a .csv file &lt;/li&gt; &lt;li&gt;Acquired marketing lists &lt;/li&gt;&lt;/ul&gt; &lt;h5&gt;&lt;strong&gt;Changes with Microsoft Dynamics CRM 4.0&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;The Bulk Import Wizard has been improved in Microsoft Dynamics CRM 4.0. The list of entities to import has been extended with almost all system entities as well as custom entities. Also, the mappings created between the source data and the CRM system can now be saved and reused in subsequent import activities. Another new feature is the ability to see the list of imported records after the import has succeeded. Based on this list actions can be executed like Quick Campaigns and even deleting the records if necessary. The last major improvement is the ability to enrich data which is already in the system.  &lt;h4&gt;Data Migration Framework&lt;/h4&gt; &lt;p&gt;The second tool which Microsoft offers is the Data Migration Framework. This tool can be used to import data if any of the following scenarios do apply:  &lt;ul&gt; &lt;li&gt;Migrate data from multiple sources &lt;/li&gt; &lt;li&gt;There are records which are related to others within the same or another entity &lt;/li&gt; &lt;li&gt;Notes and / or attachments need to be migrated &lt;/li&gt; &lt;li&gt;Data needs to be cleansed before importing into the CRM system &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The image below describes the approach of the Data Migration Framework. The first step is to create and initialize the CDF database. This is a database which will temporarily store the data from the source systems before it is imported into the CRM system. The source data can be extracted from multiple sources and be loaded into the CDF database. The process of moving data from the source to the CDF database is not part of the Data Migration Framework. The most common approach is using DTS or SSIS, but basically any technique can be used to import data into the CDF database. Once the data is in this temporary database, then the data can be transformed and eventually cleansed. After this phase, the data can be migrated into the CRM System.  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/crm/WindowsLiveWriter/MicrosoftDynamicsCRMDataImport_7BA8/clip_image003_2.jpg"&gt;&amp;nbsp;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="276" alt="clip_image003" src="http://blogs.msdn.com/blogfiles/crm/WindowsLiveWriter/MicrosoftDynamicsCRMDataImport_7BA8/clip_image003_thumb.jpg" width="644" border="0"&gt;&lt;/a&gt;  &lt;p&gt;This application does support the following out of the box entities: &lt;/p&gt; &lt;p&gt; &lt;table class="MsoNormalTable" style="border-top-style: none; border-bottom: #cccccc 1pt solid; border-right-style: none; border-left-style: none; mso-cellspacing: 0in; mso-border-bottom-alt: solid #cccccc .75pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in" cellspacing="0" cellpadding="0" border="1"&gt; &lt;tbody&gt; &lt;tr style="height: 14.7pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; height: 14.7pt; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Account&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; height: 14.7pt; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Discount&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; height: 14.7pt; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Note&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: #cccccc 1pt solid; padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-bottom: #cccccc 1pt; height: 14.7pt; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt; mso-border-right-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Product&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 1"&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Address&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Discount List&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Opportunity&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: #cccccc 1pt solid; padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-bottom: #cccccc 1pt; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt; mso-border-right-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Quote&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 2"&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Annotation (including attachments)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;E-mail&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Opportunity Product&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: #cccccc 1pt solid; padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-bottom: #cccccc 1pt; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt; mso-border-right-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Quote Product&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 3"&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Case&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Fax&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Order&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: #cccccc 1pt solid; padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-bottom: #cccccc 1pt; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt; mso-border-right-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Sales Literature&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 4"&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Competitor&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Invoice&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Order Product&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: #cccccc 1pt solid; padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-bottom: #cccccc 1pt; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt; mso-border-right-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Subject&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 5"&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Contact&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Invoice Product&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Phone Call&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: #cccccc 1pt solid; padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-bottom: #cccccc 1pt; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt; mso-border-right-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Task&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 6"&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Contract&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Lead&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Price List&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: #cccccc 1pt solid; padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-bottom: #cccccc 1pt; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt; mso-border-right-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Unit&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 7; mso-yfti-lastrow: yes"&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Contract Line&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Letter&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-right-style: none; border-bottom-style: none; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Price List Item&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-right: #cccccc 1pt solid; padding-right: 3.75pt; border-top: #cccccc 1pt solid; padding-left: 3.75pt; background: #e9e9e6; padding-bottom: 3.75pt; border-left: #cccccc 1pt solid; padding-top: 3.75pt; border-bottom: #cccccc 1pt; mso-border-top-alt: solid #cccccc .75pt; mso-border-left-alt: solid #cccccc .75pt; mso-border-right-alt: solid #cccccc .75pt" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="NL"&gt;Unit Group&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;All out of the box and custom attributes can be imported, with some exceptions like the created on/by and modified on/by attributes.  &lt;h5&gt;&lt;strong&gt;Data Migration Wizard for Microsoft Office Outlook with Business Contact Manager&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;This is an application is part of the Data Migration Framework as well. This is especially designed for migrating data from Outlook with Business Contact Manager to Microsoft CRM 3.0. Since no other source data can be migrated with this tool, I will not further discuss this tool.  &lt;h5&gt;&lt;strong&gt;Changes with Microsoft Dynamics CRM 4.0&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;The new version of Microsoft Dynamics CRM does also offer a new version of the Data Migration Framework. Not only is the tool renamed to Data Migration Manager, also the functionality has changed. The tool now has a user friendly interface next to the command line tools and also custom entities can now be imported. Furthermore new functionality like the data maps and duplicate detection can be used while importing the data through the Data Migration Framework.  &lt;p&gt;Look at the blog of Philip Richardson [1] to see a demo of how to use the Data Migration Manager in version 4.0.  &lt;h4&gt;Outlook Client&lt;/h4&gt; &lt;p&gt;A very easily overlooked option is to use the Outlook Client. There is a synchronization tool build in the Outlook client which does copy the data from Outlook to the CRM server. This approach is not very scalable, but could be enough for small data imports of contact data. Add-ons like the CardScan solution do use this approach to load data into Microsoft Dynamics CRM.  &lt;h3&gt;3rd Party Migration Tools&lt;/h3&gt; &lt;p&gt;If the Microsoft Solutions do not offer you the required functionality, then you can look at third party applications. There are multiple tools available. The most common ones are the ImportManager as sold by CRM Extensions and c360 and the Scribe Insight application. Both will be discussed here. Other tools can be found in the links section [2]. In the same links section, you will also find references to the comparison between ImportManager and Scribe Insight as tested by Sandor Schellenberg [3].  &lt;h4&gt;CRM Extensions / c360: ImportManager&lt;/h4&gt; &lt;p&gt;Both CRM Extensions as well as c360 offer the ImportManager with identical functionality. This application allows imports from one or more data sources, create new or update existing records of a given entity in the CRM database. This could be any customizable entity or a custom entity. Also in the same process relationships between the imported record and other entities can be created. While importing data, duplicate detection rules can be applied to determine if a record is new or should be updated.  &lt;p&gt;There are connectors created for the data sources ODBC and text files. Other connectors can easily be created by a developer to suit the needs of the customer. This application also offers a scheduling option as well which makes it very usable for repeating imports as well.  &lt;p&gt;With the release of CRM 4 new functionalities will be released as well. The ImportManager will then be a full Client / Server application which allow this application to be used for CRM Live and Hosted environments as well.&lt;b&gt; &lt;/b&gt; &lt;h4&gt;Scribe: Scribe Insight&lt;/h4&gt; &lt;p&gt;Scribe Insight is an application which exists already for a long time. It offers the same functionality as ImportManager and more. This is a CRM migration application with connectors to many different applications including Salesforce.com, ACT, GoldMine and of course Microsoft Dynamics CRM.  &lt;p&gt;One of the reasons why this application is widely used, is the possibility to create two-way migration functionality. Data can be imported in Microsoft Dynamics CRM and can also be exported to be used in any other application. Another reason to choose this application can be because of the wide range of possibilities in modifying data. Scribe offers so called functions in which data manipulation can take place. Within these functions the developer has many possibilities to calculate or create the correct value for a specific attribute.  &lt;p&gt;Scribe does offer training to quickly learn how to use this application. This training is strongly recommended because of the many possibilities with this application.  &lt;p&gt;Scribe will release the adapter for the newest version about two weeks after the RTM release of Microsoft Dynamics CRM 4.0.  &lt;h3&gt;Custom Migration Application&lt;/h3&gt; &lt;p&gt;The latest option is to create a migration application in house. Advantages of creating your own migration application include:  &lt;ul&gt; &lt;li&gt;Full control of the application &lt;/li&gt; &lt;li&gt;Ability to adjust performance settings based on data &lt;/li&gt; &lt;li&gt;Relatively easy to include exceptional business logic &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The obvious disadvantage is of course that knowledge about the CRM web services is required and also knowledge about other techniques required to perform the data migration. Some possible approaches are discussed in this chapter.  &lt;h4&gt;Web Services&lt;/h4&gt; &lt;p&gt;The most obvious approach is to create a .NET application which uses the CRM web services to import data into CRM. The SDK [4] is a very good starting point. Basically the developer would read data from the source application, create an instance of the entity to be created, fill the attributes with the correct values (could be calculated or looked up in another system), add the record to the CRM system. If needed a check can be performed to see if the record is already in the system.  &lt;p&gt;This approach does allow a lot of possibilities for performance improvement. If data needs to be requested from another source, it could be all loaded while the application loads instead of a per record request. Also the connection with the Microsoft Dynamics CRM web service allows several performance settings. Make sure to look at the settings for UnsafeAuthenticatedConnectionSharing. A link to the blog of Aaron Elder is included[5] with more information about performance settings for the web service.  &lt;h4&gt;SSIS – Web Services&lt;/h4&gt; &lt;p&gt;If you like SQL solutions more, then you can leverage a new feature which is available if you’re database is running on MSSQL Server 2005. This version includes the possibility to create SSIS packages which can communicate with web services. How to use the web services task in SSIS is described on Technet[6].  &lt;h4&gt;BizTalk – CRM Adapter&lt;/h4&gt; &lt;p&gt;Another possible approach is to connect CRM with BizTalk. This is very valuable if BizTalk is already used within the organization. Microsoft has developed a BizTalk adapter for Microsoft Dynamics CRM 3.0[7]. This adapter allow you to perform the web service calls directly from within BizTalk. The advantage of this approach is that you can create this solution with minimal knowledge of the CRM application. A disadvantage though is that it is very hard to optimize the performance when using the BizTalk Adapter.  &lt;h3&gt;Data Quality&lt;/h3&gt; &lt;p&gt;A topic which is directly related to Data Import, is the quality of the data which is imported. The quality is one of the most crucial success factors of any CRM project. A lot of checks can be performed while importing data, especially checking for duplicates. Microsoft Dynamics CRM 3.0 does not offer any out of the box tools for duplicate detection, but there are some good alternatives. Also some of the third party tools for importing data do include duplicate detection functionality.  &lt;h4&gt;3rd Party Tools&lt;/h4&gt; &lt;p&gt;The most known third party add-on for data quality is the c360 Data Quality Center add-on. The core functionality of this add-on is duplicate validation and address validation. The address validation verifies the address using US Postal Code standards. The address are verified, corrected and enhanced by this engine. The duplicate detection software does check for duplicates against the entities Lead / Account and Lead / Contact. Duplicates can be detected while saving a record or can be scheduled for a nightly batch. Detection of a duplicate is done by using match code rules which can be defined by administrators. The Data Quality Center is part of the c360 Core Productivity Pack[8].  &lt;p&gt;Another supplier of a Data Quality add-on for Microsoft Dynamics CRM 3.0 is Pitney Bowes. They have developed a similar add-on which also does address verification and duplicate management. [9]  &lt;h4&gt;Microsoft Dynamics CRM 4.0&lt;/h4&gt; &lt;p&gt;With the release of Microsoft Dynamics CRM 4.0, Microsoft is making a large step in terms of data quality. Instead of relying on a third party add-on, the duplicate checking is now included within the software. The functionality which Microsoft has included in the product is very similar to the duplicate checking as supplied by c360. It does allow the administrator to set up rules and based on these rules the system will recognize a potential duplicate and inform the user. Also batches can be run which do show a list of potential duplicate records.  &lt;p&gt;Philip Richardson has created a short screen cast which does show the duplicate detection like an end user[10].  &lt;h3&gt;Conclusion&lt;/h3&gt; &lt;p&gt;In this article we have seen that there are many different approaches and applications available for performing a data import into Microsoft Dynamics CRM. For each different business case another approach or application is the correct one. When the 3.0 version of the CRM product is used within your organization, then a third party application is quickly needed. The release of Microsoft Dynamics CRM 4.0 will allow a lot more out of the box, so for relatively simple data migrations can be easily done without third party software or a custom build application. If the migration is larger though, or specific requirements need to be fulfilled, then you will still need to rely on a third party solution or create your own solution.  &lt;h3&gt;Links for more information&lt;/h3&gt; &lt;blockquote&gt; &lt;p&gt;[1] Demonstration of how to use the Data Migration Manager in Microsoft Dynamics CRM 4.0 &lt;a href="http://www.philiprichardson.org/screencasts/titan/DataMigration/DataMigration.html"&gt;http://www.philiprichardson.org/screencasts/titan/DataMigration/DataMigration.html&lt;/a&gt;  &lt;p&gt;[2] URL’s for 3&lt;sup&gt;rd&lt;/sup&gt; party import applications:  &lt;p&gt;- Scribe Insight &lt;a href="http://www.scribesoftware.com/microsoft-dynamics-crm.asp"&gt;http://www.scribesoftware.com/microsoft-dynamics-crm.asp&lt;/a&gt;  &lt;p&gt;- c360 ImportManager &lt;a href="http://www.c360.com/ImportManager.aspx"&gt;http://www.c360.com/ImportManager.aspx&lt;/a&gt;  &lt;p&gt;- CRM Extensions ImportManager &lt;a href="http://www.crmextensions.com/Page.aspx?id=66673538-2ae2-db11-9607-0003ff3b5e8e"&gt;http://www.crmextensions.com/Page.aspx?id=66673538-2ae2-db11-9607-0003ff3b5e8e&lt;/a&gt;  &lt;p&gt;- Inogic Import and Conversion Tools &lt;a href="http://www.inogic.com/dynamics_crm_solutions.htm"&gt;http://www.inogic.com/dynamics_crm_solutions.htm&lt;/a&gt;  &lt;p&gt;- Vertical Marketing Inc. Goldmine to Microsoft CRM Convertor &lt;a href="http://crmsuperchargers.com/GMtoMSConverter.htm"&gt;http://crmsuperchargers.com/GMtoMSConverter.htm&lt;/a&gt;  &lt;p&gt;[3] Comparison between Scribe Insight and ImportManager by Sandor Schellenberg  &lt;p&gt;- Part 1: &lt;a href="http://www.friendlycrmonster.com/2007/03/scribe-insight-vs-c360-import-manager.html"&gt;http://www.friendlycrmonster.com/2007/03/scribe-insight-vs-c360-import-manager.html&lt;/a&gt;  &lt;p&gt;- Part 2: &lt;a href="http://www.friendlycrmonster.com/2007/03/scribe-insight-vs-c360-import-manager_27.html"&gt;http://www.friendlycrmonster.com/2007/03/scribe-insight-vs-c360-import-manager_27.html&lt;/a&gt;  &lt;p&gt;- Part 3: &lt;a href="http://www.friendlycrmonster.com/2007/04/scribe-insight-vs-c360-import-manager.html"&gt;http://www.friendlycrmonster.com/2007/04/scribe-insight-vs-c360-import-manager.html&lt;/a&gt;  &lt;p&gt;- Conclusion: &lt;a href="http://www.friendlycrmonster.com/2007/04/and-winner-is.html"&gt;http://www.friendlycrmonster.com/2007/04/and-winner-is.html&lt;/a&gt;  &lt;p&gt;[4] Microsoft Dynamics CRM 3.0 SDK &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=9C178B68-3A06-4898-BC83-BD14B74308C5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=9C178B68-3A06-4898-BC83-BD14B74308C5&amp;amp;displaylang=en&lt;/a&gt;  &lt;p&gt;[5] CRM Web service performance improvement by Aaron Elder &lt;a href="http://www.invokesystems.com/cs/blogs/mscrm/archive/2006/06/01/28.aspx"&gt;http://www.invokesystems.com/cs/blogs/mscrm/archive/2006/06/01/28.aspx&lt;/a&gt;  &lt;p&gt;[6] How to use the web services task within SSIS &lt;a href="http://technet.microsoft.com/en-us/library/ms140114.aspx"&gt;http://technet.microsoft.com/en-us/library/ms140114.aspx&lt;/a&gt;  &lt;p&gt;[7] BizTalk – Microsoft Dynamics CRM 3.0 Adapter &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4628FCA6-388D-45BC-A154-453B920DBCB8&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=4628FCA6-388D-45BC-A154-453B920DBCB8&amp;amp;displaylang=en&lt;/a&gt;  &lt;p&gt;[8] c360 Data Quality Center &lt;a href="http://www.c360.com/DataQualityCenter.aspx"&gt;http://www.c360.com/DataQualityCenter.aspx&lt;/a&gt;  &lt;p&gt;[9] Pitney Bowes Group 1 Software Data Quality Adapter &lt;a href="http://www.g1.com/Products/Customer-Data-Quality/CDQ-Platform-For-MS-CRM/"&gt;http://www.g1.com/Products/Customer-Data-Quality/CDQ-Platform-For-MS-CRM/&lt;/a&gt;  &lt;p&gt;[10] Screen cast on Duplicate Detection in Microsoft Dynamics CRM 4.0 &lt;a href="http://www.philiprichardson.org/screencasts/titan/DuplicateDetectionCTP3/DuplicateDetectionCTP3.html"&gt;http://www.philiprichardson.org/screencasts/titan/DuplicateDetectionCTP3/DuplicateDetectionCTP3.html&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/crm/pages/bio-ronald-lemmen.aspx" target="_blank"&gt;Ronald Lemmen&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6791000" width="1" height="1"&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=14477"&gt;</description><author>Microsoft Dynamics CRM Team Blog</author><pubDate>2007-12-17T00:00:00</pubDate><category>BizTalk</category></item><item><title>Using BizTalk Oracle Adapter - NativeSQL</title><link>http://softlogger.com/13013/BizTalk/using-biztalk-oracle-adapter--nativesql.aspx</link><description>&lt;p&gt;Steps to run a sample scenario which retrieves data from the Oracle DB&lt;/p&gt; &lt;p&gt;1. System DSN - ODBC - keep the name same as the name of the database, else the adapter will not recognize the Database  &lt;p&gt;2. Create a Physical Port using the BizTalk Administration Console.&lt;br&gt;&amp;nbsp;&amp;nbsp; a. Select the type of the port as Oracle Database.&lt;br&gt;&amp;nbsp;&amp;nbsp; b. Click configure and provide data as mentioned in steps below&lt;br&gt;&amp;nbsp;&amp;nbsp; c. Provide the Oracle password&lt;br&gt;&amp;nbsp;&amp;nbsp; d. In Path - provide the path to the BIN directory of your Oracle Home.&lt;br&gt;&amp;nbsp;&amp;nbsp; e. In Service Name specify the name of the DSN - which is the name of the database&lt;br&gt;&amp;nbsp;&amp;nbsp; f. Provide the user name, and click OK.&lt;br&gt;&amp;nbsp;&amp;nbsp; g. Select the Send Pipeline as XML Transmit.&lt;br&gt;&amp;nbsp;&amp;nbsp; h. Select the Receive Pipeline as XML Receive.  &lt;p&gt;3. In the project where you need to create an orchestration, right click and select add generated items.  &lt;p&gt;4. Select Add Adapter MetaData and click Add  &lt;p&gt;5. Select Oracle(r) Database, &lt;br&gt;&amp;nbsp;&amp;nbsp; a. select the SQLServer instance where BizTalk is installed &lt;br&gt;&amp;nbsp;&amp;nbsp; b. Select the BizTalkMgmtDb&lt;br&gt;&amp;nbsp;&amp;nbsp; c. In Port select the port created in Step 2.&lt;br&gt;&amp;nbsp;&amp;nbsp; d. Click Next&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;p&gt;6. In Select the set of Services to be added to the database, click on OracleDb, then click on the DSN name (created in Step 1) and select appropriate table(s) or Native SQL. For out example we would be using the NativeSQL.  &lt;p&gt;7. Click on Finish, the wizard will generate 3 schema and 1 orchestration file.&lt;br&gt;&amp;nbsp;&amp;nbsp; a. The schema files generated includes the following:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. NativeSQLService_1.xsd&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. NativeSQLService_NativeSQL_x5d_1.xsd&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. NativeSQLService_obj_1.xsd  &lt;p&gt;&amp;nbsp;&amp;nbsp; b. An empty Orchestration named BizTalk Orchestration.odx is generated.  &lt;p&gt;8. Open the NativeSQLService_NativeSQL_x5d_1.xsd file and and you will see the following nodes:&lt;br&gt;&amp;nbsp;&amp;nbsp; a. SQLExecute&lt;br&gt;&amp;nbsp;&amp;nbsp; b. SQLExecuteResponse&lt;br&gt;&amp;nbsp;&amp;nbsp; c. SQLEvent&lt;br&gt;&amp;nbsp;&amp;nbsp; d. SQLEventResponse  &lt;p&gt;9. We would be focusing on the SQLExecute and SQLExecuteResponse. SQLExecute has StatementText and ParameterSet. In this exercise we will only use the StatementText. To use the StatementText, make it a distinguish field so that it can be accessed and set in Orchestration.  &lt;p&gt;10. Now Open the Orchestration, created. Define 2 messages one corresponding to SQLExecute type - say "MessageOracleSQL" and other SQLExecuteResponse type - say "MessageOracleSQLResponse".  &lt;p&gt;11. Configure a new port - in wizard select Use Existing port and select BizTalk_Server_Oracle_Adapter.NativeSQL.  &lt;p&gt;12. Select Port direction as "I will be sending a Request and receiving a response", and port binding as specify later.  &lt;p&gt;13. In the Orchestration now add a Construct Message Shape and specify the output as "MessageOracleSQL".  &lt;p&gt;14. Add a new Transform Shape which takes some input message and outputs MessageOracleSQL.parameters, this step is required to initialize the message.  &lt;p&gt;15. Add a new MessageAssignment Shape and set the StatementText property of the "MessageOracleSQL" to the Oracle SQL Statement to be executed. "MessageOracleSQL.parameters.StatementText = {Oracle SQL Statement}", note since the SQLExecuteResponse is a generic data structure, to return the data from the Oracle generate a statement that returns the data as XML in One Column.  &lt;p&gt;15. Add a Send Shape and select Message as "MessageOracleSQL", and connect it to the SQL Execute - Request of the port configured in step 11/12.  &lt;p&gt;16. Add a Receive Shape, whic connects with the Response of SQL Execute Port, with the Message as SQLOracleResponse.  &lt;p&gt;17. Now in order to retrive the data from the Message, define a Transformation which takes the input as SQLExecuteResponse schema and generates the output as required. Here you would be required to use the Scripting Functiod to break the XML from the columndata into the required message. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6574589" width="1" height="1"&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=13013"&gt;</description><author>A BULLs view of LIFE and TECHNOLOGY</author><pubDate>2007-11-28T00:00:00</pubDate><category>BizTalk</category></item><item><title>BizTalk - Strange Exception Messages and Corresponding Fixes.</title><link>http://softlogger.com/10277/BizTalk/biztalk--strange-exception-messages-and-corresponding-fixes.aspx</link><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;During our BizTalk development we come across some really strange error message, which normally doesn't reflect the real cause. I always wanted to consolidate everything in one place. After seeing couple of errors that's being raised in the news groups, I thought this is the right time to materialize it. If you have come across any strange errors and willing to share please let me know via my &lt;a href="http://www.biztalk247.com/v1/Contact.aspx"&gt;contact&lt;/a&gt; page.  &lt;p&gt;========================================================  &lt;p&gt;&lt;font color="#ff0000"&gt;Exception: 'System.Xml.XmlDocument' does not contain a definition for 'Status'&lt;/font&gt;  &lt;p&gt;========================================================  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Cause:&lt;/u&gt;&lt;/strong&gt;  &lt;p&gt;System.Diagnostics.Debug.WriteLine(PO_SOURCE.Status.ToString());&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Resolution:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;status = PO_SOURCE.Status;&lt;br&gt;System.Diagnostics.Debug.WriteLine(status.ToString());&lt;/p&gt; &lt;p&gt;where "status" is a variable of type System.String.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Credit:&lt;/u&gt;&lt;/strong&gt; Tim &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Remark: &lt;/u&gt;&lt;/strong&gt;When you try to do the conversion directly on the context property, the above exception is raised. You can easily fix it by first assigning the context property to a local variable and then doing the conversion.  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Date Logged:&lt;/u&gt;&lt;/strong&gt; 17th May 2007 (BizTalk 2006)  &lt;p&gt;========================================================  &lt;p&gt;&lt;font color="#ff0000"&gt;ERROR: The BAM deployment failed.&lt;br&gt;A connection cannot be made. Ensure that the server is running.&lt;br&gt;No connection could be made because the target machine actively refused it&lt;/font&gt;  &lt;p&gt;========================================================  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Credit: &lt;/u&gt;&lt;/strong&gt;Saravana Kumar  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Remark:&lt;/u&gt;&lt;/strong&gt;  &lt;p&gt;If you receive the following error when you try to deploy BAM activities using bm.exe tool  &lt;p&gt;The error information doesn't reflect on the actual cause. Make sure, "&lt;font color="#ff0000"&gt;SQL Server Analysis Services&lt;/font&gt;" is started.  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Date Logged:&lt;/u&gt;&lt;/strong&gt; 26th&amp;nbsp;April 2007 (BizTalk 2006)  &lt;p&gt;========================================================  &lt;p&gt;&lt;font color="#ff0000"&gt;A connection was successfully established with the server, but then an error occurred during the login process. (provider: Named Pipes Provider, error: 0 - No process is on the other end of the pipe.)&lt;/font&gt; &lt;p&gt;========================================================  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Remark:&lt;/u&gt;&lt;/strong&gt; &lt;p&gt;Make sure you Visual Studio project is pointing to the correct management server (Project Properties -&amp;gt; Deployment -&amp;gt; Server (BizTalk Group). &lt;p&gt;&lt;strong&gt;&lt;u&gt;Date Logged:&lt;/u&gt;&lt;/strong&gt; 29th May 2007 (BizTalk 2004/2006). &lt;p&gt;Nandri!  &lt;p&gt;Saravana&lt;/p&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=10277"&gt;</description><author>Saravana Kumar in Biztalk                                                                           </author><pubDate>2007-11-20T00:00:00</pubDate><category>BizTalk</category></item><item><title>BizTalk Map - Suppress Element if Attribute is not required.</title><link>http://softlogger.com/10276/BizTalk/biztalk-map--suppress-element-if-attribute-is-not-required.aspx</link><description>&lt;p&gt;Scenario: The following question is taken from BizTalk.General NewsGroup (altered slightly for readability purpose)&lt;/p&gt; &lt;p&gt;"I'm mapping an element in the&amp;nbsp;source schema to an attribute in the destination schema.&amp;nbsp; The element&amp;nbsp; does not exist in the source schema, but when I run the map it creates&amp;nbsp;the element in the destination schema that houses the attribute I am&amp;nbsp;mapping to.&amp;nbsp; The attribute does not show up in the result of the map,&amp;nbsp;just the empty element.&amp;nbsp;I need to have it not create the empty element if it is not going to&amp;nbsp;put a value in the attribute."&lt;/p&gt; &lt;p&gt;Here is the solution:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.digitaldeposit.net/blog/images/BizTalkMapSuppressElementifAttributeisn_9059/image05.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="239" src="http://www.digitaldeposit.net/blog/images/BizTalkMapSuppressElementifAttributeisn_9059/image0_thumb1.png" width="496" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Thanks goes to my collegue Matthew Johnstone and same technique was explained by Kiran Pabba in the newsgroup. I know for sure Matthew worked out this sample himself :-) &lt;/p&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=10276"&gt;</description><author>Saravana Kumar in Biztalk                                                                           </author><pubDate>2007-11-20T00:00:00</pubDate><category>BizTalk</category></item><item><title>BizTalk, MSDTC, SSO and Cluster</title><link>http://softlogger.com/10274/BizTalk/biztalk-msdtc-sso-and-cluster.aspx</link><description>&lt;p&gt;Last night (BTW it was a Sunday) around 8PM I received a call from my ex-boss and good friend Mike Prager who is working as a Senior architect in one of the major retail project in UK, saying "Hey! SK, we had a power failure this afternoon in our data center and after the servers came back all our receive locations are disabled and send ports are not started. When I try to access them via the admin console, I'm receiving the error &lt;/p&gt; &lt;p&gt;"&lt;font color="#ff0000"&gt;Cannot retrieve list of objects due to a WMI provider failure&lt;/font&gt;"&lt;/p&gt; &lt;p&gt;have you experienced this before."&lt;/p&gt; &lt;p&gt;Well, I've seen this error in the past, but there are tons of things which can cause this error in BizTalk, we tried few things like checking whether all the SSO services are health on all the machines, MSDTC is running and configured correctly on each box, correct SSO master secret server is configured on the BizTalk group, etc, etc.&lt;/p&gt; &lt;p&gt;At last, I left Mike with the option to try &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5e325025-4dcd-4658-a549-1d549ac17644&amp;amp;DisplayLang=en"&gt;DtcPing&lt;/a&gt;, since I'm not physically there. I couldn't assist much.&lt;/p&gt; &lt;p&gt;This morning I received a call from enthusiastic Mike, saying "&lt;font color="#ff0000"&gt;Hey! I solved the problem, the error is due to the race condition (dependency) between the&amp;nbsp;DTC and SSO service in the SQL cluster. When the SSO service starts before the DTC, there is an issue. You get the WMI error. But if the DTC starts before SSO, everything is well and good&lt;/font&gt;." &lt;/p&gt; &lt;p&gt;The reason I'm blogging it is I never experienced this before and it's one of those strange things which we'll never think about. I hope this will solve someone hours of troubleshooting time.&lt;/p&gt; &lt;p&gt;Thanks Mike, for sharing this information.&lt;/p&gt; &lt;p&gt;Nandri!&lt;/p&gt; &lt;p&gt;Saravana&lt;/p&gt;&lt;img alt="via softlogger.com" src="http://softlogger.com/postview.aspx?ArticleID=10274"&gt;</description><author>Saravana Kumar in Biztalk                                                                           </author><pubDate>2007-11-20T00:00:00</pubDate><category>BizTalk</category></item></channel></rss>