<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Just blogging</title><link>https://weblogs.asp.net:443/pabloretyk/</link><description>

</description><item><title>Adding a Reference Path to all your .NET projects</title><link>https://weblogs.asp.net:443/pabloretyk/adding-a-reference-path-to-all-your-net-projects</link><description>&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
&lt;/style&gt;   &lt;p&gt;This is usually useful when you have several projects that have references to other's projects or 3rd parties assemblies, or for your compile server, instead of adding the reference paths to the project properties for each project you can just add the following key to the registry: &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;   &lt;div style="border: silver 1px solid; text-align: left;   line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px;  width: 97.5%;  font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr;  font-size: 8pt; overflow: scroll;   padding: 4px" id="codeSnippetWrapper"&gt;     &lt;pre class="csharpcode"&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\MyAssemblies]
@=&lt;span class="str"&gt;"p:\\somefolder\\somebuild\\bin"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

EDIT: for 64 bits machines use this:

&lt;div style="border: silver 1px solid; text-align: left;   line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px;  width: 97.5%;  font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr;  font-size: 8pt; overflow: scroll;   padding: 4px" id="codeSnippetWrapper"&gt;     &lt;pre class="csharpcode"&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\MyAssemblies]
@=&lt;span class="str"&gt;"p:\\somefolder\\somebuild\\bin"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><pubDate>Wed, 27 Jan 2010 11:55:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/pabloretyk/adding-a-reference-path-to-all-your-net-projects</guid><category>.NET</category><category>MSBuild</category><category>Reference Paths</category></item><item><title>Override WCF client settings for custom config file using DuplexChannel</title><link>https://weblogs.asp.net:443/pabloretyk/override-wcf-client-settings-for-custom-config-file-using-duplexchannel</link><description>&lt;P&gt;WCF config files are a great thing, once you have everything configured you just need 2 or 3 lines of code and everything get parsed and you are able to consume the service. By default WCF configuration is stored in the app.config or web.config of the main application, but sometimes (as was my case) the client is in-process of another unknown application, if so the WCF config file will have to be named SomeApp.exe.config and would need to be placed in the same folder as the application. Dealing with this can make things difficult, this is when you have to create your own ChannelFactory&lt;T&gt;, this way you can provide your own config file. The solution I found after doing some goggling was to inherit from ChannelFactory&lt;T&gt; and the pass the config file to the constructor &lt;/P&gt;     &lt;P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt; &lt;STYLE type=text/css&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt; &lt;/P&gt; &lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; CustomChannelFactory(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; configurationPath)&lt;/PRE&gt;&lt;PRE&gt;     : &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;(&lt;SPAN class=kwrd&gt;typeof&lt;/SPAN&gt;(T))&lt;/PRE&gt;&lt;PRE class=alt&gt;{&lt;/PRE&gt;&lt;PRE&gt;     &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.configurationPath = configurationPath;&lt;/PRE&gt;&lt;PRE class=alt&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;and the override CreateDescription method in which we set our config file. This works great, but not for my case since I was using a DuplexChannel, so when we inherith from DuplexChannelFactory&lt;T&gt; we must call the base constructor with the CallBackInstance parameter, so the CreateDescription will be called before we can initialize the configurationPath member. The only solution I had in mind was make ConfigurationPath to be static member and then we initialize this before we create the instance of our CustomDuplexChannel, this solution seemed "ugly" for me at first but then I realized that the configuration can be stored in a static member since we are planning to use one configuration file for consuming all our services.



 &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;STYLE type=text/css&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;/P&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt; 

&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; CustomDuplexChannelFactory&amp;lt;TChannel&amp;gt; : DuplexChannelFactory&amp;lt;TChannel&amp;gt;&lt;/PRE&gt;&lt;PRE&gt;    {&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// Gets or sets the configuration path.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;value&amp;gt;The configuration path.&amp;lt;/value&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&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; ConfigurationPath { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// Custom client channel constructor.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; CustomDuplexChannelFactory(InstanceContext callbackInstance)&lt;/PRE&gt;&lt;PRE class=alt&gt;            : &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;(callbackInstance)&lt;/PRE&gt;&lt;PRE&gt;        {&lt;/PRE&gt;&lt;PRE class=alt&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// Overrides the CreateDescription() method of the channel factory&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// to apply a new configuration file.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;override&lt;/SPAN&gt; ServiceEndpoint CreateDescription()&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            ServiceEndpoint serviceEndpoint = &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.CreateDescription();&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(ConfigurationPath == &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt; || !File.Exists(ConfigurationPath))&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.CreateDescription();&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            ExeConfigurationFileMap executionFileMap = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; ExeConfigurationFileMap();&lt;/PRE&gt;&lt;PRE class=alt&gt;            executionFileMap.ExeConfigFilename = ConfigurationPath;&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            System.Configuration.Configuration config = &lt;/PRE&gt;&lt;PRE&gt;                ConfigurationManager.OpenMappedExeConfiguration(&lt;/PRE&gt;&lt;PRE class=alt&gt;                executionFileMap, ConfigurationUserLevel.None);&lt;/PRE&gt;&lt;PRE&gt;            ServiceModelSectionGroup serviceModeGroup = &lt;/PRE&gt;&lt;PRE class=alt&gt;                ServiceModelSectionGroup.GetSectionGroup(config);&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            ChannelEndpointElement selectedEndpoint = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt;(ChannelEndpointElement endpoint &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; serviceModeGroup.Client.Endpoints)&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(endpoint.Contract == serviceEndpoint.Contract.ConfigurationName)&lt;/PRE&gt;&lt;PRE&gt;                {&lt;/PRE&gt;&lt;PRE class=alt&gt;                    selectedEndpoint = endpoint;&lt;/PRE&gt;&lt;PRE&gt;                    &lt;SPAN class=kwrd&gt;break&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE class=alt&gt;                }&lt;/PRE&gt;&lt;PRE&gt;            }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(selectedEndpoint != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(serviceEndpoint.Binding == &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE class=alt&gt;                {&lt;/PRE&gt;&lt;PRE&gt;                    serviceEndpoint.Binding = CreateBinding(selectedEndpoint.Binding, serviceModeGroup);&lt;/PRE&gt;&lt;PRE class=alt&gt;                }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(serviceEndpoint.Address == &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE&gt;                {&lt;/PRE&gt;&lt;PRE class=alt&gt;                    serviceEndpoint.Address = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; EndpointAddress(selectedEndpoint.Address,&lt;/PRE&gt;&lt;PRE&gt;                        GetIdentity(selectedEndpoint.Identity), selectedEndpoint.Headers.Headers);&lt;/PRE&gt;&lt;PRE class=alt&gt;                }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(serviceEndpoint.Behaviors.Count == 0 &amp;amp;&amp;amp; &lt;/PRE&gt;&lt;PRE&gt;                    !String.IsNullOrEmpty(selectedEndpoint.BehaviorConfiguration))&lt;/PRE&gt;&lt;PRE class=alt&gt;                {&lt;/PRE&gt;&lt;PRE&gt;                    AddBehaviors(selectedEndpoint.BehaviorConfiguration, &lt;/PRE&gt;&lt;PRE class=alt&gt;                        serviceEndpoint, serviceModeGroup);&lt;/PRE&gt;&lt;PRE&gt;                }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;                serviceEndpoint.Name = selectedEndpoint.Contract;&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; serviceEndpoint;&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=preproc&gt;#region&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// Configures the binding for the selected endpoint.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;param name="bindingName"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;param name="group"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; Binding CreateBinding(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; bindingName, ServiceModelSectionGroup group)&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            BindingCollectionElement bindingElementCollection = group.Bindings[bindingName];&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(bindingElementCollection.ConfiguredBindings.Count &amp;gt; 0)&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                IBindingConfigurationElement be = bindingElementCollection.ConfiguredBindings[0];&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;                Binding binding = GetBinding(be);&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(be != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE class=alt&gt;                {&lt;/PRE&gt;&lt;PRE&gt;                    be.ApplyConfiguration(binding);&lt;/PRE&gt;&lt;PRE class=alt&gt;                }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; binding;&lt;/PRE&gt;&lt;PRE&gt;            }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE class=alt&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// Adds the configured behavior to the selected endpoint&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;param name="behaviorConfiguration"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;param name="serviceEndpoint"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;param name="group"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; AddBehaviors(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; behaviorConfiguration, ServiceEndpoint serviceEndpoint,&lt;/PRE&gt;&lt;PRE&gt;            ServiceModelSectionGroup group)&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            EndpointBehaviorElement behaviorElement = &lt;/PRE&gt;&lt;PRE class=alt&gt;                group.Behaviors.EndpointBehaviors[behaviorConfiguration];&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;for&lt;/SPAN&gt;(&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; i = 0; i &amp;lt; behaviorElement.Count; i++)&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                BehaviorExtensionElement behaviorExtension = behaviorElement[i];&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;object&lt;/SPAN&gt; extension = behaviorExtension.GetType().InvokeMember(&lt;SPAN class=str&gt;"CreateBehavior"&lt;/SPAN&gt;,&lt;/PRE&gt;&lt;PRE&gt;                BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance,&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;, behaviorExtension, &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(extension != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE class=alt&gt;                {&lt;/PRE&gt;&lt;PRE&gt;                    serviceEndpoint.Behaviors.Add((IEndpointBehavior)extension);&lt;/PRE&gt;&lt;PRE class=alt&gt;                }&lt;/PRE&gt;&lt;PRE&gt;            }&lt;/PRE&gt;&lt;PRE class=alt&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// Gets the endpoint identity from the configuration file&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;param name="element"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; EndpointIdentity GetIdentity(IdentityElement element)&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            EndpointIdentity identity = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE class=alt&gt;            PropertyInformationCollection properties = element.ElementInformation.Properties;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(properties[&lt;SPAN class=str&gt;"userPrincipalName"&lt;/SPAN&gt;].ValueOrigin != PropertyValueOrigin.Default)&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; EndpointIdentity.CreateUpnIdentity(element.UserPrincipalName.Value);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(properties[&lt;SPAN class=str&gt;"servicePrincipalName"&lt;/SPAN&gt;].ValueOrigin != PropertyValueOrigin.Default)&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; EndpointIdentity.CreateSpnIdentity(element.ServicePrincipalName.Value);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(properties[&lt;SPAN class=str&gt;"dns"&lt;/SPAN&gt;].ValueOrigin != PropertyValueOrigin.Default)&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; EndpointIdentity.CreateDnsIdentity(element.Dns.Value);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(properties[&lt;SPAN class=str&gt;"rsa"&lt;/SPAN&gt;].ValueOrigin != PropertyValueOrigin.Default)&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; EndpointIdentity.CreateRsaIdentity(element.Rsa.Value);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(properties[&lt;SPAN class=str&gt;"certificate"&lt;/SPAN&gt;].ValueOrigin != PropertyValueOrigin.Default)&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                X509Certificate2Collection supportingCertificates = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; X509Certificate2Collection();&lt;/PRE&gt;&lt;PRE class=alt&gt;                supportingCertificates.Import(Convert.FromBase64String(element.Certificate.EncodedValue));&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(supportingCertificates.Count == 0)&lt;/PRE&gt;&lt;PRE class=alt&gt;                {&lt;/PRE&gt;&lt;PRE&gt;                    &lt;SPAN class=kwrd&gt;throw&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; InvalidOperationException(&lt;SPAN class=str&gt;"UnableToLoadCertificateIdentity"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE class=alt&gt;                }&lt;/PRE&gt;&lt;PRE&gt;                X509Certificate2 primaryCertificate = supportingCertificates[0];&lt;/PRE&gt;&lt;PRE class=alt&gt;                supportingCertificates.RemoveAt(0);&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; EndpointIdentity.CreateX509CertificateIdentity(primaryCertificate, &lt;/PRE&gt;&lt;PRE class=alt&gt;                    supportingCertificates);&lt;/PRE&gt;&lt;PRE&gt;            }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; identity;&lt;/PRE&gt;&lt;PRE class=alt&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// Helper method to create the right binding depending on the configuration element&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;param name="configurationElement"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; Binding GetBinding(IBindingConfigurationElement configurationElement)&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(configurationElement &lt;SPAN class=kwrd&gt;is&lt;/SPAN&gt; CustomBindingElement)&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; CustomBinding();&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(configurationElement &lt;SPAN class=kwrd&gt;is&lt;/SPAN&gt; BasicHttpBindingElement)&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; BasicHttpBinding();&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(configurationElement &lt;SPAN class=kwrd&gt;is&lt;/SPAN&gt; NetMsmqBindingElement)&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; NetMsmqBinding();&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(configurationElement &lt;SPAN class=kwrd&gt;is&lt;/SPAN&gt; NetNamedPipeBindingElement)&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; NetNamedPipeBinding();&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(configurationElement &lt;SPAN class=kwrd&gt;is&lt;/SPAN&gt; NetPeerTcpBindingElement)&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; NetPeerTcpBinding();&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(configurationElement &lt;SPAN class=kwrd&gt;is&lt;/SPAN&gt; NetTcpBindingElement)&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; NetTcpBinding();&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(configurationElement &lt;SPAN class=kwrd&gt;is&lt;/SPAN&gt; WSDualHttpBindingElement)&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; WSDualHttpBinding();&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(configurationElement &lt;SPAN class=kwrd&gt;is&lt;/SPAN&gt; WSHttpBindingElement)&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; WSHttpBinding();&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;(configurationElement &lt;SPAN class=kwrd&gt;is&lt;/SPAN&gt; WSFederationHttpBindingElement)&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; WSFederationHttpBinding();&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;    }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description><pubDate>Sun, 17 Jan 2010 09:18:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/pabloretyk/override-wcf-client-settings-for-custom-config-file-using-duplexchannel</guid><category>.NET</category><category>Config-file</category><category>DuplexChannel</category><category>WCF</category></item></channel></rss>