<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.Net</title>
        <link>http://geekswithblogs.net/paulp/category/3198.aspx</link>
        <description>.Net</description>
        <language>en-US</language>
        <copyright>Paul Petrov</copyright>
        <managingEditor>paul@petrovs.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>WCF Message Authentication Failure</title>
            <link>http://geekswithblogs.net/paulp/archive/2009/08/11/134026.aspx</link>
            <description>&lt;p&gt;Recently, while debugging desktop client - WCF service application I came across this error: &lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;em&gt;System.ServiceModel.Security.MessageSecurityException was caught&lt;br /&gt;
Message=”An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail.”&lt;br /&gt;
Source=”mscorlib”&lt;br /&gt;
StackTrace:&lt;br /&gt;
Server stack trace:&lt;br /&gt;
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout)&lt;br /&gt;
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)&lt;br /&gt;
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)&lt;br /&gt;
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)&lt;br /&gt;
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)&lt;br /&gt;
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)&lt;br /&gt;
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)&lt;br /&gt;
Exception rethrown at [0]:&lt;br /&gt;
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)&lt;br /&gt;
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp;amp; msgData, Int32 type)&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;em&gt;InnerException: System.ServiceModel.FaultException&lt;br /&gt;
Message=”An error occurred when verifying security for the message.”&lt;/em&gt; &lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Client was connecting basic http binding with security mode TransportWithMessageCredential. All other desktop clients were able to successfully call WCF service but not this particular one. Thanks to &lt;a href="http://intrepiddeveloper.wordpress.com/2008/08/25/message-authentication-failure-timestamp-clock-skew-issue-part-2/"&gt;this post&lt;/a&gt; the issue was quickly understood and resolved. Apparently, the client machine was a brand new netbook just out of the box and clock was way off. Interesting thing that Windows automatic clock synchronization did not work.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134026"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134026" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulp/aggbug/134026.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Petrov</dc:creator>
            <guid>http://geekswithblogs.net/paulp/archive/2009/08/11/134026.aspx</guid>
            <pubDate>Tue, 11 Aug 2009 14:59:57 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulp/comments/134026.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulp/archive/2009/08/11/134026.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulp/comments/commentRss/134026.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulp/services/trackbacks/134026.aspx</trackback:ping>
        </item>
        <item>
            <title>Storing BizTalk settings in custom configuration file using Enterprise Library</title>
            <link>http://geekswithblogs.net/paulp/archive/2008/06/11/122803.aspx</link>
            <description>&lt;p&gt;Choice of configuration settings storage is an important topic when it comes to enterprise BizTalk application planning. One of the &lt;a href="http://geekswithblogs.net/michaelstephenson/archive/2008/05/25/122381.aspx"&gt;many options&lt;/a&gt; is to use regular .Net configuration files. Some prefer this way over the Enterprise SSO database option for reasons of simplicity and familiarity. I wanted to show how it can be done with Microsoft Enterprise Library configuration application block.&lt;/p&gt;
&lt;p&gt;In this case Enterprise Library configuration section is placed in the BTNTSvc.exe.config file while application settings are stored in a separate configuration file. The problem here is how do we make EntLib to load required settings file at runtime.  Its done by simple helper class CustomSettings that looks up registry entry for the location and name of the application configuration file and creates FileConfigurationSource with it. The registry entry can be created  by MSI installation package.&lt;/p&gt;
&lt;p&gt;The initialization method of this static helper class looks like this (thread synchronization code omited for brevity):&lt;/p&gt;
&lt;pre class="csharpcode"&gt;          RegistryKey regKey = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

          &lt;span class="kwrd"&gt;try&lt;/span&gt;
          {
             regKey = Registry.LocalMachine.OpenSubKey(&lt;span class="str"&gt;@"Software\MyCompany\MyApplication"&lt;/span&gt;);
             configurationFile = Path.Combine(
             (&lt;span class="kwrd"&gt;string&lt;/span&gt;)regKey.GetValue(&lt;span class="str"&gt;"ConfigDir"&lt;/span&gt;),
             (&lt;span class="kwrd"&gt;string&lt;/span&gt;)regKey.GetValue(&lt;span class="str"&gt;"ConfigFile"&lt;/span&gt;));

              ExeConfigurationFileMap fileMap = &lt;span class="kwrd"&gt;new&lt;/span&gt; ExeConfigurationFileMap();
              fileMap.ExeConfigFilename = configurationFile;
              configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
              configurationSource = &lt;span class="kwrd"&gt;new&lt;/span&gt; FileConfigurationSource(configurationFile);

              &lt;span class="rem"&gt;//- store configPath in the settings&lt;/span&gt;
              configuration.AppSettings.Settings.Add(
              &lt;span class="kwrd"&gt;new&lt;/span&gt; KeyValueConfigurationElement(&lt;span class="str"&gt;"configDir"&lt;/span&gt;, (&lt;span class="kwrd"&gt;string&lt;/span&gt;)regKey.GetValue(&lt;span class="str"&gt;"ConfigDir"&lt;/span&gt;)));
           }
           &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
           {
              Debug.WriteLine(&lt;span class="str"&gt;"Exception while initializing Settings:"&lt;/span&gt; + ex.ToString());
              &lt;span class="kwrd"&gt;throw&lt;/span&gt; ex;
           }
           &lt;span class="kwrd"&gt;finally&lt;/span&gt;
           {
              &lt;span class="kwrd"&gt;if&lt;/span&gt; (regKey != &lt;span class="kwrd"&gt;null&lt;/span&gt;) regKey.Close();
           }&lt;/pre&gt;
&lt;p&gt; Then it has method to access properties by name:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetValue(&lt;span class="kwrd"&gt;string&lt;/span&gt; name)
        {
            KeyValueConfigurationElement entry = Configuration.AppSettings.Settings[name];

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (entry == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ConfigurationErrorsException(&lt;span class="str"&gt;"Key '"&lt;/span&gt; + name + &lt;span class="str"&gt;"' is not found in the configuration file."&lt;/span&gt;);

            &lt;span class="kwrd"&gt;return&lt;/span&gt; Configuration.AppSettings.Settings[name].Value;
        }&lt;/pre&gt;
&lt;p&gt; Which is used as in:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; propertyValue = CustomSettings.GetValue(&lt;span class="str"&gt;"propertyName"&lt;/span&gt;);&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122803"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122803" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulp/aggbug/122803.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Petrov</dc:creator>
            <guid>http://geekswithblogs.net/paulp/archive/2008/06/11/122803.aspx</guid>
            <pubDate>Wed, 11 Jun 2008 20:12:37 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulp/comments/122803.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulp/archive/2008/06/11/122803.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulp/comments/commentRss/122803.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulp/services/trackbacks/122803.aspx</trackback:ping>
        </item>
        <item>
            <title>MSBuild Tasks for BizTalk Continuous Integration</title>
            <link>http://geekswithblogs.net/paulp/archive/2008/06/09/122746.aspx</link>
            <description>&lt;p&gt;If you store BizTalk application settings in Enterprise SSO database and adapt continuous integration you'll find this MS Build task useful. DeploySSOConfigStore task reads settings from XML configuration file and saves them to the SSO database. The XML can be created (exported) using &lt;a href="http://seroter.wordpress.com/"&gt;Richard Seroter's&lt;/a&gt; SSO tool which I &lt;a href="http://geekswithblogs.net/paulp/archive/2008/05/16/122205.aspx"&gt;modified to support this operation&lt;/a&gt;. So, if you change your configuration settings, just update XML file in the source control and build process will pick it up and propagate changes to your target environment. Using this task is very simple, it accepts just one parameter - location of the XML settings file:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UsingTask&lt;/span&gt; &lt;span class="attr"&gt;AssemblyFile&lt;/span&gt;&lt;span class="kwrd"&gt;="CustomMSBuildTasks.BizTalk.dll"&lt;/span&gt; &lt;span class="attr"&gt;TaskName&lt;/span&gt;&lt;span class="kwrd"&gt;="CustomMSBuildTasks.BizTalk.DeploySSOConfigStore"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="DeploySSOConfigStore"&lt;/span&gt; &lt;span class="attr"&gt;DependsOnTargets&lt;/span&gt;&lt;span class="kwrd"&gt;="BizTalkDeploy"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;CustomMSBuildTasks.BizTalk.DeploySSOConfigStore&lt;/span&gt; XmlConfigurationUrl="$(SolutionRoot)\$(BuildBranch)\Source\BizTalkSettings\BizTalk.Configuration.xml"&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;I also added another useful task for publishing WCF services: PublishBizTalkWcfServices. It's very simple but does all that stuff: setting up virtual directories (if needed), publishing contracts, creating receive locations. It has comprehensive logging that helps tracking down deployment issues quickly.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PublishBizTalkWcfServices : Task
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; serviceDescriptionUrl;

        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// The URL to the description file.&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        [Required]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ServiceDescriptionUrl
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; serviceDescriptionUrl; }
            set { serviceDescriptionUrl = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// Publishes BizTalk schemas as WCF services.&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Execute()
        {
            WcfServiceDescription description = WcfServiceDescription.LoadXml(ServiceDescriptionUrl);

            Publisher publisher = &lt;span class="kwrd"&gt;new&lt;/span&gt; Publisher();
            publisher.BackgroundWorker = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.ComponentModel.BackgroundWorker();
            publisher.BackgroundWorker.WorkerReportsProgress = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            publisher.BackgroundWorker.ProgressChanged += &lt;span class="kwrd"&gt;new&lt;/span&gt; System.ComponentModel.ProgressChangedEventHandler(BackgroundWorker_ProgressChanged);

            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                PublishingResults results = publisher.Publish(description);

                Log.LogMessage(results.Message);
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
            {
                Log.LogError(ex.ToString(), &lt;span class="kwrd"&gt;null&lt;/span&gt;);
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BackgroundWorker_ProgressChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, System.ComponentModel.ProgressChangedEventArgs e)
        {
            Log.LogMessage(e.UserState.ToString(), &lt;span class="kwrd"&gt;null&lt;/span&gt;);
        }
    }&lt;/pre&gt;
&lt;p&gt;Complete Visual Studio project is &lt;a href="http://www.box.net/shared/b7ry6iuw4o"&gt;available here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122746"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122746" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulp/aggbug/122746.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Petrov</dc:creator>
            <guid>http://geekswithblogs.net/paulp/archive/2008/06/09/122746.aspx</guid>
            <pubDate>Tue, 10 Jun 2008 01:04:19 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulp/comments/122746.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulp/archive/2008/06/09/122746.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulp/comments/commentRss/122746.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulp/services/trackbacks/122746.aspx</trackback:ping>
        </item>
        <item>
            <title>Improved SSO Configuration Data Store Tool</title>
            <link>http://geekswithblogs.net/paulp/archive/2008/05/16/122205.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://seroter.wordpress.com/"&gt;Richard Seroter&lt;/a&gt; published &lt;a href="http://seroter.wordpress.com/2007/09/21/biztalk-sso-configuration-data-storage-tool/"&gt;useful utility&lt;/a&gt; to store/retrieve BizTalk configuration settings in Enterprise SSO database. I added some more functionality to it.&lt;/p&gt;
&lt;p&gt;First, I added Export/Import functions allowing to actually save values in the external XML file (Richard's implementation allowed storing only field names, calling for extra work should you delete and restore SSO aplication). I kept file format the same but added values stored as text nodes:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;sso&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;application&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="eCommerce.BizTalk.Configuration"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Configuration storage for eCommerce BizTalk applications&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;appUserAccount&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;BizTalk Application Users&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;appUserAccount&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;appAdminAccount&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;BizTalk Server Administrators&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;appAdminAccount&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;contactInfo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://geekswithblogs.net/paulp&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;contactInfo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;field&lt;/span&gt; &lt;span class="attr"&gt;ordinal&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;="App1.SiteId"&lt;/span&gt; &lt;span class="attr"&gt;masked&lt;/span&gt;&lt;span class="kwrd"&gt;="no"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;2&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;field&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;field&lt;/span&gt; &lt;span class="attr"&gt;ordinal&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;="App1.UserId"&lt;/span&gt; &lt;span class="attr"&gt;masked&lt;/span&gt;&lt;span class="kwrd"&gt;="no"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;8&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;field&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;field&lt;/span&gt; &lt;span class="attr"&gt;ordinal&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;="App2.Timeout"&lt;/span&gt; &lt;span class="attr"&gt;masked&lt;/span&gt;&lt;span class="kwrd"&gt;="no"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;5000&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;field&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;flags&lt;/span&gt; &lt;span class="attr"&gt;configStoreApp&lt;/span&gt;&lt;span class="kwrd"&gt;="yes"&lt;/span&gt; &lt;span class="attr"&gt;allowLocalAccounts&lt;/span&gt;&lt;span class="kwrd"&gt;="yes"&lt;/span&gt; &lt;span class="attr"&gt;enableApp&lt;/span&gt;&lt;span class="kwrd"&gt;="yes"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;application&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;sso&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;New usage scenarios: &lt;/p&gt;
&lt;p&gt;1. Saving configuration: &lt;/p&gt;
&lt;p&gt;1.1 Create application; &lt;br /&gt;
1.2 Save to XML; &lt;br /&gt;
1.3 Manage application - Retrieve settings; &lt;br /&gt;
1.4 Export to XML file created in (1.2).&lt;/p&gt;
&lt;p&gt;2. Restoring previously saved configuration: &lt;/p&gt;
&lt;p&gt;2.1 Create application; &lt;br /&gt;
2.2 Manage application - Import configuration from file created in (1.4) ; &lt;br /&gt;
2.3 Save Changes.&lt;/p&gt;
&lt;p&gt;Accordingly, menu items Import/Export available when the Manage Application tab is selected only.&lt;/p&gt;
&lt;p&gt;The code can be &lt;a href="http://www.box.net/shared/dk0u4kynm3"&gt;downloaded here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122205"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122205" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulp/aggbug/122205.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Petrov</dc:creator>
            <guid>http://geekswithblogs.net/paulp/archive/2008/05/16/122205.aspx</guid>
            <pubDate>Fri, 16 May 2008 20:54:34 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulp/comments/122205.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulp/archive/2008/05/16/122205.aspx#feedback</comments>
            <slash:comments>9</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulp/comments/commentRss/122205.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulp/services/trackbacks/122205.aspx</trackback:ping>
        </item>
        <item>
            <title>COM error in custom pipeline component</title>
            <link>http://geekswithblogs.net/paulp/archive/2007/12/18/117818.aspx</link>
            <description>&lt;p&gt;If you receive error:&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Arial"&gt;COM object that has been separated from its underlying RCW cannot be used.&lt;br /&gt;
The possible cause is invalid or malformed per instance configuration data.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;You most likely ran into bug (or undocumented feature) of BizTalk SDK. The problem won't show up until you edit value of component custom properties during deployment configuration. The reason is described below.&lt;/p&gt;
&lt;p dir="ltr"&gt;When you create custom pipeline component with properties you will override ReadPropertyBag(Microsoft.BizTalk.Component.Interop.&lt;font color="#2b91af"&gt;IPropertyBag pb&lt;font color="#000000"&gt;,&lt;/font&gt; &lt;font color="#0000ff"&gt;string&lt;/font&gt; &lt;/font&gt;&lt;font color="#000000"&gt;propName&lt;/font&gt;) method of base component class (for example FFDasmComp). In your implementation you must call base.Load(IPropertyBag propertyBag, in errLog) method. The problem stems from implementation this method. It uses DisposableObjectWrapper declared in using{} scope to keep reference of IPropertyBag object. DisposableObjectWrapper is a simple wrapper to handle objects that have to be disposed. In it's own Dispose() method it will call Dispose() of it's member or if the member is a COM object it will call &lt;font face="Courier New" size="2"&gt;Marshal.ReleaseComObject(object obj)&lt;font face="Arial"&gt;. &lt;/font&gt;&lt;/font&gt;Look what happens if you implemented your ReadPropertyBag method like this: &lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; ReadPropertyBag(IPropertyBag pb, &lt;span class="kwrd"&gt;string&lt;/span&gt; propName)
{  
  &lt;span class="kwrd"&gt;base&lt;/span&gt;.Load(pb, 0); &lt;span class="rem"&gt;//&amp;lt;- when this method returns reference to COM object will be lost&lt;/span&gt;
  &lt;span class="kwrd"&gt;object&lt;/span&gt; val = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
  &lt;span class="kwrd"&gt;try&lt;/span&gt;
  {
    pb.Read(propName, &lt;span class="kwrd"&gt;out&lt;/span&gt; val, 0);&lt;span class="rem"&gt;//&amp;lt;- this line will throw COM Interop exception&lt;/span&gt;
  }
  &lt;span class="kwrd"&gt;catch&lt;/span&gt; (System.ArgumentException)
  {
    &lt;span class="kwrd"&gt;return&lt;/span&gt; val;
  }
}
&lt;/pre&gt;
&lt;p&gt;To work around this issue just call base.Load() after all your calls to IPropertyBag. This will work fine:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;pb.Read(propName, &lt;span class="kwrd"&gt;out&lt;/span&gt; val, 0);
&lt;span class="kwrd"&gt;base&lt;/span&gt;.Load(pb, 0)
&lt;/pre&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117818"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117818" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulp/aggbug/117818.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Petrov</dc:creator>
            <guid>http://geekswithblogs.net/paulp/archive/2007/12/18/117818.aspx</guid>
            <pubDate>Wed, 19 Dec 2007 00:58:06 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulp/comments/117818.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulp/archive/2007/12/18/117818.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulp/comments/commentRss/117818.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulp/services/trackbacks/117818.aspx</trackback:ping>
        </item>
        <item>
            <title>Generic custom configuration elements collection based on ConfigurationElementCollection</title>
            <link>http://geekswithblogs.net/paulp/archive/2007/11/13/116830.aspx</link>
            <description>&lt;p&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;Simple trick that saves me some time and coding when writing custom configuration objects is to define generic collection for them. Let's say I created several custom configuration elements derived from my CustomConfigElementBase which in turn inherits from &lt;a href="http://msdn2.microsoft.com/en-us/library/system.configuration.configurationelement.aspx"&gt;System.Configuration.ConfigurationElement&lt;/a&gt;. Instead of defining strongly typed collections for each type I can simply define class:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;public class &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial"&gt;GenericConfigElementCollection&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;&amp;lt;T&amp;gt; : &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial"&gt;ConfigurationElementCollection&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;where&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; T : &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial"&gt;CustomConfigElementBase&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;new&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;()&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;{&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;  public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; T &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;[&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;int&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; index]&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;  {&lt;/span&gt;&lt;/p&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;    get&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;    &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;{&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;      return base&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;.BaseGet(index) &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;as&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; T;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;    }&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;    set&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;    &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;{&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;      if&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; (&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;base&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;.BaseGet(index) != &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;null&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;)&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;       base&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;.BaseRemoveAt(index);&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;      base&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;.BaseAdd(index, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;value&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;);&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;    }&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;  }&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;  protected override &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial"&gt;ConfigurationElement&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; CreateNewElement()&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;  {&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;    return new&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; T();&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;  }&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;  protected override object&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; GetElementKey(&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial"&gt;ConfigurationElement&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; element)&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;  {&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;    return&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; ((T)element).ElementKey;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;  }&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;}&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Note, that base custom configuration element has property ElementKey to satisfy GetElementKey method implementation. If your custom elements have different keys, you can override this property. It's possible to skip CustomConfigElementBase and define generic collection with ConfigurationElement type restriction. GetElementKey implementation would use reflection to retreive key property:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;public class &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial"&gt;GenericConfigElementCollection&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;&amp;lt;T&amp;gt; : &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial"&gt;ConfigurationElementCollection&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;where&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; T : &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial"&gt;ConfigurationElement&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;new&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;()&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;  protected override object&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; GetElementKey(&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial"&gt;ConfigurationElement&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt; element)&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;  {&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;    //- find and return property which is a key for a given type T using reflection&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;    ...&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;  }&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Now, when we define configuration section we just return generic collection of appropriate type:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;MyCustomConfigSection&lt;/span&gt; : &lt;span style="COLOR: teal"&gt;ConfigurationSection&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;{&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;[&lt;span style="COLOR: teal"&gt;ConfigurationProperty&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"myCustomSettings"&lt;/span&gt;, IsRequired = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;)]&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: teal"&gt;GenericConfigElementCollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: teal"&gt;MyCustomConfigElement&lt;/span&gt;&amp;gt; MyCustomSettings&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;{&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;&lt;span style="COLOR: blue"&gt;get&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;{&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;                &lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;[&lt;span style="COLOR: maroon"&gt;"myCustomSettings"&lt;/span&gt;] &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;                  &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; &lt;span style="COLOR: teal"&gt;GenericConfigElementCollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: teal"&gt;MyCustomConfigElement&lt;/span&gt;&amp;gt;;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;And then just use it in an application code:&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial"&gt;GenericConfigElementCollection&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;lt;&lt;span style="COLOR: teal"&gt;MyCustomConfigElement&lt;/span&gt;&amp;gt; configCollection = configSection.MyCustomSettings;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: Arial"&gt;MyCustomConfigSection&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt; configSection = (&lt;span style="COLOR: teal"&gt;MyCustomConfigSection&lt;/span&gt;)&lt;span style="COLOR: teal"&gt;ConfigurationManager&lt;/span&gt;.GetSection(&lt;span style="COLOR: maroon"&gt;"mySection"&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116830"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116830" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulp/aggbug/116830.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Petrov</dc:creator>
            <guid>http://geekswithblogs.net/paulp/archive/2007/11/13/116830.aspx</guid>
            <pubDate>Tue, 13 Nov 2007 19:32:37 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulp/comments/116830.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulp/archive/2007/11/13/116830.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulp/comments/commentRss/116830.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulp/services/trackbacks/116830.aspx</trackback:ping>
        </item>
        <item>
            <title>MS BizTalk Server 2006 certification passed</title>
            <link>http://geekswithblogs.net/paulp/archive/2006/07/19/85741.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I passed new Microsoft Certified Technology Specialist (MCTS) exam 70-235: &lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Developing Business Process and Integration Solutions using &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:PersonName w:st="on"&gt;Microsoft&lt;/st1:PersonName&gt;&amp;#174; BizTalk&amp;#174; Server 2006.&amp;nbsp;Fresh experience with BizTalk 2006 helped a lot as well as reading documentation, blogs.&amp;nbsp;Interestingly,&amp;nbsp;this exam&amp;nbsp;stands aside of new Microsoft Certified Professional Developer (MCPD) path. It would make sense to include it as an elective option earning credit towards MCPD: Enterprise Application Developer. This exam with the combination of:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-549.asp"&gt;Exam 70&amp;#8211;549&lt;/A&gt;: PRO: Designing and Developing Enterprise Applications by Using the Microsoft .NET Framework&lt;/SPAN&gt;&lt;/LI&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;LI&gt;
&lt;DIV class=lastInCell&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-536.asp"&gt;&lt;FONT color=#002c99&gt;Exam 70&amp;#8211;536&lt;/FONT&gt;&lt;/A&gt;: TS: Microsoft .NET Framework 2.0 - Application Development Foundation&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=lastInCell&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-528.asp"&gt;&lt;FONT color=#002c99&gt;Exam 70&amp;#8211;528&lt;/FONT&gt;&lt;/A&gt;: TS: Microsoft .NET Framework 2.0 - Web-Based Client Development&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=lastInCell&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-529.asp"&gt;&lt;FONT color=#002c99&gt;Exam 70&amp;#8211;529&lt;/FONT&gt;&lt;/A&gt;: TS: Microsoft .NET Framework 2.0 - Distributed Application Development&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=lastInCell&gt;would give well rounded Enterprise Application Developer skill set with emphasis on integration and business automation given that you've got to know all that stuff anyways to use BizTalk efficiently. I don't know what Microsoft planned this certification for but without skills listed above one can't develop a solid &amp;#8220;Business Process and Integration Solutions&amp;#8221;. So it does look like an orphan certification right now.&lt;/P&gt;&lt;/SPAN&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=85741"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=85741" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulp/aggbug/85741.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Petrov</dc:creator>
            <guid>http://geekswithblogs.net/paulp/archive/2006/07/19/85741.aspx</guid>
            <pubDate>Wed, 19 Jul 2006 22:46:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulp/comments/85741.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulp/archive/2006/07/19/85741.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulp/comments/commentRss/85741.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulp/services/trackbacks/85741.aspx</trackback:ping>
        </item>
        <item>
            <title>Precompiling BizTalk Web Service Endpoint</title>
            <link>http://geekswithblogs.net/paulp/archive/2006/04/19/75633.aspx</link>
            <description>&lt;P&gt;In a recent &lt;A href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032291069&amp;amp;EventCategory=5&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;MSDN webcast&lt;/A&gt; given by &lt;A href="http://blogs.msdn.com/richardbpi"&gt;Richard Seroter&lt;/A&gt; somebody asked about how to avoid &amp;#8220;first hit latency&amp;#8221; caused by JIT compiling web service code which is deployed not compiled by default. In &lt;A href="http://geekswithblogs.net/paulp/archive/2006/03/30/73900.aspx"&gt;my post&lt;/A&gt; about web project deployment I wrote about precompiling BizTalk web services using &lt;A href="http://msdn2.microsoft.com/en-us/library/ms229863(VS.80).aspx"&gt;aspnet_compiler&lt;/A&gt;&amp;nbsp;that will cure this problem. I just wanted to highlight some details.
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;First, the project can not be compiled in-place, otherwise files get overwritten. It's better to create&amp;nbsp;separate folder for precompiled web artifacts and pass it as&amp;nbsp;-targetDir to aspnet_compiler.exe.
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Second, since you most likely use some script to add assemblies to the BizTalk application its good to use -fixednames option to get consistent file names and directory structure across builds.
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Third, if you still want to have some source files updateable (let's say documentation aspx pages), you' can provide -u switch to the compiler.
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;And the last, it's always good to sign your assemblies with strong key so there are&amp;nbsp;-keyfile, -delaysign, -aptca compiler switches to do that.&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=75633"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=75633" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulp/aggbug/75633.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Petrov</dc:creator>
            <guid>http://geekswithblogs.net/paulp/archive/2006/04/19/75633.aspx</guid>
            <pubDate>Wed, 19 Apr 2006 18:34:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulp/comments/75633.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulp/archive/2006/04/19/75633.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/paulp/comments/commentRss/75633.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulp/services/trackbacks/75633.aspx</trackback:ping>
        </item>
        <item>
            <title>Setting relative path of the key file in Visual Studio 2005 project</title>
            <link>http://geekswithblogs.net/paulp/archive/2006/02/06/68453.aspx</link>
            <description>&lt;P&gt;If you like to keep solutions organized, keep common things together, store keys separately, and use automated builds you&amp;#8217;d probably get frustrated by the new Signing tab of the Project Settings UI. Don&amp;#8217;t get lured by the fancy look-n-feel of this dialog &amp;#8211; it won&amp;#8217;t let you set relative path of the&amp;nbsp;strong key file. If you browse to the existing file, IDE will try to copy it&amp;nbsp;into the project folder. Type things like &amp;#8220;..\key.snk&amp;#8221; and it just barks at you that such symbols are not allowed&amp;nbsp;in the file name. It's odd, as this is very important when you manage and store keys separately and use them to sign multiple projects. This is vital in BizTalk development, when all bindings and mappings depend on strong names of artifacts and accidental change of&amp;nbsp;signature can cause solution to break.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;The hack is simple: open project file *.csproj or *.vbproj in notepad and find &lt;ASSEMBLYORIGINATORKEY&gt;element &amp;lt;AssemblyOriginatorKeyFile&amp;gt;. Type in path of your choice something like: &amp;#8220;&lt;ASSEMBLYORIGINATORKEYFILE&gt;..\..\Common\KeyFileName.snk&lt;/ASSEMBLYORIGINATORKEYFILE&gt;..&amp;#8221;, save and reload the project. You're set to run your favorite build script.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=68453"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=68453" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulp/aggbug/68453.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Petrov</dc:creator>
            <guid>http://geekswithblogs.net/paulp/archive/2006/02/06/68453.aspx</guid>
            <pubDate>Mon, 06 Feb 2006 23:08:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/paulp/comments/68453.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/paulp/archive/2006/02/06/68453.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/paulp/comments/commentRss/68453.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/paulp/services/trackbacks/68453.aspx</trackback:ping>
        </item>
    </channel>
</rss>