<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Stephen Kaufman's WebLog : BizTalk</title><link>http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx</link><description>Tags: BizTalk</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>AppFabric and BizTalk</title><link>http://blogs.msdn.com/skaufman/archive/2009/11/23/appfabric-and-biztalk.aspx</link><pubDate>Tue, 24 Nov 2009 05:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9927727</guid><dc:creator>skaufman</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9927727.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9927727</wfw:commentRss><description>&lt;P&gt;There have been lots of questions lately about AppFabric (code named Dublin). These questions have centered around why Microsoft needs another middle tier solution and will AppFabric replace BizTalk.&lt;/P&gt;
&lt;P&gt;Lets take a look at these questions as well as two additional questions; What is AppFabric and why does Microsoft need another middle tier solution? First, AppFabric is a distributed application server. To answer the other questions, we need to go in a little more depth. &lt;/P&gt;
&lt;P&gt;Before .NET was released, developers working with the Microsoft technologies used COM+ to host their middle tier objects. Back then, when we needed to scale out our object oriented and object based applications we created middle tier code libraries and ‘hosted’ them in COM+. The COM+ host provided instance management (just-in-time activation), role-based security, automated transaction management as well as better memory and processor management, distributed transactions and a number of other services.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When .NET was introduced, we moved away from COM components and also moved away from using COM+ as a hosting model. This left a vacuum that so far had gone unfilled. &lt;/P&gt;
&lt;P&gt;In attempts to fill this vacuum, individual developers had to create their own hosts. These hosts typically were Windows Services. However, these services usually didn’t include multi threading, scale out capabilities, tracking, monitoring, etc. – the types of functionality that has been in BizTalk for years. As Microsoft looked at BizTalk, as well as the .NET Framework, it was determined that there are many great features in BizTalk that if a scaled down version was available it would address gaps in the framework. Thus AppFabric was born.&lt;/P&gt;
&lt;P&gt;For .NET developers writing applications using WCF and WF, AppFabric will fill the middle tier hosting vacuum. AppFabric will provide the host and will provide scalability and support for building out your middle tier application components. It also will simplify deployment, configuration, management and scalability of composite applications. The goal of AppFabric is to provide a server infrastructure, on which business logic developed in WF can be executed and exposed via WCF endpoints, without the need to design, develop, and support the infrastructural code.&lt;/P&gt;
&lt;P&gt;The next question I hear is will AppFabric replace BizTalk? The answer is very clearly no. &lt;/P&gt;
&lt;P&gt;AppFabric should be used when your architecture calls for an application level code-first object based approach. This is the same approach that is used by WF and WCF programming models and is the one that can be hosted in AppFabric and the additional functionality that AppFabric provides. AppFabric will provide a number of management and scalability features through IIS and WAS to provide the server infrastructure without the need to write the plumbing as you did before. This is a different approach than that of the XML Schema first approach that is used in BizTalk. &lt;/P&gt;
&lt;P&gt;Use BizTalk when your architecture calls for an enterprise level message based approach. Use BizTalk when you need to isolate disparate systems that need to be connected. In point-to-point integrations, changes made to the provider system can have a profound impact on the consuming application. BizTalk natively provides a hub-based integration model which eases this burden and allows organizations to provide business services that are isolated from the impact of changes made to the systems and processes on which these services are based. This is achieved through the use of separate schemas, and the associated ability to easily develop message transformation logic using BizTalk’s Mapper tool. Use BizTalk if you have business-to-business requirements and need to integrate using technologies such as EDI, SWIFT, RosettaNet, AS2 or HL7.&lt;/P&gt;
&lt;P&gt;The reality is that businesses will utilize both of these technologies in their different application architectures. This is not an either or decision but instead a decision of where and when to use each.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Keep in mind, however, that many of the same terms are used to describe the functionality provided with both BizTalk and AppFabric. These terms are things like Content Based Routing, Correlation, long running transactions, etc. Although the terms are the same the implementation and functionality is different. With all decisions, make sure that you take a couple of minutes to look under the hood and ensure that you understand the differences. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9927727" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/WF/default.aspx">WF</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/AppFabric/default.aspx">AppFabric</category></item><item><title>Follow Up from TechEd Europe</title><link>http://blogs.msdn.com/skaufman/archive/2009/11/20/follow-up-from-teched-europe.aspx</link><pubDate>Sat, 21 Nov 2009 05:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9926659</guid><dc:creator>skaufman</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9926659.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9926659</wfw:commentRss><description>&lt;A href="http://blogs.msdn.com/paolos" mce_href="http://blogs.msdn.com/paolos"&gt;Paolo Salvatori&lt;/A&gt; and I delivered a session titled 'Customizing and Extending the BizTalk WCF Adapters' and Paolo has created a number of fantastic blog entries around this subject.&amp;nbsp; His latest &lt;A href="http://blogs.msdn.com/paolos/archive/2009/11/17/customizing-and-extending-the-biztalk-wcf-adapters.aspx" mce_href="http://blogs.msdn.com/paolos/archive/2009/11/17/customizing-and-extending-the-biztalk-wcf-adapters.aspx"&gt;entry&lt;/A&gt; goes through much of the content that was delivered in the session and he has included a number of links at the bottom for more WCF Adapter information and samples.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9926659" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Speaking at TechEd Europe 2009</title><link>http://blogs.msdn.com/skaufman/archive/2009/10/13/speaking-at-teched-europe-2009.aspx</link><pubDate>Tue, 13 Oct 2009 05:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9906441</guid><dc:creator>skaufman</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9906441.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9906441</wfw:commentRss><description>&lt;P&gt;I will be speaking at TechEd Europe 2009 in Berlin Germany November 9th through the 13th.&lt;/P&gt;
&lt;P&gt;I will be presenting two sessions.&amp;nbsp; My first is a 'Deep Dive with Microsoft BizTalk Server 2009 Development Platform' and my second is 'Customizing and Extending the BizTalk WCF Adapters'.&lt;/P&gt;
&lt;P&gt;If you are going to be there stop by and say hello.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9906441" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/.NET/default.aspx">.NET</category></item><item><title>WCF:  Did you know?</title><link>http://blogs.msdn.com/skaufman/archive/2009/08/12/wcf-did-you-know.aspx</link><pubDate>Thu, 13 Aug 2009 01:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9867284</guid><dc:creator>skaufman</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9867284.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9867284</wfw:commentRss><description>&lt;P&gt;Did you know that when doing contract first development and utilize a Boolean data type with a default value (lets just say the default value was set to true), WCF will not serialize out the default value in the message.&amp;nbsp; WCF will only serialize out the value if it differs from the default.&lt;/P&gt;
&lt;P&gt;This was an interesting scenario in BizTalk when we were trying to test for the Boolean to be true and we saw that it was actually empty.&lt;/P&gt;
&lt;P&gt;Sometimes I wonder with these types of issues if I am the only one in the world that didn't know that.&amp;nbsp; I am going to make the assumption that this will be news to more people then just me.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9867284" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/.NET/default.aspx">.NET</category></item><item><title>WSE, DIME; WCF, MTOM; OH My!</title><link>http://blogs.msdn.com/skaufman/archive/2009/07/20/wse-dime-wcf-mtom-oh-my.aspx</link><pubDate>Mon, 20 Jul 2009 20:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9841995</guid><dc:creator>skaufman</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9841995.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9841995</wfw:commentRss><description>I was recently working on a proof of concept where we needed to interface to a repository that returned the documents using DIME attachments.&amp;nbsp; I don't know if you have had the 'opportunity' to work with DIME attachments before but there isn't much that still supports that format.&amp;nbsp; Since the manufacturer of the repository wasn't upgrading their software to take advantage of the new MTOM format we needed to consume the DIME attachments and convert them to MTOM attachments through an exposed WCF end point. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;My client was putting this service on their ESB, which was built using BizTalk, and we utilized the WSE 2.0 extensions (yes, you can still &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=1ba1f631-c3e7-420a-bc1e-ef18bab66122&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=1ba1f631-c3e7-420a-bc1e-ef18bab66122&amp;amp;displaylang=en"&gt;download&lt;/A&gt; them) for the DIME support.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To do this we downloaded the WSE extensions and created a class that we would call from within our Orchestration.&amp;nbsp; We added a Web Reference to point to the web service of the repository.&amp;nbsp; We then replaced the default inherited class in the proxy with the WSE class, Microsoft.Web.Services2.WebServicesClientProtocol.&amp;nbsp; At this point we were ready to start writing code to consume the attachments.&lt;/P&gt;
&lt;P&gt;In the code below, we loop through the attachments in the ResponseSoapContext and then load them into a stream object.&amp;nbsp; We then used the Convert class to convert the byte array to the properly converted Base64String and placed that as the value of the Attachment node.&amp;nbsp; The schema node's data type in the schema in BizTalk for the attachment is set to Base64Binary.&amp;nbsp; The best part about this whole POC is that by putting our attachment in the Base64Binary data type, all that we need to do is set the encoding on the WCF adapter to MTOM and BizTalk will do all the MTOM work for us.&amp;nbsp; Also in the code below, you will notice that we used Linq to XML.&amp;nbsp; The great part of POC's is that you can play with the new technology and in this case see just how easy it is to put together the XML message.&amp;nbsp; Even though we were playing with Linq, I still needed to pass back an XML Document for the Orchestration to consume.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; System;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; System.Collections.Generic;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; System.Linq;&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; System.Text;&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; System.Drawing;&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; System.Xml.Linq;&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; Microsoft.Web.Services2.Dime;&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; System.IO;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; System.Xml.Serialization;&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; System.Xml;&lt;o:p&gt;&lt;BR&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;namespace&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt; OrchestrationHelper&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;{&lt;SPAN style="mso-spacerun: yes"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;SPAN style="COLOR: #2b91af"&gt;Serializable&lt;/SPAN&gt;]&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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: #2b91af"&gt;OrchestrationHelperWrapper&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;MyService.&lt;SPAN style="COLOR: #2b91af"&gt;Service&lt;/SPAN&gt; svc = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; MyService.&lt;SPAN style="COLOR: #2b91af"&gt;Service&lt;/SPAN&gt;();&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;XmlDocument&lt;/SPAN&gt; RetrieveAttachment(&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; token, &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; name)&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;XElement&lt;/SPAN&gt; xmlTree = &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;;&lt;o:p&gt;&lt;BR&gt;&lt;/o:p&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; iResult = svc.RetrieveFile(token, name);&lt;SPAN style="mso-spacerun: yes"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;XElement&lt;/SPAN&gt; myNode;&lt;o:p&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&lt;/o:p&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (iResult == 0)&amp;nbsp; //0 = successful retrieve&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (svc.ResponseSoapContext.Attachments.Count &amp;gt; 0)&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;XNamespace&lt;/SPAN&gt; ns = &lt;SPAN style="COLOR: #a31515"&gt;"http://POC.DimeReturnSchema"&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;xmlTree = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;XElement&lt;/SPAN&gt;(ns + &lt;SPAN style="COLOR: #a31515"&gt;"ReturnedAttachments"&lt;/SPAN&gt;);&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;XElement&lt;/SPAN&gt; xmlAttachments = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;XElement&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"Attachments"&lt;/SPAN&gt;);&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;xmlTree.Add(xmlAttachments);&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; index = 0; index &amp;lt; svc.ResponseSoapContext.Attachments.Count; index++)&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Stream&lt;/SPAN&gt; myStream = svc.ResponseSoapContext.Attachments[&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;index&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;].Stream;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; length = (&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;)myStream.Length;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[] bytes = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[length];&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;myStream.Read(bytes, 0, length);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;myNode = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;XElement&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"Attachment"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #2b91af"&gt;Convert&lt;/SPAN&gt;.ToBase64String(bytes));&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;xmlAttachments.Add(myNode);&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;XmlDocument&lt;/SPAN&gt; xdoc = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;XmlDocument&lt;/SPAN&gt;();&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;xdoc.LoadXml(xmlTree.ToString());&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; xdoc;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Back in BizTalk, in our Orchestration, we called the OrchestrationHelper through the ConstructMessage shape and assigned the returned Xml Document to the Orchestration Message.&amp;nbsp; We created a WCF endpoint and selected Mtom encoding on the Binding tab of the WCF Transport Properties dialog.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The best part is that BizTalk automatically encoded anything that was set to Base64Binary to the MTOM format and it can all be done through configuration in the WCF adapter settings.&amp;nbsp; All that we needed to do was to consume the DIME attachment and place it in an element with the right data type.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9841995" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Exposing Custom WCF Headers through WCF Behaviors - Part 3</title><link>http://blogs.msdn.com/skaufman/archive/2009/06/24/exposing-custom-wcf-headers-through-wcf-behaviors-part-3.aspx</link><pubDate>Thu, 25 Jun 2009 03:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9802671</guid><dc:creator>skaufman</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9802671.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9802671</wfw:commentRss><description>
&lt;STYLE type=text/css&gt;
.style1 {
	font-family: "Courier New", Courier, monospace;
font-size: x-small;
}
.style2 {
	font-family: "Courier New", Courier, monospace;
	font-size: x-small;
}
.style3 {
	font-size: x-small;
}
.style5 {
	font-size: x-small;
}
.style6 {
	text-align: center;
}
&lt;/STYLE&gt;

&lt;P&gt;In &lt;A href="http://blogs.msdn.com/skaufman/archive/2009/05/29/exposing-custom-wcf-headers-through-wcf-behaviors.aspx" mce_href="http://blogs.msdn.com/skaufman/archive/2009/05/29/exposing-custom-wcf-headers-through-wcf-behaviors.aspx"&gt;part 1&lt;/A&gt;, I covered how to create a custom behavior to inject headers into the dynamically created WSDL.&amp;nbsp; In &lt;A href="http://blogs.msdn.com/skaufman/archive/2009/06/10/exposing-custom-wcf-headers-through-wcf-behaviors-part-2.aspx" mce_href="http://blogs.msdn.com/skaufman/archive/2009/06/10/exposing-custom-wcf-headers-through-wcf-behaviors-part-2.aspx"&gt;part 2&lt;/A&gt;, I showed how to either promote or write the header data to the BizTalk context.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;What happens if I want different headers for different end points?&amp;nbsp; What if I don't want to create a custom header component for each end point?&amp;nbsp; What if I want to set, through configuration, weather I want to promote or write to the context?&amp;nbsp; What if I want to add a new header item without the need to recompile?&lt;/P&gt;
&lt;P&gt;In this part of the series we will look at the ability to create a behavior that exposes the properties through configuration to let you dynamically, per end point, set the header items.&amp;nbsp; The configuration is not through a configuration file but instead will hook into the end point behavior dialog box that appears in the adapter configuration in BizTalk.&lt;/P&gt;
&lt;P&gt;The finished configuration will look like this:&lt;/P&gt;
&lt;P class=style6&gt;&lt;IMG alt="" src="http://blogs.msdn.com/photos/skaufman/images/9802639/original.aspx" width=942 height=789 mce_src="http://blogs.msdn.com/photos/skaufman/images/9802639/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Let's start looking at code.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;First we are going to look at a new class file that will represent the data that we need to set in the configuration section of the dialog box.&amp;nbsp; The CustomHeader class is where much of the configuration dialog magic happens.&amp;nbsp; The way you define the properties will define the way they appear in the configuration dialog box.&amp;nbsp; If you define your property as a boolean or an enum then it will display as a drop down list box.&amp;nbsp; If you define it as a class then you will get the ellipses.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Linq;&lt;BR&gt;using System.Text;&lt;BR&gt;&lt;BR&gt;namespace &lt;/SPAN&gt;&lt;SPAN class=style5&gt;Services.WCF.Behavior&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class CustomHeader&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Name { get; set; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Namespace { get; set; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool Required { get; set; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ContextAction Action { get; set; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;/P&gt;
&lt;P&gt;Where the ContextAction type is the enum listed below:&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Linq;&lt;BR&gt;using System.Text;&lt;BR&gt;&lt;BR&gt;namespace &lt;/SPAN&gt;&lt;SPAN class=style5&gt;Services.WCF.Behavior&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public enum ContextAction&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None = 0,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write = 1,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Promote = 2&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;/P&gt;
&lt;P&gt;The CustomHeader class is accessed and 'bound' to the dialog box through the CustomHeaderEndpointBehavior class.&amp;nbsp; This class is just a renamed and modified version of the SoapHeaderEndpointBehavior class we saw in the previous two articles.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Text;&lt;BR&gt;using System.ServiceModel.Description;&lt;BR&gt;using System.ServiceModel.Configuration;&lt;BR&gt;using System.Configuration;&lt;BR&gt;using System.ServiceModel;&lt;BR&gt;&lt;BR&gt;namespace &lt;/SPAN&gt;&lt;SPAN class=style5&gt;Services.WCF.Behavior&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class CustomHeaderEndpointBehavior : BehaviorExtensionElement, IEndpointBehavior&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region BehaviorExtensionElement Methods&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override Type BehaviorType&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return typeof(CustomHeaderEndpointBehavior); }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override object CreateBehavior()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new CustomHeaderEndpointBehavior(this.Headers);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Copies the content of the specified configuration element to this configuration element&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void CopyFrom(ServiceModelExtensionElement extFrom)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base.CopyFrom(extFrom);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CustomHeaderEndpointBehavior element = extFrom as CustomHeaderEndpointBehavior;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (element != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Headers = element.Headers;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Both properties are returned as a collection.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override ConfigurationPropertyCollection Properties&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_properties == null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _properties = new ConfigurationPropertyCollection();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;_&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;properties.Add(new ConfigurationProperty("Headers", typeof(List&amp;lt;CustomHeader&amp;gt;), null,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new SerializationConverter(typeof(List&amp;lt;CustomHeader&amp;gt;)), null, ConfigurationPropertyOptions.None));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base["Headers"] = new List&amp;lt;CustomHeader&amp;gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _properties;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;endregion&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region IEndpointBehavior Members&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingParameters.Add(this);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //throw new NotImplementedException();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new CustomHeaderMessageInspector());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Validate(ServiceEndpoint endpoint)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //throw new NotImplementedException();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;endregion&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region Class properties&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;[&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;ConfigurationProperty("Headers")]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public List&amp;lt;CustomHeader&amp;gt; Headers&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (List&amp;lt;CustomHeader&amp;gt;)base["Headers"];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base["Headers"] = value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;endregion&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region Class Fields&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private ConfigurationPropertyCollection _properties;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;endregion&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region Constructors&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public CustomHeaderEndpointBehavior(List&amp;lt;CustomHeader&amp;gt; headers)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Headers = headers;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public CustomHeaderEndpointBehavior() : base()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;endregion&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;/P&gt;
&lt;P&gt;First you will notice that there is a number of new methods.&amp;nbsp; The first is the CopyFrom method.&amp;nbsp; This method is needed to copy the contents of the configuration data entered in the dialog box so that we can gain access to it within our class.&amp;nbsp; We then override ConfigurationPropertyCollection since the header properties are returned as a collection.&amp;nbsp; We will add the properties to our internal collection based on the List&amp;lt;CustomHeader&amp;gt; object.&amp;nbsp; We also add the class to the AddBindingParamters method.&lt;/P&gt;
&lt;P&gt;One thing to note when creating the configuration class (in our case the CustomHeader class) is that the default behavior of the Transport Properties dialog box and underlying code expects that all configuration information will be of type string.&amp;nbsp; If you are using other types then you need to create your own type converter to convert to a string representation and back.&amp;nbsp; I have the code for the type converter at the bottom of this post called SerializationConverter.&lt;/P&gt;
&lt;P&gt;In the code above, in the CustomHeaderEndpointBehavior class, there were a couple of custom objects.&amp;nbsp; The first one we will dig into is in the ApplyDispatchBehavior where we add a new CustomHeaderMessageInspector.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The class implementation for the CustomHeaderMessageInspector looks like:&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Linq;&lt;BR&gt;using System.Text;&lt;BR&gt;using System.ServiceModel.Dispatcher;&lt;BR&gt;using System.Diagnostics;&lt;BR&gt;using System.ServiceModel;&lt;BR&gt;using System.ServiceModel.Channels;&lt;BR&gt;using System.Xml;&lt;BR&gt;&lt;BR&gt;namespace &lt;/SPAN&gt;&lt;SPAN class=style5&gt;Services.WCF.Behavior&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class CustomHeaderMessageInspector : IDispatchMessageInspector&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region IDispatchMessageInspector Members&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;&amp;gt; writeProps = new List&amp;lt;KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;&amp;gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;&amp;gt; promoteProps = new List&amp;lt;KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;&amp;gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string writeKey = "&lt;A href="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext" mce_href="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext"&gt;http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext&lt;/A&gt;";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string promoteKey = "&lt;A href="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promote" mce_href="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promote"&gt;http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promote&lt;/A&gt;";&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CustomHeaderEndpointBehavior bhv = null;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (instanceContext.Host.Description.Endpoints.Find(channel.LocalAddress.Uri) != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style3&gt;bhv = instanceContext.Host.Description.Endpoints.Find(channel.LocalAddress.Uri).Behaviors.Find&amp;lt;CustomHeaderEndpointBehavior&amp;gt;();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bhv != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style3&gt;foreach (CustomHeader hdr in bhv.Headers)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int headerPos = OperationContext.Current.IncomingMessageHeaders.FindHeader(hdr.Name, hdr.Namespace);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (headerPos &amp;lt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (hdr.Required)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Fault Condition&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ArgumentNullException(hdr.Name, "Required soap header not found.");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (hdr.Action != ContextAction.None)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get an XmlDictionaryReader to read the header content&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style3&gt;XmlDictionaryReader reader = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(headerPos);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style3&gt;XmlDocument d = new XmlDocument();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style3&gt;d.LoadXml(reader.ReadOuterXml());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style3&gt;XmlQualifiedName PropName1 = new XmlQualifiedName(hdr.Name, hdr.Namespace);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (hdr.Action == ContextAction.Write)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style3&gt;writeProps.Add(new KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;(PropName1, d.DocumentElement.InnerText));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (hdr.Action == ContextAction.Promote)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style3&gt;promoteProps.Add(new KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;(PropName1, d.DocumentElement.InnerText));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Debug.WriteLine("*****AfterReceiveRequest: No Behavior found of type CustomHeaderEndpointBehavior.*****");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (writeProps.Count &amp;gt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style3&gt;request.Properties[writeKey] = writeProps;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (promoteProps.Count &amp;gt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style3&gt;request.Properties[promoteKey] = promoteProps;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;endregion&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;/P&gt;
&lt;P&gt;As we look at this code, in the AfterReceiveRequest method we have included both the writeProps and the promoteProps variables as well as both namespaces.&amp;nbsp; We then look in the &lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;instanceContext.Host.Description.Endpoints &lt;/SPAN&gt;&lt;/SPAN&gt;collection to find, within the behaviors collection, our CustomerHeaderEndPointBehavior object.&amp;nbsp; Then we loop through each of the headers that was setup through configuration and look for them in the message headers collection.&amp;nbsp; Finally, check if the header was required and if we need to write or promote the values.&lt;/P&gt;
&lt;P&gt;Lastly, here is the code that does our type conversion from the CustomHeader class to a string representation (in our case this will be XML). &lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Linq;&lt;BR&gt;using System.Text;&lt;BR&gt;using System.ComponentModel;&lt;BR&gt;using System.Xml.Serialization;&lt;BR&gt;using System.IO;&lt;BR&gt;using System.Xml;&lt;BR&gt;using System.Globalization;&lt;BR&gt;&lt;BR&gt;namespace &lt;/SPAN&gt;&lt;SPAN class=style5&gt;Services.WCF.Behavior&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class SerializationConverter : TypeConverter&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private Type _type;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public SerializationConverter(Type type)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _type = type;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region Helper Utilities&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private object Deserialize(object value)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_type == null) throw new ArgumentNullException("", "Serialization type was not set. Use the SerializationConvertor(Type) constructor.");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Deserialize(value, _type);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private object Deserialize(object value, Type destinationType)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringReader strRdr = null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlReader xmlRdr = null;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!(value is string))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ApplicationException("Expecting parameter 'value' to be of type string. 'Value' is of type " + value.GetType().ToString());&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlSerializer serializer = new XmlSerializer(destinationType);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strRdr = new StringReader(value.ToString());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlRdr = XmlReader.Create(strRdr);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return serializer.Deserialize(xmlRdr);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; finally&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strRdr.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlRdr.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private object Serialize(object value)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringWriter wtr = null;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (value == null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ArgumentNullException("value");&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder sb = new StringBuilder();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlSerializer serializer = new XmlSerializer(value.GetType());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wtr = new StringWriter(sb);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serializer.Serialize(wtr, value);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sb.ToString();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; finally&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wtr.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;endregion&lt;/SPAN&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region Collection code.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Class to string&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (value is string)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Deserialize(value);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (value.GetType() == _type)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Serialize(value);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string msg = (_type == null ? "Value is not of type System.string and no type was specified at construction." : "Value is not of type System.string or " + _type.ToString() + ".");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ApplicationException(msg);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //String to class&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (value is string)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Deserialize(value, destinationType);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (value.GetType() == _type)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Serialize(value);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string msg = (_type == null ? "Value is not of type System.string and no type was specified at construction." : "Value is not of type System.string or " + _type.ToString() + ".");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ApplicationException(msg);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style3&gt;endregion&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;/P&gt;
&lt;P&gt;At this point we have all the code that is part of our project.&amp;nbsp; Once this is compiled, we need to add the assembly to the machine config and add it to the BizTalk WCF endpoint.&amp;nbsp; The process to implement this remains the same as that described at the bottom of part 1 of this series.&lt;/P&gt;
&lt;P&gt;As always, the code in this post and this series are for reference only and are provided as is.&amp;nbsp; Now that we have that out of the way, I hope that these posts have been helpful and have shown how to deal with header values in the WCF stack and&amp;nbsp; shown the ability to create a behavior that exposes the properties through configuration to let you dynamically, per end point, set the header items.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9802671" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Exposing Custom WCF Headers through WCF Behaviors - Part 2</title><link>http://blogs.msdn.com/skaufman/archive/2009/06/10/exposing-custom-wcf-headers-through-wcf-behaviors-part-2.aspx</link><pubDate>Thu, 11 Jun 2009 07:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9725758</guid><dc:creator>skaufman</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9725758.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9725758</wfw:commentRss><description>&lt;P mce_keep="true"&gt;In &lt;A href="http://blogs.msdn.com/skaufman/archive/2009/05/29/exposing-custom-wcf-headers-through-wcf-behaviors.aspx" mce_href="http://blogs.msdn.com/skaufman/archive/2009/05/29/exposing-custom-wcf-headers-through-wcf-behaviors.aspx"&gt;part 1&lt;/A&gt; we covered how to create a custom behavior to inject header data into the dynamically created WSDL.&lt;/P&gt;
&lt;P&gt;In this part we will look at consuming the header data passed in.&lt;/P&gt;
&lt;P&gt;By default BizTalk will take any custom header it finds in the incoming WCF message and automatically map them to the Message Context.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;If it were really this simple we wouldn't need this posting.&lt;/P&gt;
&lt;P&gt;So, what is the issue.&amp;nbsp; The issue is that when BizTalk maps the header to the context it posts an xml fragment.&amp;nbsp; This fragment could certainly be used as is and parsed each time you need to use it but that gets tedious quickly and certainly doesn't do good things to the performance of your solution.&lt;/P&gt;
&lt;P&gt;What we need is to be able to parse the key and value of the header data when the message is submitted to BizTalk so that it looks like all of the other context entries (a key and a value pair).&lt;/P&gt;
&lt;P&gt;There are a number of options to enable you to do this including creating a pipeline component.&amp;nbsp; We are not going to go that route.&amp;nbsp; Instead, we are going to add code directly to our behavior.&amp;nbsp; I want everything to be encapsulated inside the behavior so that if developers decide to use the behavior they don't have to also remember to place a pipeline in the mix.&amp;nbsp; By having a separate pipeline component we are creating an error prone system that won't be caught until after deployment has occurred.&lt;/P&gt;
&lt;P&gt;To promote or write to the context when the message arrives we will modify the AfterReceiveRequest method on the SoapHeaderMessageInspector class.&amp;nbsp; This class was created in Part 1 of this series.&amp;nbsp; If you go back and look at that method you will see that we originally implemented it by returning null.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;First lets look at what is required to write or promote to the Message Context in code.&amp;nbsp; &lt;A href="http://msdn.microsoft.com/en-us/library/bb246105.aspx" mce_href="http://msdn.microsoft.com/en-us/library/bb246105.aspx"&gt;MSDN&lt;/A&gt; has a sample of how this can be done which I put below.&lt;/P&gt;&lt;PRE style="WORD-WRAP: break-word; WORD-BREAK: break-all" id=ctl00_mainContentContainer_ctl04other class=libCScode space="preserve"&gt;const string PropertiesToPromoteKey="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promote";
const string PropertiesToWriteKey="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext";

XmlQualifiedName PropName1=new XmlQualifiedName("Destination", "http://tempuri.org/2007/sample-properties");
XmlQualifiedName PropName2=new XmlQualifiedName("Source", "http://tempuri.org/2007/sample-properties");

//Create a List of KeyValuePairs that indicate properties to be promoted to BizTalk message context. 
//A Property Schema must be deployed and string values have a limit of 256 characters
List&amp;lt;KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;&amp;gt; promoteProps=new List&amp;lt;KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;&amp;gt;();
promoteProps.Add(new KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;(PropName1, "Property value"));
wcfMessage.Properties[PropertiesToPromoteKey]=promoteProps;

//Create a List of KeyValuePairs that indicate properties to be written to BizTalk message context
List&amp;lt;KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;&amp;gt; writeProps=new List&amp;lt;KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;&amp;gt;();
writeProps.Add(new KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;(PropName2, "Property value"));
wcfMessage.Properties[PropertiesToWriteKey]=writeProps;&lt;/PRE&gt;
&lt;P&gt;We are going to use this code but will format it a bit differently.&amp;nbsp; As I said earlier we need to modify the AfterReceiveRequest method to incorporate this code.&lt;/P&gt;
&lt;P&gt;Our method implementation will look like:&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style2&gt;public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;&amp;gt; writeProps = new List&amp;lt;KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;&amp;gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const string PropertiesToWriteKey = "http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext";&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Int32 headerPosition = OperationContext.Current.IncomingMessageHeaders.FindHeader(SoapHeaderNames.SoapHeaderName, SoapHeaderNames.SoapHeaderNamespace);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (headerPosition &amp;lt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Fault Condition&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ArgumentNullException(SoapHeaderNames.SoapHeaderNamespace + "#" + SoapHeaderNames.SoapHeaderName, "SoapHeader not found.");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get an XmlDictionaryReader to read the header content&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlDictionaryReader reader = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(headerPosition);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlDocument d = new XmlDocument();&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.LoadXml(reader.ReadOuterXml());&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (XmlNode node in d.DocumentElement.ChildNodes)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((node.Name.ToLower().Equals(SoapHeaderNames.AppName.ToLower()) ||&lt;/SPAN&gt;&lt;SPAN class=style2&gt; node.Name.ToLower().Equals(SoapHeaderNames.UserName.ToLower())) &amp;amp;&amp;amp; &lt;/SPAN&gt;&lt;SPAN class=style2&gt;String.IsNullOrEmpty(node.InnerText))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ArgumentNullException(node.Name, "Header value cannot be null.");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlQualifiedName PropName1 = new XmlQualifiedName(node.Name, SoapHeaderNames.SoapHeaderNamespace);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeProps.Add(new KeyValuePair&amp;lt;XmlQualifiedName, object&amp;gt;(PropName1, node.InnerText));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (writeProps.Count &amp;gt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.Properties[PropertiesToWriteKey] = writeProps;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;/P&gt;
&lt;P&gt;This code shows how we can select and read the header, and then loop through each element in the header and promote it.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In order to promote properties into the context you need to have a property schema.&amp;nbsp; We took the SoapHeader.xsd that we created in Part 1 of this post and used that for our property schema.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;When we take a look at the content of the incoming message after compiling and deploying our changes we can now see that our key name appears under the Name column and our value appears under the Value column of the Context dialog box.&amp;nbsp; We no longer have an xml fragment and no longer have to deal with the need to parse the fragment each time we want to use it.&amp;nbsp; Now that we have this data in the context we can utilize it in the same we would with any other data that appears in the context.&amp;nbsp; The best part is that it was all done in one location, through one artifact, and won't require the developer to remember to utilize another artifact to make the solution work.&lt;/P&gt;
&lt;P&gt;In the next post, we will cover the ability to create a behavior that exposes the properties through configuration to let you dynamically, per end point, set the header items as well as determine whether you want the values written or promoted dynamically as well.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9725758" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Exposing Custom WCF Headers through WCF Behaviors</title><link>http://blogs.msdn.com/skaufman/archive/2009/05/29/exposing-custom-wcf-headers-through-wcf-behaviors.aspx</link><pubDate>Sat, 30 May 2009 00:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9658649</guid><dc:creator>skaufman</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9658649.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9658649</wfw:commentRss><description>&lt;P&gt;Since the WCF Publishing Wizard in BizTalk does&amp;nbsp;not support adding custom headers defined at the server, we need to programmatically modify what gets created by the wizard to add custom headers.&amp;nbsp; However, from the client you have the option to pass in header values at will.&amp;nbsp; If you are passing in headers generated at the client BizTalk will take them and map them to the context.&amp;nbsp; However, they show up as an XML fragment and not as individual data items.&amp;nbsp; It becomes annoying to constantly parse the fragment each and every time you want to get to the data.&lt;/P&gt;
&lt;P&gt;What we are really interested in is the ability to expose the end point with the header values already defined, accept the header values from the client and either promote or write the values to the context and lastly, be able to create a behavior that you can attach to your WCF endpoint that exposes the properties through configuration to let you dynamically, per end point, set the header items and what you want to do with them as they are submitted.&amp;nbsp; This will be a three part posting with a post covering each of these features.&lt;/P&gt;
&lt;P&gt;For this first post, we will focus on the ability to expose the end point with the header values already defined.&amp;nbsp; What makes this even more interesting is that there is no WSDL file as this gets generated dynamically when you access the SVC file.&amp;nbsp; If you wish you can create a static WSDL file and then use the externalMetadataLocation attribute of the &lt;A href="http://go.microsoft.com/fwlink/?LinkId=89121" mce_href="http://go.microsoft.com/fwlink/?LinkId=89121"&gt;&lt;SERVICEMETADATA&gt;&lt;/A&gt;element in the Web.config file that the wizard generates to specify the location of the WSDL file.&amp;nbsp; Then the static WSDL file will be sent to the user in response to WSDL and metadata exchange (MEX) requests instead of the auto-generated WSDL.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In our solution, we did not want to have to create WSDL files for each of our endpoints, nor did we want to maintain them.&amp;nbsp; We needed a way to hook in to the dynamic WSDL creation process.&lt;/P&gt;
&lt;P&gt;There are a number of posts out there that talk about this but after reviewing them I found that none of them gave the whole picture.&amp;nbsp; They were all very good and they provided enough information to fill in many missing pieces but there was enough missing that I though it warranted looking at the whole picture.&lt;/P&gt;
&lt;P&gt;We are going to start by creating our own EndPointBehavior.&amp;nbsp; The EndPointBehavior allows us to inject custom functionality in the WCF execution pipeline.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;To create the EndPointBehavior we need to create a solution that references System.ServiceModel.dll and includes a class that derives from BehaviorExtensionElement, IWsdlExportExtension and IEndpointBehavior.&amp;nbsp; We need the functionality of the BehaviorExtensionElement to implement the configuration of the behavior, the functionality of the IWsdlExportExtension to change the generated WSDL and the functionality of the IEndPointBehavior to define the endpoint and its behavior.&lt;/P&gt;
&lt;P&gt;Lets add a class file to our solution called SoapHeaderEndpointBehavior.&amp;nbsp; After we create the class and inherit from our objects we need to add the following line of code to the ExportEndPoint method&lt;/P&gt;
&lt;P class=style6&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;SoapHeaderWsdlExport.ExportEndpoint(exporter,context);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;and we need to add the following two lines of code to the ApplyDispatchBehavior method. &lt;/P&gt;
&lt;P class=style6&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;SoapHeaderMessageInspector headerInspector = new SoapHeaderMessageInspector();&lt;BR&gt;endpointDispatcher.DispatchRuntime.MessageInspectors.Add(headerInspector);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Our code should look like this:&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Collections;&lt;BR&gt;using System.Configuration;&lt;BR&gt;using System.Runtime.Serialization;&lt;BR&gt;using System.ServiceModel;&lt;BR&gt;using System.ServiceModel.Channels;&lt;BR&gt;using System.ServiceModel.Configuration;&lt;BR&gt;using System.ServiceModel.Description;&lt;BR&gt;using System.ServiceModel.Dispatcher;&lt;BR&gt;using System.Text;&lt;BR&gt;using System.Xml;&lt;BR&gt;using System.Xml.Schema;&lt;BR&gt;using System.Web.Services;&lt;BR&gt;using System.Web.Services.Description;&lt;BR&gt;using WsdlDescription = System.Web.Services.Description.ServiceDescription;&lt;BR&gt;&lt;BR&gt;namespace Services.WCF.ServiceBehavior&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class SoapHeaderEndpointBehavior : BehaviorExtensionElement, IWsdlExportExtension, IEndpointBehavior&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region BehaviorExtensionElement Members&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override Type BehaviorType&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return typeof(SoapHeaderEndpointBehavior);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override object CreateBehavior()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new SoapHeaderEndpointBehavior();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;endregion&lt;/SPAN&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region IWsdlExportExtension Members&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void ExportContract(WsdlExporter exporter, WsdlContractConversionContext context)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //throw new NotImplementedException();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style5&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SoapHeaderWsdlExport.ExportEndpoint(exporter,context);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;endregion&lt;/SPAN&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region IEndpointBehavior Members&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //throw new NotImplementedException();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //throw new NotImplementedException();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SoapHeaderMessageInspector headerInspector = new SoapHeaderMessageInspector();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endpointDispatcher.DispatchRuntime.MessageInspectors.Add(headerInspector);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Validate(ServiceEndpoint endpoint)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //throw new NotImplementedException();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;endregion&lt;/SPAN&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;When we added code to the ExportEndpoint method, we utilized a custom object.&amp;nbsp; Let's add another class to our solution to implement the SoapHeaderWsdlExport.&amp;nbsp; This class will add a header schema and its namespace, create and add a header message description and finally add the header to the operation.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Linq;&lt;BR&gt;using System.Text;&lt;BR&gt;using System.Xml.Schema;&lt;BR&gt;using System.Reflection;&lt;BR&gt;using System.Web.Services.Description;&lt;BR&gt;using System.Xml;&lt;BR&gt;using System.ServiceModel.Description;&lt;BR&gt;using WsdlDescription = System.Web.Services.Description.ServiceDescription;&lt;BR&gt;&lt;BR&gt;namespace Services.WCF.ServiceBehavior&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class SoapHeaderWsdlExport&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read the schema of the custom header message&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;XmlSchema customSoapHeaderSchema = XmlSchema.Read(Assembly.GetExecutingAssembly().GetManifestResourceStream("Services.WCF.ServiceBehavior.SoapHeader.xsd"), &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new ValidationEventHandler (SoapHeaderWsdlExport.ValidationCallBack));&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create the HeaderMessage to add to wsdl:message AND to refer to from wsdl:operation&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;System.Web.Services.Description.Message headerMessage = CreateHeaderMessage();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;foreach (WsdlDescription wsdl in exporter.GeneratedWsdlDocuments)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add the schema of the CustomSoapHeader to the types AND add the namespace to the list of namespaces&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;wsdl.Types.Schemas.Add(customSoapHeaderSchema);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;wsdl.Namespaces.Add("sh", SoapHeaderNames.SoapHeaderNamespace);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The actual adding of the message to the list of messages&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;wsdl.Messages.Add(headerMessage);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;addHeaderToOperations(headerMessage, context);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static System.Web.Services.Description.Message CreateHeaderMessage()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create Message&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;System.Web.Services.Description.Message headerMessage = new System.Web.Services.Description.Message();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the name of the header message&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;headerMessage.Name = SoapHeaderNames.SoapHeaderName;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create the messagepart and add to the header message&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;MessagePart part = new MessagePart();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;part.Name = "Header";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;part.Element = new XmlQualifiedName(SoapHeaderNames.SoapHeaderName, SoapHeaderNames.SoapHeaderNamespace);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;headerMessage.Parts.Add(part);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return headerMessage;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static void addHeaderToOperations(System.Web.Services.Description.Message headerMessage, WsdlEndpointConversionContext context)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create a XmlQualifiedName based on the header message, this will be used for binding the header message and the SoapHeaderBinding&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;XmlQualifiedName header = new XmlQualifiedName(headerMessage.Name, headerMessage.ServiceDescription.TargetNamespace);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;foreach (OperationBinding operation in context.WsdlBinding.Operations)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add the SoapHeaderBinding to the MessageBinding&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;ExportMessageHeaderBinding(operation.Input, context, header, false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;ExportMessageHeaderBinding(operation.Output, context, header, false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static void ExportMessageHeaderBinding(MessageBinding messageBinding, WsdlEndpointConversionContext context, XmlQualifiedName header, bool isEncoded)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // For brevity, assume Soap12HeaderBinding for Soap 1.2&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;SoapHeaderBinding binding = new Soap12HeaderBinding();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;binding.Part = "Header";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;binding.Message = header;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;binding.Use = isEncoded ? SoapBindingUse.Encoded : SoapBindingUse.Literal;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;messageBinding.Extensions.Add(binding);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static void ValidationCallBack(object sender, ValidationEventArgs args)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (args.Severity == XmlSeverityType.Warning)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("\tWarning: Matching schema not found. No validation occurred." + args.Message);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;Console.WriteLine("\tValidation error: " + args.Message);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;/P&gt;
&lt;P&gt;In the addHeaderToOperations method there are two calls to the ExportMessageHeaderBinding method.&amp;nbsp; The second call passes the operation.Output parameter which will pass the header back to the calling application with the response message.&amp;nbsp; This also also means that the method signature at the client will be to pass in the header object by Ref.&amp;nbsp; Since we needed the client to pass the header data into BizTalk we didn't need to echo the header back to the client so we deleted this line.&amp;nbsp; If you want to echo it back then keep this line (as shown in the code above).&lt;/P&gt;
&lt;P&gt;Also, in the code above, in the ExportEndpoint and CreateHeaderMessage methods there was another custom class called SoapHeaderNames.&amp;nbsp; This class contained the values that we wanted to place in the custom header.&amp;nbsp; By creating a class for this data we could limit the location of this information to one location.&amp;nbsp; The code for the SoapHeaderNames class looks like this:&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Linq;&lt;BR&gt;using System.Text;&lt;BR&gt;&lt;BR&gt;namespace Services.WCF.ServiceBehavior&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static class SoapHeaderNames&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public const String SoapHeaderName = "SoapHeader";&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public const String AppName = "App";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public const String UserName = "User";&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public const String SoapHeaderNamespace = &lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;A href="http://demo.wellmark.com/"&gt;&lt;FONT face="Courier New"&gt;http://servicebehavior.mycompany.com&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;/P&gt;
&lt;P&gt;Way back at the top, in the ApplyDispatchBehavior method of the SoapHeaderEndpointBehavior class we have a custom object called SoapHeaderMessageInspector.&amp;nbsp; Therefore, let's add another class for the SoapHeaderMessageInspector.&amp;nbsp; There are two methods that we must implement on the IDispatchMessageInspector and they are the AfterReceiveRequest and the BeforeReceiveRequest.&amp;nbsp; Since we are interested in applying the headers in the dynamic WSDL we will only need code in the BeforeReceiveRequest.&amp;nbsp; The code will look like this:&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Linq;&lt;BR&gt;using System.Text;&lt;BR&gt;using System.ServiceModel.Dispatcher;&lt;BR&gt;using System.ServiceModel;&lt;BR&gt;using System.Xml;&lt;BR&gt;&lt;BR&gt;namespace Services.WCF.ServiceBehavior&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class SoapHeaderMessageInspector: IDispatchMessageInspector&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region IDispatchMessageInspector Members&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Look for my custom header in the request&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Int32 headerPosition = OperationContext.Current.IncomingMessageHeaders.FindHeader(SoapHeaderNames.SoapHeaderName, SoapHeaderNames.SoapHeaderNamespace);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get an XmlDictionaryReader to read the header content&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;XmlDictionaryReader reader = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(headerPosition);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read through its static method ReadHeader&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;SoapHeader header = SoapHeader.ReadHeader(reader);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (header != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add the header from the request&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;reply.Headers.Add(header);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;#&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;endregion&lt;/SPAN&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;/P&gt;
&lt;P&gt;This code grabs the header section and will inject the header elements.&amp;nbsp; In the BeforeSendReply method you will see we are using a SoapHeader object.&amp;nbsp; This object contains the properties and methods to deal with the elements that we will be reading and writing to the header.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Linq;&lt;BR&gt;using System.Text;&lt;BR&gt;using System.Xml;&lt;BR&gt;using System.ServiceModel.Channels;&lt;BR&gt;&lt;BR&gt;namespace Services.WCF.ServiceBehavior&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;Serializable]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class SoapHeader: MessageHeader&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string _app;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string _user;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string App&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (this._app);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;this._app = value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string User &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (this._user);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style5&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._user = value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public SoapHeader()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public SoapHeader(string app, string user)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style5&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._app = app;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style5&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._user = user;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override string Name&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return (SoapHeaderNames.SoapHeaderName); }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override string Namespace&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return (SoapHeaderNames.SoapHeaderNamespace); }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override void OnWriteHeaderContents(System.Xml.XmlDictionaryWriter writer, MessageVersion messageVersion)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write the content of the header directly using the XmlDictionaryWriter&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;writer.WriteElementString(SoapHeaderNames.AppName, this.App);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=style5&gt;writer.WriteElementString(SoapHeaderNames.UserName, this.User);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static SoapHeader ReadHeader(XmlDictionaryReader reader)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String app = null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String user = null;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read the header content (key) using the XmlDictionaryReader&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (reader.ReadToDescendant(SoapHeaderNames.AppName, SoapHeaderNames.SoapHeaderNamespace))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; app = reader.ReadElementString();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (reader.ReadToDescendant(SoapHeaderNames.UserName, SoapHeaderNames.SoapHeaderNamespace))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user = reader.ReadElementString();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!String.IsNullOrEmpty(app) &amp;amp;&amp;amp; !String.IsNullOrEmpty(user))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new SoapHeader(app, user);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style2&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;/P&gt;
&lt;P&gt;There is also a schema, called SoapHeader.xsd, that needs to be added to the project as well.&amp;nbsp; This schema defines the message contract for the header and is referenced and used in the ExportEndpoint method of the SoapHeaderWsdlExport class and looks like this:&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;&amp;lt;?xml version="1.0" encoding="utf-16"?&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://servicebehavior.mycompany.com" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://servicebehavior.mycompany.com" xmlns:xs="http://www.w3.org/2001/XMLSchema"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;xs:element name="SoapHeader"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;xs:complexType&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;xs:sequence&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;xs:element name="App" type="xs:string" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style5&gt;xs:element name="User" type="xs:string" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xs:sequence&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xs:complexType&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xs:element&amp;gt;&lt;BR&gt;&amp;lt;/xs:schema&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;At this point we have all the code that is part of our project.&amp;nbsp; Once this is compiled, we need to add the assembly to the machine config.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;There is an easy way to add entries by using the SvcConfigEditor.exe tool.&amp;nbsp; This tool is part of the Windows SDK and, if installed, can be found in the \Program Files\Microsoft SDKs\Windows\v6.0A\Bin directory.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Once this utility is open you can click on the File -&amp;gt;Open-&amp;gt;Config File menu item.&amp;nbsp; Open the machine.config file.&amp;nbsp; At the bottom of the tree view on the left side you will see an Advanced folder.&amp;nbsp; Expand that node and expand the the Extensions folder.&amp;nbsp; Click on the the 'behavior element extensions' node.&amp;nbsp; At the bottom right, click on the new button.&amp;nbsp; This will bring up the Extension Configuration Element Editor dialog box.&amp;nbsp; Enter the name you wish to give to your extension and then click on the ellipses next to type.&amp;nbsp; This will bring up the Type Browser dialog box.&amp;nbsp; Browse to your component (also note that you can select assemblies already placed in the GAC).&amp;nbsp; Once selected, your fully qualified assembly name will be entered.&amp;nbsp; Select Save under the File menu.&amp;nbsp; You are now ready to start using the new behavior.&lt;/P&gt;
&lt;P&gt;Up to this point everything we have done has been specifically WCF functionality.&amp;nbsp; The next paragraph will outline how we can utilized this behavior in a BizTalk WCF endpoint.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Create a WCF endpoint in BizTalk (if you need more information on creating a WCF endpoint check out the docs on MSDN (Insert Link)).&amp;nbsp; One thing to keep in mind is that when you create a WCF end point in BizTalk using one of the standard bindings you will not have the option to specify a behavior.&amp;nbsp; In order to specify a behavior you need to specify either the WCF-Custom or WCF-CustomIsolated binding.&amp;nbsp; Once you select the binding type, click on the Configure button and the Transport Properties dialog will appear.&amp;nbsp; Select the Behavior tab and then right click on the the Endpoint Behavior node.&amp;nbsp; Once the popup menu appears, select Add extension.&amp;nbsp; Select your behavior from the Select Behavior Extensions dialog box and click OK.&amp;nbsp; Enter the rest of the specific information you need for the end point and click OK to save your endpoint.&lt;/P&gt;
&lt;P&gt;We have now done everything that is needed to create a custom behavior including the ability to link into the dynamic WSDL creation process at run time, register the behavior and finally to use the behavior. &lt;/P&gt;
&lt;P&gt;Now, when you create a client against the end point you will see that there will be two parameters for the web method call.&amp;nbsp; The first will be the custom header and the second will be the message body.&amp;nbsp; When we look in the object browser for the header object we will see that the two items appear that we defined in our behavior.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;As I said at the beginning of this post, this will be a three part series.&amp;nbsp; What we have not covered is the ability to accept these header values from the client and promote or write the values to the context (part 2) and we have not covered the ability to create a behavior that exposes the properties through configuration to let you dynamically, per end point, set the header items (part 3).&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9658649" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Pro BizTalk 2009 Book</title><link>http://blogs.msdn.com/skaufman/archive/2009/05/07/pro-biztalk-2009-book.aspx</link><pubDate>Thu, 07 May 2009 08:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9592914</guid><dc:creator>skaufman</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9592914.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9592914</wfw:commentRss><description>&lt;P&gt;I have just submitted my chapters for the new &lt;A href="http://www.apress.com/book/view/1430219815" mce_href="http://www.apress.com/book/view/1430219815"&gt;Pro BizTalk 2009&lt;/A&gt; book from APress.&amp;nbsp; You can also find information about the book on &lt;A href="http://www.amazon.com/Pro-BizTalk-2009-George-Dunphy/dp/1430219815/ref=sr_1_9?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241624145&amp;amp;sr=8-9" mce_href="http://www.amazon.com/Pro-BizTalk-2009-George-Dunphy/dp/1430219815/ref=sr_1_9?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241624145&amp;amp;sr=8-9"&gt;Amazon&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I am co-authoring along with George Dunphy, Harold Campos, Peter Kelcey, Sergei Moukhnitski and David Peterson.&lt;/P&gt;
&lt;P&gt;&lt;IMG class=style1 height=240 alt="" src="http://blogs.msdn.com/photos/skaufman/images/9592902/original.aspx" width=240 mce_src="http://blogs.msdn.com/photos/skaufman/images/9592902/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;The book will be available this summer.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9592914" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>I will be speaking at TechEd 2009</title><link>http://blogs.msdn.com/skaufman/archive/2009/03/18/i-will-be-speaking-at-teched-2009.aspx</link><pubDate>Thu, 19 Mar 2009 04:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9488685</guid><dc:creator>skaufman</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9488685.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9488685</wfw:commentRss><description>&lt;IMG alt="" src="http://blogs.msdn.com/photos/skaufman/images/9488652/original.aspx" mce_src="http://blogs.msdn.com/photos/skaufman/images/9488652/original.aspx"&gt; 
&lt;P&gt;I will be speaking at TechEd 2009 in Los Angeles.&lt;/P&gt;
&lt;P&gt;I will be presenting two sessions and doing demos at a third.&lt;/P&gt;
&lt;P&gt;My first presentation will be on 'Application Lifecycle Management Experience for BizTalk Server 2009 Developers'.&lt;/P&gt;
&lt;P&gt;My second presentation will&amp;nbsp; be a 'Deep Dive with Microsoft BizTalk Server 2009 Development Platform'.&lt;/P&gt;
&lt;P&gt;The demo will be done with &lt;A class="" href="http://blogs.msdn.com/dannyg/" mce_href="http://blogs.msdn.com/dannyg/"&gt;Danny Garber&lt;/A&gt; and will demo an application featuring the new capabilities of BizTalk Server 2009, Windows Azure Service Platform, the Live Framework, .NET Services, the new ESB Guidance v2.0 and the new Managed Services Engine (MSE) 7.0&lt;/P&gt;
&lt;P&gt;If you are going to be there stop by and say hello.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9488685" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Twin Cities BizTalk User Group Changes</title><link>http://blogs.msdn.com/skaufman/archive/2009/03/10/twin-cities-biztalk-user-group-changes.aspx</link><pubDate>Wed, 11 Mar 2009 01:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9469749</guid><dc:creator>skaufman</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9469749.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9469749</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;The Twin Cities BizTalk User Group is changing to become the &lt;B&gt;Twin Cities Connected Systems User Group&lt;/B&gt;!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;We are changing to encompass a broader set of technologies and ensure that we are keeping up with the current set of technologies and patterns. &lt;BR&gt;&lt;BR&gt;The Twin Cities Connected Systems User Group sets out to build a community of developers and architects interested in Microsoft middle tier technologies to aid in the development of the members and evangelize these technologies within the Twin Cities. &lt;BR&gt;&lt;BR&gt;The middle tier technologies cover products as well as patterns. The partial list of products that fall into our community include BizTalk, Dublin, Oslo, MSE, WCF, WF, MSMQ and Azure. &lt;BR&gt;&lt;BR&gt;The patterns typically cover Business to Business (B2B), Application to Application (A2A), Enterprise Application Integration (EAI), EDI, Business Process Management (BPM), Services Oriented Architecture (SOA) and cloud computing.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9469749" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/BTS+User+Group/default.aspx">BTS User Group</category></item><item><title>BizTalk Hotrod Article Published</title><link>http://blogs.msdn.com/skaufman/archive/2009/02/18/biztalk-hotrod-article-published.aspx</link><pubDate>Thu, 19 Feb 2009 02:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9432783</guid><dc:creator>skaufman</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9432783.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9432783</wfw:commentRss><description>&lt;P&gt;&lt;IMG height=159 alt="" src="http://blogs.msdn.com/photos/skaufman/images/9432765/original.aspx" width=559 mce_src="http://blogs.msdn.com/photos/skaufman/images/9432765/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;The latest edition of the BizTalk Hotrod magazine was just released.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;They are currently going through a membership update and if you did not get an e-mail letting you know the latest version was released then subscribe by sending an e-mail to &lt;A href="mailto:Editor@BizTalkHotrod.com?subject=Subscribe" mce_href="mailto:Editor@BizTalkHotrod.com?subject=Subscribe"&gt;the editor&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;You can download the latest edition at &lt;A href="http://biztalkhotrod.com/Documents/BizTalk%20HotRod%20Magazine%20Q1%202009.pdf" mce_href="http://biztalkhotrod.com/Documents/BizTalk%20HotRod%20Magazine%20Q1%202009.pdf"&gt;http://biztalkhotrod.com/Documents/BizTalk%20HotRod%20Magazine%20Q1%202009.pdf&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Be sure to check out my article titled: Application Servers: BizTalk vs. Dublin&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9432783" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>Mapping a Repeating Source to a Delimited List</title><link>http://blogs.msdn.com/skaufman/archive/2009/02/01/mapping-a-repeating-source-to-a-delimited-list.aspx</link><pubDate>Sun, 01 Feb 2009 21:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9388581</guid><dc:creator>skaufman</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9388581.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9388581</wfw:commentRss><description>&lt;P mce_keep="true"&gt;My last couple of projects have been very interesting, challenging and a lot of fun.&amp;nbsp; My current project is no exception.&amp;nbsp; I have the pleasure of working with a great group of people (I've got to give a shout out to C-Mappity (Casey), v-slice (Dan), Sniff Packy Packet (Rich) and 10 Bit (pronounced 2 bit) (Mike) - you know who you are).&amp;nbsp; Anyways, this a great group and we are working on a fun project to create their services architecture which will be the framework for their ESB.&lt;/P&gt;
&lt;P&gt;During our redesign and re-platform of&amp;nbsp; some of their current services we have come up on some interesting scenarios.&amp;nbsp; One that I think many people may run into is the need to take a source xml document that has a repeating list and map it to a destination that requires that repeating list to be formatted into a single delimited string.&lt;/P&gt;
&lt;P&gt;The picture below shows what the Mapper looks like to get this working along with the structure of the source and destination schemas.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG height=482 alt="" src="http://blogs.msdn.com/photos/skaufman/images/9388574/original.aspx" width=1012 mce_src="http://blogs.msdn.com/photos/skaufman/images/9388574/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;If we take a look at a sample source xml we will get a better understanding of the format of the repeated list.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&amp;lt;SearchByCodeList&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;FirstName&amp;gt;Jim&amp;lt;/FirstName&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;LastName&amp;gt;Anderson&amp;lt;/LastName&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;NetworkCodeList&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;NetworkCode&amp;gt;44&amp;lt;/NetworkCode&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;NetworkCode&amp;gt;64&amp;lt;/NetworkCode&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;NetworkCode&amp;gt;49&amp;lt;/NetworkCode&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/NetworkCodeList&amp;gt;&lt;BR&gt;&amp;lt;/SearchByCodeList&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;and lets take a look at the output before we get into the mapping functionality&lt;/P&gt;
&lt;P class=style5&gt;&amp;lt;ProviderSearchCanonical&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FirstName&amp;gt;Jim&amp;lt;/FirstName&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;LastName&amp;gt;Anderson&amp;lt;/LastName&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;NetworkCodeList&amp;gt;44|64|49&amp;lt;/NetworkCodeList&amp;gt;&lt;BR&gt;&amp;lt;/ProviderSearchCanonical&amp;gt;&lt;/P&gt;
&lt;P&gt;So, how do we do this in the Mapper?&lt;/P&gt;
&lt;P&gt;We need to use the looping functoid and connect it to the NetworkCode node.&amp;nbsp; If our source xml had each NetworkCode node surrounded by opening and closing NetworkCodeList nodes then the looping functoid would need to be connected to the NetworkCodeList node.&lt;/P&gt;
&lt;P&gt;Since we are using the looping functoid we will get an output record for each of the NetworkCode elements.&amp;nbsp; The first output would include the first value, the next loop would include the first value and the delimiter and the second value and so on.&amp;nbsp; This is not what we want.&amp;nbsp; We really want the last iteration of the loop to be output and none of the previous iterations.&amp;nbsp; This is what the script functoid at the bottom of the map does.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The code returns a true when we want the output to be sent to the output message and false all other times.&amp;nbsp; The value of this functoid is sent to the Value Mapping functoid as the first parameter (which is the logical true or false that is required).&amp;nbsp; The code for the script functoid looks like:&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;public bool ShouldThereBeOutput( string inputIgnored, int totalRecords )&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(sbCount.Length == (totalRecords))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The totalRecs parameter is the value from the Record Count functoid (which is used in both Script functoids).&amp;nbsp; The inputIgnored parameter is a little trick.&amp;nbsp; We needed to make sure that the map processed the ShouldThereBeOutput method after the other Script functoid.&amp;nbsp; By drawing a line from the first Script functoid to this one we can ensure that it will be called afterwards.&lt;/P&gt;
&lt;P&gt;Now lets look at the functionality in the first Script functoid.&amp;nbsp; The first thing that is in the code are two StringBuilder objects. They appear above the method declaration which will make them global in scope.&amp;nbsp; &lt;/P&gt;
&lt;P class=style1&gt;&lt;SPAN class=style4&gt;System.Text.StringBuilder NCLState = null;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style4&gt;System.Text.StringBuilder sbCount = new System.Text.StringBuilder();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The first is our state object which will hold the delimited string.&amp;nbsp; The second is sbCount which holds the current iteration through the loop.&amp;nbsp; There is an Iteration functoid but that only keeps track of the iterations on the destination side.&amp;nbsp; We need the iteration that we are on based on the source.&lt;/P&gt;
&lt;P&gt;The code below shows the method in the first Script functoid.&amp;nbsp; The bottom else statement is run for our first time through the loop.&amp;nbsp; It adds the value of the first node and appends a character to sbCount.&amp;nbsp; You can add any single character to sbCount.&amp;nbsp; The length property will tell us which loop we are currently in.&amp;nbsp; The embedded else statement is fired for every subsequent loop iteration and will prepend the delimiter.&amp;nbsp; Finally we check if the length of the sbCount object is equal to the value past in from the &amp;lt;&amp;lt;itermation&amp;gt;&amp;gt; functoid.&amp;nbsp; If it is then we are all done looping and need to return the final delimited string.&amp;nbsp; The code for this method looks like: &lt;/P&gt;
&lt;P&gt;&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;public string DetermineCodeList( string codeList, int totalRecords )&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(NCLState == null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NCLState = new System.Text.StringBuilder();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sbCount.Length &amp;gt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sbCount.Length == totalRecords)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {return NCLState.ToString();}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NCLState.Append("|" + codeList);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sbCount.Append("x");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return NCLState.ToString();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;SPAN class=style1&gt;&lt;SPAN class=style4&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=style4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NCLState.Append(codeList);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sbCount.Append("x");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return NCLState.ToString();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;SPAN class=style5&gt;&lt;BR&gt;&lt;/SPAN&gt;}&lt;/P&gt;
&lt;P&gt;Once the map is executed we will end up with our delimited list.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9388581" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category></item><item><title>Twin Cities BizTalk User Group Meeting - January 15th, 2009 </title><link>http://blogs.msdn.com/skaufman/archive/2009/01/07/twin-cities-biztalk-user-group-meeting-january-15th-2009.aspx</link><pubDate>Thu, 08 Jan 2009 08:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9294316</guid><dc:creator>skaufman</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9294316.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9294316</wfw:commentRss><description>&lt;P&gt;&lt;BR&gt;If you are in Minneapolis on Thursday January 15th please join us for the next Twin Cities BizTalk User Group Meeting. &lt;BR&gt;&lt;BR&gt;The meeting takes place at the Microsoft office in Bloomington from 6:00pm to 7:30pm.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Shawn Doty from RBA Consulting will be delivering a presentation on Exploring BizTalk 2009. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9294316" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/BTS+User+Group/default.aspx">BTS User Group</category></item><item><title>I will be speaking at the Microsoft SOA and BPM Conference</title><link>http://blogs.msdn.com/skaufman/archive/2009/01/07/i-will-be-speaking-at-the-microsoft-soa-and-bpm-conference.aspx</link><pubDate>Thu, 08 Jan 2009 08:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9294200</guid><dc:creator>skaufman</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/skaufman/comments/9294200.aspx</comments><wfw:commentRss>http://blogs.msdn.com/skaufman/commentrss.aspx?PostID=9294200</wfw:commentRss><description>
&lt;STYLE type=text/css&gt;
.style1 {
	border-width: 0px;
}
&lt;/STYLE&gt;
&lt;A href="http://www.microsoft.com/soa/conference/default.aspx" mce_href="http://www.microsoft.com/soa/conference/default.aspx"&gt;&lt;IMG class=style1 src="http://blogs.msdn.com/photos/skaufman/images/9294090/original.aspx" mce_src="http://blogs.msdn.com/photos/skaufman/images/9294090/original.aspx"&gt;&lt;/A&gt;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;I will be speaking at the 2009 Microsoft SOA and BPM Conference in Redmond, WA. &lt;BR&gt;&lt;BR&gt;I have two presentations for this conference.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;For my first presentation, I will be co-presenting on 'Application Lifecycle Management Experience for BizTalk Server 2009 Developers' with Vinay Ahuja and Manoj Agarwal. &lt;BR&gt;&lt;BR&gt;For my second presentation, I will be co-presenting on 'Implementing an Internet Service Bus with Agent Design Patterns on a Windows Azure Services Platform' with Danny Garber. &lt;BR&gt;&lt;BR&gt;If you are going to be there stop by and say hello.&lt;BR&gt;&lt;BR&gt;The following week I will be presenting two topics at our internal conference so it is shaping up to be a very busy new year. &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9294200" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/skaufman/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.msdn.com/skaufman/archive/tags/.NET/default.aspx">.NET</category></item></channel></rss>