<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Zulfiqar's weblog</title>
    <link>http://www.zamd.net/</link>
    <description>WCF/WF/AppFabric &amp; random .Net stuff</description>
    <language>en-us</language>
    <copyright>Zulfiqar Ahmed</copyright>
    <lastBuildDate>Wed, 10 Mar 2010 14:57:28 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>Zulfiqar@zamd.net</managingEditor>
    <webMaster>Zulfiqar@zamd.net</webMaster>
    <item>
      <trackback:ping>http://www.zamd.net/Trackback.aspx?guid=39307d01-3d87-4cc1-96bf-45adfbab8106</trackback:ping>
      <pingback:server>http://www.zamd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.zamd.net/PermaLink,guid,39307d01-3d87-4cc1-96bf-45adfbab8106.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.zamd.net/CommentView,guid,39307d01-3d87-4cc1-96bf-45adfbab8106.aspx</wfw:comment>
      <wfw:commentRss>http://www.zamd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=39307d01-3d87-4cc1-96bf-45adfbab8106</wfw:commentRss>
      <title>ExtractSAMLAssertion</title>
      <guid isPermaLink="false">http://www.zamd.net/PermaLink,guid,39307d01-3d87-4cc1-96bf-45adfbab8106.aspx</guid>
      <link>http://www.zamd.net/2010/03/10/ExtractSAMLAssertion.aspx</link>
      <pubDate>Wed, 10 Mar 2010 14:57:28 GMT</pubDate>
      <description>

&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
Few people have asked me for the source code of &lt;b&gt;&lt;span style='font-size:12.0pt;font-family:"Courier New"'&gt;ExtractSAMLAssertion&lt;/span&gt;&lt;/b&gt;&lt;span style='font-size:12.0pt;font-family:"Courier New"'&gt; &lt;/span&gt;helper
method/class, which I have used in my article and blog posts. So here you go...&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Please note this is just raw test code and doesn&amp;#8217;t have any error checking and
other related goodies. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;Program&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;static&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; Main(&lt;span style='color:blue'&gt;string&lt;/span&gt;[]
args)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; binding
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;WSHttpBinding&lt;/span&gt;(&lt;span style='color:#2B91AF'&gt;SecurityMode&lt;/span&gt;.Message);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
binding.Security.Message.ClientCredentialType = &lt;span style='color:#2B91AF'&gt;MessageCredentialType&lt;/span&gt;.None;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
binding.Security.Message.EstablishSecurityContext = &lt;span style='color:blue'&gt;false&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; fac
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;WSTrustChannelFactory&lt;/span&gt;(binding, &lt;span style='color:#A31515'&gt;&amp;quot;http://localhost:9000/STS&amp;quot;&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
fac.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = &lt;span style='color:#2B91AF'&gt;X509CertificateValidationMode&lt;/span&gt;.None;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
fac.Open();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; rst
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;RequestSecurityToken&lt;/span&gt; { 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;
AppliesTo = &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;EndpointAddress&lt;/span&gt;(&lt;span style='color:#A31515'&gt;&amp;quot;http://localhost&amp;quot;&lt;/span&gt;),&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;
RequestType = &lt;span style='color:#2B91AF'&gt;WSTrustFeb2005Constants&lt;/span&gt;.&lt;span style='color:#2B91AF'&gt;RequestTypes&lt;/span&gt;.Issue&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
};&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue;background:yellow;
mso-highlight:yellow'&gt;var&lt;/span&gt;&lt;span style='background:yellow;mso-highlight:
yellow'&gt; token
= fac.CreateChannel().Issue(rst) &lt;span style='color:blue'&gt;as&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;GenericXmlSecurityToken&lt;/span&gt;;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; rpCert
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;X509Certificate2&lt;/span&gt;(&lt;span style='color:#A31515'&gt;&amp;quot;localhost.pfx&amp;quot;&lt;/span&gt;, &lt;span style='color:
#A31515'&gt;&amp;quot;a&amp;quot;&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; xml
= &lt;span style='background:yellow;mso-highlight:yellow'&gt;ExtractSAMLAssertion(token,
rpCert);&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;private&lt;/span&gt; &lt;span style='color:blue'&gt;static&lt;/span&gt; &lt;span style='color:blue'&gt;string&lt;/span&gt; ExtractSAMLAssertion(&lt;span style='color:#2B91AF'&gt;GenericXmlSecurityToken&lt;/span&gt; token, &lt;span style='color:#2B91AF'&gt;X509Certificate2&lt;/span&gt; rpCert)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;string&lt;/span&gt; txtAssertion
= &lt;span style='color:blue'&gt;string&lt;/span&gt;.Empty;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; handlerCol
= &lt;span style='color:#2B91AF'&gt;SecurityTokenHandlerCollection&lt;/span&gt;.CreateDefaultSecurityTokenHandlerCollection();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; han
= handlerCol.OfType&amp;lt;&lt;span style='color:#2B91AF'&gt;EncryptedSecurityTokenHandler&lt;/span&gt;&amp;gt;().FirstOrDefault();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;if&lt;/span&gt; (han
!= &lt;span style='color:blue'&gt;null&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;
han.Configuration.ServiceTokenResolver = &lt;span style='color:blue;background:
yellow;mso-highlight:yellow'&gt;new&lt;/span&gt;&lt;span style='background:yellow;
mso-highlight:yellow'&gt; &lt;span style='color:#2B91AF'&gt;EncryptedKeyResolver&lt;/span&gt;(rpCert);&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; sr
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;StringReader&lt;/span&gt;(token.TokenXml.OuterXml);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; rdr2
= &lt;span style='color:#2B91AF'&gt;XmlReader&lt;/span&gt;.Create(sr);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; rtok
= han.ReadToken(rdr2) &lt;span style='color:blue'&gt;as&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SamlSecurityToken&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; stat
= rtok.Assertion.Statements[0];&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; ms
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;MemoryStream&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; memWriter
= &lt;span style='color:#2B91AF'&gt;XmlDictionaryWriter&lt;/span&gt;.CreateTextWriter(ms);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;
stat.WriteXml(memWriter, &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SamlSerializer&lt;/span&gt;(), &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;WSSecurityTokenSerializer&lt;/span&gt;());&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;
memWriter.Flush();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;
ms.Seek(0, &lt;span style='color:#2B91AF'&gt;SeekOrigin&lt;/span&gt;.Begin);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;txtAssertion = &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;StreamReader&lt;/span&gt;(ms).ReadToEnd();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;return&lt;/span&gt; txtAssertion;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;EncryptedKeyResolver&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;SecurityTokenResolver&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:green'&gt;//
Relying party certificate - must hold private key.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;X509Certificate2&lt;/span&gt; rpCert;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; EncryptedKeyResolver(&lt;span style='color:#2B91AF'&gt;X509Certificate2&lt;/span&gt; rpCert)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;this&lt;/span&gt;.rpCert
= rpCert;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;protected&lt;/span&gt; &lt;span style='color:blue'&gt;override&lt;/span&gt; &lt;span style='color:blue'&gt;bool&lt;/span&gt; TryResolveSecurityKeyCore(&lt;span style='color:#2B91AF'&gt;SecurityKeyIdentifierClause&lt;/span&gt; keyIdentifierClause, &lt;span style='color:blue'&gt;out&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SecurityKey&lt;/span&gt; key)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
key = &lt;span style='color:blue'&gt;null&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;try&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; ekec
= keyIdentifierClause &lt;span style='color:blue'&gt;as&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;EncryptedKeyIdentifierClause&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;if&lt;/span&gt; (ekec != &lt;span style='color:blue'&gt;null&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;switch&lt;/span&gt; (ekec.EncryptionMethod)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;case&lt;/span&gt; &lt;span style='color:#A31515'&gt;&amp;quot;http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p&amp;quot;&lt;/span&gt;:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue;background:yellow;mso-highlight:yellow'&gt;var&lt;/span&gt;&lt;span style='background:yellow;mso-highlight:yellow'&gt; encKey
= ekec.GetEncryptedKey();&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue;background:yellow;mso-highlight:yellow'&gt;var&lt;/span&gt;&lt;span style='background:yellow;mso-highlight:yellow'&gt; rsa
= rpCert.PrivateKey &lt;span style='color:blue'&gt;as&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;RSACryptoServiceProvider&lt;/span&gt;;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue;background:yellow;mso-highlight:yellow'&gt;var&lt;/span&gt;&lt;span style='background:yellow;mso-highlight:yellow'&gt; decKey
= rsa.Decrypt(encKey, &lt;span style='color:blue'&gt;true&lt;/span&gt;);&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;
k&lt;span style='background:yellow;mso-highlight:yellow'&gt;ey = &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;InMemorySymmetricSecurityKey&lt;/span&gt;(decKey);&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:blue'&gt;true&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; data
= ekec.GetEncryptedKey();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;var&lt;/span&gt; id
= ekec.EncryptingKeyIdentifier;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;catch&lt;/span&gt; (&lt;span style='color:#2B91AF'&gt;Exception&lt;/span&gt; eexx)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:#2B91AF'&gt;Console&lt;/span&gt;.WriteLine(eexx);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;throw&lt;/span&gt; eexx;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:blue'&gt;false&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;protected&lt;/span&gt; &lt;span style='color:blue'&gt;override&lt;/span&gt; &lt;span style='color:blue'&gt;bool&lt;/span&gt; TryResolveTokenCore(&lt;span style='color:#2B91AF'&gt;SecurityKeyIdentifierClause&lt;/span&gt; keyIdentifierClause, &lt;span style='color:blue'&gt;out&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SecurityToken&lt;/span&gt; token)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;throw&lt;/span&gt; &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;NotImplementedException&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;protected&lt;/span&gt; &lt;span style='color:blue'&gt;override&lt;/span&gt; &lt;span style='color:blue'&gt;bool&lt;/span&gt; TryResolveTokenCore(&lt;span style='color:#2B91AF'&gt;SecurityKeyIdentifier&lt;/span&gt; keyIdentifier, &lt;span style='color:blue'&gt;out&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SecurityToken&lt;/span&gt; token)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&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 style='color:blue'&gt;throw&lt;/span&gt; &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;NotImplementedException&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:12.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;/div&gt;

</description>
      <comments>http://www.zamd.net/CommentView,guid,39307d01-3d87-4cc1-96bf-45adfbab8106.aspx</comments>
      <category>WIF</category>
    </item>
    <item>
      <trackback:ping>http://www.zamd.net/Trackback.aspx?guid=d5a8a3f1-8dfe-4432-ae26-201a21963a54</trackback:ping>
      <pingback:server>http://www.zamd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.zamd.net/PermaLink,guid,d5a8a3f1-8dfe-4432-ae26-201a21963a54.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.zamd.net/CommentView,guid,d5a8a3f1-8dfe-4432-ae26-201a21963a54.aspx</wfw:comment>
      <wfw:commentRss>http://www.zamd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d5a8a3f1-8dfe-4432-ae26-201a21963a54</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Introducing Workflow Security Pack</title>
      <guid isPermaLink="false">http://www.zamd.net/PermaLink,guid,d5a8a3f1-8dfe-4432-ae26-201a21963a54.aspx</guid>
      <link>http://www.zamd.net/2010/02/23/IntroducingWorkflowSecurityPack.aspx</link>
      <pubDate>Tue, 23 Feb 2010 21:23:08 GMT</pubDate>
      <description>

&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
Have you already started serious development with WF 4 and found security limitations?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Have you struggled to implement authenticated messaging, claims-based security, role-based
security and other security features in workflow solutions? 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
WF 4 is a highly extensible framework so most of these features can be built using
the WF extensibility model, but wouldn&amp;#8217;t it be nice to have all of these security
features available in an easy to use activity library?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Here comes the Workflow Security Pack (WFSP) project... WFSP is a collection of activities
and associated plumbing to enable key security scenarios in WF 4.&amp;nbsp; WFSP activities
blend with the rest of the WF to bring end-to-end integrated security into workflow
solutions. The following diagram shows the initial set of activities which are part
of WFSP.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;img width=486 height=566 id="Picture x0020 1" src="http://www.zamd.net/content/binary/image001.jpg" alt="cid:image001.jpg@01CAB458.185E10A0"&gt;&lt;span style='color:#1F497D'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Following are some of the scenarios enabled by WFSP:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-18.0pt;
mso-list:l0 level1 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;1.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Authenticated
messaging&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:90.0pt;text-indent:-18.0pt;
mso-list:l0 level2 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;a.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Enables
the use of various credentials with Send activity&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:90.0pt;text-indent:-18.0pt;
mso-list:l0 level2 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;b.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Follows
exactly the same model when using a Username token or a Saml token issued by an STS&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-18.0pt;
mso-list:l0 level1 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;2.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Role-based
security&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:90.0pt;text-indent:-18.0pt;
mso-list:l0 level2 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;a.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Enables
principal permission based authorization on the Receive activity&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:90.0pt;text-indent:-18.0pt;
mso-list:l0 level2 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;b.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Supports
standard RoleProvider extensibility model&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-18.0pt;
mso-list:l0 level1 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;3.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Claims-based
security&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:90.0pt;text-indent:-18.0pt;
mso-list:l0 level2 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;a.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Ability
to acquire a SAML token using the WS-Trust protocol&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:90.0pt;text-indent:-18.0pt;
mso-list:l0 level2 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;b.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Ability
to pass this token to a SAML secured service using WS-Security&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-18.0pt;
mso-list:l0 level1 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;4.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;End-to-end
Claim-based delegation&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:90.0pt;text-indent:-18.0pt;
mso-list:l0 level2 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;a.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Ability
to use any token as an ActAs token&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-18.0pt;
mso-list:l0 level1 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;5.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Transparent
handling of tokens in a long-running environment&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:90.0pt;text-indent:-18.0pt;
mso-list:l0 level2 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;a.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Enlisted
tokens are preserved during persist and reload cycles 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-18.0pt;
mso-list:l0 level1 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;6.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Impersonation
and Delegation support&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:90.0pt;text-indent:-18.0pt;
mso-list:l0 level2 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;a.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Ability
to impersonate incoming Identity on Receive side&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:90.0pt;text-indent:-18.0pt;
mso-list:l0 level2 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;b.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Ability
to impersonate a User identity on the Send side&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:90.0pt;text-indent:-18.0pt;
mso-list:l0 level2 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;c.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Ability
to call a backend service from the Impersonated scope (Kerberos delegation)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-18.0pt;
mso-list:l0 level1 lfo2'&gt;&lt;![if !supportLists]&gt;
&lt;span style='mso-list:Ignore'&gt;7.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;WCF
OperationContext access in a thread-agnostic way&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
In future posts, I&amp;#8217;ll take an in-depth look into each of activities above and
various scenarios enabled by these activities. Stay tuned.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/p&gt;
&lt;/div&gt;

</description>
      <comments>http://www.zamd.net/CommentView,guid,d5a8a3f1-8dfe-4432-ae26-201a21963a54.aspx</comments>
      <category>WFSP</category>
    </item>
    <item>
      <trackback:ping>http://www.zamd.net/Trackback.aspx?guid=f7f81bbe-f7df-4f51-980b-40e3de1d3d8b</trackback:ping>
      <pingback:server>http://www.zamd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.zamd.net/PermaLink,guid,f7f81bbe-f7df-4f51-980b-40e3de1d3d8b.aspx</pingback:target>
      <dc:creator>Zulfiqar</dc:creator>
      <wfw:comment>http://www.zamd.net/CommentView,guid,f7f81bbe-f7df-4f51-980b-40e3de1d3d8b.aspx</wfw:comment>
      <wfw:commentRss>http://www.zamd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f7f81bbe-f7df-4f51-980b-40e3de1d3d8b</wfw:commentRss>
      <title>Adding Dynamic methods to a WCF Service</title>
      <guid isPermaLink="false">http://www.zamd.net/PermaLink,guid,f7f81bbe-f7df-4f51-980b-40e3de1d3d8b.aspx</guid>
      <link>http://www.zamd.net/2010/02/05/AddingDynamicMethodsToAWCFService.aspx</link>
      <pubDate>Fri, 05 Feb 2010 16:25:46 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
Someone asked me if it’s possible to add a &lt;i&gt;Ping method&lt;/i&gt; to every service contract
without repeatedly defining it in each service contract? The answer is yes &amp; and it’s
fairly simply too. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Here I have a LoginService, which require that implicit Ping method (&lt;span style='font-size:12.0pt;font-family:"Courier New";color:#2B91AF'&gt;DateTime&lt;/span&gt;&lt;span style='font-size:12.0pt;font-family:"Courier New"'&gt; Ping(){})&lt;/span&gt;like
all other service. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;[&lt;span style='color:#2B91AF'&gt;ServiceContract&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New";color:blue'&gt;class&lt;/span&gt;&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:#2B91AF'&gt;LoginService&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; [&lt;span style='color:#2B91AF'&gt;OperationContract&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;bool&lt;/span&gt; Login(&lt;span style='color:blue'&gt;string&lt;/span&gt; userName, &lt;span style='color:blue'&gt;string&lt;/span&gt; password)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:blue'&gt;true&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:12.0pt;font-family:"Courier New"'&gt;}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
This is how you would configure your host for these implicit methods. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New";color:blue'&gt;class&lt;/span&gt;&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:#2B91AF'&gt;Program&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;static&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; Main(&lt;span style='color:blue'&gt;string&lt;/span&gt;[]
args)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;var&lt;/span&gt; sh
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ServiceHost&lt;/span&gt;(&lt;span style='color:blue'&gt;typeof&lt;/span&gt;(&lt;span style='color:#2B91AF'&gt;LoginService&lt;/span&gt;), &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;Uri&lt;/span&gt;(&lt;span style='color:#A31515'&gt;"http://localhost:9001"&lt;/span&gt;));&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='background:yellow;mso-highlight:yellow'&gt;GeneratePingMethod(sh);&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; sh.Open();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:#2B91AF'&gt;Console&lt;/span&gt;.ReadLine();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; sh.Close();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:12.0pt;font-family:"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:12.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Please note “GeneratePingMethod” adds the Ping method to every endpoint. I’m simply
creating the operation using the WCF description API and adding it into the description
tree. &lt;span style='font-size:12.0pt;font-family:"Courier New";color:#2B91AF'&gt;PingImplementationBehavior &lt;/span&gt;plugs
in a custom OperationInvoker which calls the actual Ping implementation.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New";color:blue'&gt;private&lt;/span&gt;&lt;span style='font-size:
12.0pt;font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;static&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; GeneratePingMethod(&lt;span style='color:#2B91AF'&gt;ServiceHost&lt;/span&gt; sh)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;foreach&lt;/span&gt; (&lt;span style='color:blue'&gt;var&lt;/span&gt; endpoint &lt;span style='color:blue'&gt;in&lt;/span&gt; sh.Description.Endpoints)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;var&lt;/span&gt; cd
= endpoint.Contract;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;var&lt;/span&gt; od
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;OperationDescription&lt;/span&gt;(&lt;span style='color:#A31515'&gt;"Ping"&lt;/span&gt;,
cd);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;var&lt;/span&gt; inputMsg
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;MessageDescription&lt;/span&gt;(cd.Namespace
+ cd.Name + &lt;span style='color:#A31515'&gt;"/Ping"&lt;/span&gt;, &lt;span style='color:#2B91AF'&gt;MessageDirection&lt;/span&gt;.Input);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;var&lt;/span&gt; outputMsg
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;MessageDescription&lt;/span&gt;(cd.Namespace
+ cd.Name + &lt;span style='color:#A31515'&gt;"/PingResponse"&lt;/span&gt;, &lt;span style='color:
#2B91AF'&gt;MessageDirection&lt;/span&gt;.Output);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;var&lt;/span&gt; retVal
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;MessagePartDescription&lt;/span&gt;(&lt;span style='color:#A31515'&gt;"PingResult"&lt;/span&gt;,
cd.Namespace); ;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; retVal.Type = &lt;span style='color:blue'&gt;typeof&lt;/span&gt;(&lt;span style='color:#2B91AF'&gt;DateTime&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; outputMsg.Body.ReturnValue
= retVal;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; od.Messages.Add(inputMsg);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; od.Messages.Add(outputMsg);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; od.Behaviors.Add(&lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;DataContractSerializerOperationBehavior&lt;/span&gt;(od));&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; od.Behaviors.Add(&lt;span style='color:blue;background:yellow;mso-highlight:yellow'&gt;new&lt;/span&gt;&lt;span style='background:yellow;mso-highlight:yellow'&gt; &lt;span style='color:#2B91AF'&gt;PingImplementationBehavior&lt;/span&gt;());&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; cd.Operations.Add(od);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:12.0pt;font-family:"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:12.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New";color:blue'&gt;class&lt;/span&gt;&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:#2B91AF'&gt;PingImplementationBehavior&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;IOperationBehavior&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; AddBindingParameters(&lt;span style='color:#2B91AF'&gt;OperationDescription&lt;/span&gt; operationDescription, &lt;span style='color:#2B91AF'&gt;BindingParameterCollection&lt;/span&gt; bindingParameters)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; { }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; ApplyClientBehavior(&lt;span style='color:#2B91AF'&gt;OperationDescription&lt;/span&gt; operationDescription, &lt;span style='color:#2B91AF'&gt;ClientOperation&lt;/span&gt; clientOperation)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; { }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; ApplyDispatchBehavior(&lt;span style='color:#2B91AF'&gt;OperationDescription&lt;/span&gt; operationDescription, &lt;span style='color:#2B91AF'&gt;DispatchOperation&lt;/span&gt; dispatchOperation)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='background:yellow;mso-highlight:yellow'&gt;dispatchOperation.Invoker
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;PingInvoker&lt;/span&gt;();&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; Validate(&lt;span style='color:#2B91AF'&gt;OperationDescription&lt;/span&gt; operationDescription)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; { }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:12.0pt;font-family:"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Again a fairly simple invoker which is tightly coupled to the signature of Ping method.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New";color:blue'&gt;class&lt;/span&gt;&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:#2B91AF'&gt;PingInvoker&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;IOperationInvoker&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;object&lt;/span&gt;[]
AllocateInputs()&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:blue'&gt;object&lt;/span&gt;[0];&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;object&lt;/span&gt; Invoke(&lt;span style='color:blue'&gt;object&lt;/span&gt; instance, &lt;span style='color:blue'&gt;object&lt;/span&gt;[]
inputs, &lt;span style='color:blue'&gt;out&lt;/span&gt; &lt;span style='color:blue'&gt;object&lt;/span&gt;[]
outputs)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; outputs = &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:blue'&gt;object&lt;/span&gt;[0];&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;return&lt;/span&gt; Ping();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;IAsyncResult&lt;/span&gt; InvokeBegin(&lt;span style='color:blue'&gt;object&lt;/span&gt; instance, &lt;span style='color:blue'&gt;object&lt;/span&gt;[]
inputs, &lt;span style='color:#2B91AF'&gt;AsyncCallback&lt;/span&gt; callback, &lt;span style='color:blue'&gt;object&lt;/span&gt; state)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;throw&lt;/span&gt; &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;NotImplementedException&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;object&lt;/span&gt; InvokeEnd(&lt;span style='color:blue'&gt;object&lt;/span&gt; instance, &lt;span style='color:blue'&gt;out&lt;/span&gt; &lt;span style='color:blue'&gt;object&lt;/span&gt;[]
outputs, &lt;span style='color:#2B91AF'&gt;IAsyncResult&lt;/span&gt; result)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;throw&lt;/span&gt; &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;NotImplementedException&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;bool&lt;/span&gt; IsSynchronous&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;get&lt;/span&gt; { &lt;span style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:blue'&gt;true&lt;/span&gt;;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;static&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;DateTime&lt;/span&gt; Ping()&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;DateTime&lt;/span&gt;.Now;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:12.0pt;
font-family:"Courier New"'&gt; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:12.0pt;font-family:"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;

</description>
      <comments>http://www.zamd.net/CommentView,guid,f7f81bbe-f7df-4f51-980b-40e3de1d3d8b.aspx</comments>
      <category>WCF Extensibility</category>
    </item>
    <item>
      <trackback:ping>http://www.zamd.net/Trackback.aspx?guid=1b795b8d-fcb5-45d2-b7ac-edcf9ea0c2b2</trackback:ping>
      <pingback:server>http://www.zamd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.zamd.net/PermaLink,guid,1b795b8d-fcb5-45d2-b7ac-edcf9ea0c2b2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.zamd.net/CommentView,guid,1b795b8d-fcb5-45d2-b7ac-edcf9ea0c2b2.aspx</wfw:comment>
      <wfw:commentRss>http://www.zamd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=1b795b8d-fcb5-45d2-b7ac-edcf9ea0c2b2</wfw:commentRss>
      <title>Authenticated messaging in WF 4</title>
      <guid isPermaLink="false">http://www.zamd.net/PermaLink,guid,1b795b8d-fcb5-45d2-b7ac-edcf9ea0c2b2.aspx</guid>
      <link>http://www.zamd.net/2010/01/19/AuthenticatedMessagingInWF4.aspx</link>
      <pubDate>Tue, 19 Jan 2010 16:44:20 GMT</pubDate>
      <description>

&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
Authenticated messaging is one limitation in WF 4 as currently there is no API for
setting up credentials to be used with a Send activity. Having said that, ChannelFactory
used by Send activity still picks up the behaviour configuration from the config file. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
So you can potentially write a custom behaviour to supply &lt;i&gt;additional &lt;/i&gt;credentials
to the Send activity. Let&amp;#8217;s see a simple clientCredentialsAdapter behaviour
which will enable you to setup userName/Password in config file. It&amp;#8217;s almost
always a bad idea to keep unencrypted password in config files so it is recommended
that you should use config encryption to encrypt the behaviour section. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='font-size:
9.5pt;font-family:"Lucida Console";color:#A31515'&gt;behavior&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:red'&gt;name&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;&amp;quot;&lt;span style='color:blue'&gt;credentialAdapter&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt;&amp;gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;clientCredentials&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;serviceCertificate&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;authentication&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:red'&gt;certificateValidationMode&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;&amp;quot;&lt;span style='color:blue'&gt;None&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt;/&amp;gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;defaultCertificate&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:red'&gt;findValue&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;&amp;quot;&lt;span style='color:blue'&gt;f7ad5a9dcc35f21ffc691925515f48eb44f5e07a&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt; &lt;/span&gt;&lt;span style='color:red'&gt;x509FindType&lt;/span&gt;&lt;span style='color:blue'&gt;=&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt;FindByThumbprint&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt; &lt;/span&gt;&lt;span style='color:red'&gt;storeLocation&lt;/span&gt;&lt;span style='color:blue'&gt;=&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt;CurrentUser&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt; &lt;/span&gt;&lt;span style='color:red'&gt;storeName&lt;/span&gt;&lt;span style='color:blue'&gt;=&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt;My&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt;/&amp;gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;serviceCertificate&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;clientCredentials&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp; &lt;/span&gt;&lt;span style='font-size:
9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;clientCredentialsAdapter&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;userName&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:red'&gt;userName&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;&amp;quot;&lt;span style='color:blue'&gt;configUser&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt; &lt;/span&gt;&lt;span style='color:red'&gt;password&lt;/span&gt;&lt;span style='color:blue'&gt;=&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt;p@ssw0rd!&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt;/&amp;gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;clientCredentialsAdapter&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;lt;/&lt;/span&gt;&lt;span style='font-size:
9.5pt;font-family:"Lucida Console";color:#A31515'&gt;behavior&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
At this point, you can configure this behaviour on an endpoint used by a Send activity.
This change will enable Send activity to use this userName/Password for securing outgoing
messages.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;public&lt;/span&gt;&lt;span style='font-size:
9.5pt;font-family:"Lucida Console"'&gt; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ClientCredentialsAdapterBehavior&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;IEndpointBehavior&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;ClientCredentialsAdapterBehaviorElement&lt;/span&gt; configElement;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; ClientCredentialsAdapterBehavior(&lt;span style='color:#2B91AF'&gt;ClientCredentialsAdapterBehaviorElement&lt;/span&gt; configElement)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;this&lt;/span&gt;.configElement
= configElement;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; AddBindingParameters(&lt;span style='color:#2B91AF'&gt;ServiceEndpoint&lt;/span&gt; endpoint, &lt;span style='color:#2B91AF'&gt;BindingParameterCollection&lt;/span&gt; bindingParameters){}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; ApplyClientBehavior(&lt;span style='color:#2B91AF'&gt;ServiceEndpoint&lt;/span&gt; endpoint,
System.ServiceModel.Dispatcher.&lt;span style='color:#2B91AF'&gt;ClientRuntime&lt;/span&gt; clientRuntime)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; clientCredentials
= endpoint.Behaviors.Find&amp;lt;&lt;span style='color:#2B91AF'&gt;ClientCredentials&lt;/span&gt;&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='background:yellow;mso-highlight:yellow'&gt;Adapt(clientCredentials);&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; ApplyDispatchBehavior(&lt;span style='color:#2B91AF'&gt;ServiceEndpoint&lt;/span&gt; endpoint, &lt;span style='color:#2B91AF'&gt;EndpointDispatcher&lt;/span&gt; endpointDispatcher)
{ }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; Validate(&lt;span style='color:#2B91AF'&gt;ServiceEndpoint&lt;/span&gt; endpoint){}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;void&lt;/span&gt; Adapt(&lt;span style='color:#2B91AF'&gt;ClientCredentials&lt;/span&gt; orignalCredentials)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
orignalCredentials.UserName.UserName = configElement.UserName.UserName;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
orignalCredentials.UserName.Password = configElement.UserName.Password;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
So that was simple&lt;span style='font-family:Wingdings'&gt;J&lt;/span&gt; What about a scenario
where you have userName/Password as part of workflow state and you want to use that
instead?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
Well, in that case there is more work involved which I&amp;#8217;ll discuss in next post.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;/div&gt;

</description>
      <comments>http://www.zamd.net/CommentView,guid,1b795b8d-fcb5-45d2-b7ac-edcf9ea0c2b2.aspx</comments>
      <category>WF 4</category>
    </item>
    <item>
      <trackback:ping>http://www.zamd.net/Trackback.aspx?guid=2dcb1b7f-bdac-4f33-a463-1a24903917e3</trackback:ping>
      <pingback:server>http://www.zamd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.zamd.net/PermaLink,guid,2dcb1b7f-bdac-4f33-a463-1a24903917e3.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.zamd.net/CommentView,guid,2dcb1b7f-bdac-4f33-a463-1a24903917e3.aspx</wfw:comment>
      <wfw:commentRss>http://www.zamd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=2dcb1b7f-bdac-4f33-a463-1a24903917e3</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Using Request Headers for Metadata Address</title>
      <guid isPermaLink="false">http://www.zamd.net/PermaLink,guid,2dcb1b7f-bdac-4f33-a463-1a24903917e3.aspx</guid>
      <link>http://www.zamd.net/2010/01/14/UsingRequestHeadersForMetadataAddress.aspx</link>
      <pubDate>Thu, 14 Jan 2010 19:44:42 GMT</pubDate>
      <description>

&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
&lt;span lang=EN-US style='color:#1F497D'&gt;WCF by default adds the listen address of the
endpoints in the WSDL so in a scenario where the private address of the server is
different from the public address you get incorrect endpoint address in WSDL. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span lang=EN-US style='color:#1F497D'&gt;For example if a service is listening on &lt;a href="http://localhost:7721/"&gt;http://localhost:7721/&lt;/a&gt; and
you access its metadata using a virtual IP &lt;a href="http://102.212.0.117/?wsdl"&gt;http://102.212.0.117/?wsdl&lt;/a&gt;&lt;/span&gt;&lt;span lang=EN-US&gt;, &lt;span style='color:#1F497D'&gt;you
get following:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='color:#1F497D'&gt;&lt;img border=0 width=582 height=78 id="Picture x0020 1" src="http://www.zamd.net/content/binary/image0021.jpg"&gt;&lt;/span&gt;&lt;span lang=EN-US style='color:#1F497D'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span lang=EN-US style='color:#1F497D'&gt;Now this behavior might not work in certain
scenarios and you want the metadata generation to dynamically pick the address from
the request headers, similar to ASMX web services.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:#2B91AF'&gt;UseRequestHeadersForMetadataAddressBehavior&lt;/span&gt;&lt;span style='color:#1F497D'&gt; &lt;span lang=EN-US&gt;enables
exactly this. This opt-in behavior sets the address of endpoints dynamically, based
on the request header. &amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span lang=EN-US style='color:#1F497D'&gt;Like all other WCF behaviors, this behavior
can be enabled either in the code or config.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;sh.Description.Behaviors.Add(&lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;UseRequestHeadersForMetadataAddressBehavior&lt;/span&gt;());&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='font-size:
9.5pt;font-family:"Lucida Console";color:#A31515'&gt;system.serviceModel&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;behaviors&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;serviceBehaviors&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;behavior&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";
color:#A31515'&gt;useRequestHeadersForMetadataAddress&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;/&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;behavior&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;serviceBehaviors&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:#A31515'&gt;behaviors&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console";color:blue'&gt;&amp;lt;/&lt;/span&gt;&lt;span style='font-size:
9.5pt;font-family:"Lucida Console";color:#A31515'&gt;system.serviceModel&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:"Lucida Console";color:blue'&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span lang=EN-US style='color:#1F497D'&gt;This behavior is added in .NET 4.0 and there
is a QFE available for 3.5 SP1: &lt;a href="http://support.microsoft.com/kb/971842"&gt;http://support.microsoft.com/kb/971842&lt;/a&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;/div&gt;

</description>
      <comments>http://www.zamd.net/CommentView,guid,2dcb1b7f-bdac-4f33-a463-1a24903917e3.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.zamd.net/Trackback.aspx?guid=711edff6-ec10-43b1-adb8-c2dbcb2df3e9</trackback:ping>
      <pingback:server>http://www.zamd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.zamd.net/PermaLink,guid,711edff6-ec10-43b1-adb8-c2dbcb2df3e9.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.zamd.net/CommentView,guid,711edff6-ec10-43b1-adb8-c2dbcb2df3e9.aspx</wfw:comment>
      <wfw:commentRss>http://www.zamd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=711edff6-ec10-43b1-adb8-c2dbcb2df3e9</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>PrincipalPermission Authorization in WF 4</title>
      <guid isPermaLink="false">http://www.zamd.net/PermaLink,guid,711edff6-ec10-43b1-adb8-c2dbcb2df3e9.aspx</guid>
      <link>http://www.zamd.net/2010/01/12/PrincipalPermissionAuthorizationInWF4.aspx</link>
      <pubDate>Tue, 12 Jan 2010 18:28:19 GMT</pubDate>
      <description>

&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
In &lt;a href="http://www.zamd.net/2009/12/13/ManagingOperationContextInWF4.aspx"&gt;last
post&lt;/a&gt;, I have shown you how to get hold of OperationContext when using messaging
activities. Once you got hold of OperationContext, you can use it to perform many
useful tasks and one of them is Authorization. Let&amp;#8217;s start by defining a &lt;i&gt;Scope
activity &lt;/i&gt;to hook our &lt;span class=apple-style-span&gt;&lt;span style='font-size:7.0pt;font-family:"Arial","sans-serif";color:black'&gt;IReceiveMessageCallback &lt;/span&gt;&lt;/span&gt;implementation.&lt;span class=apple-style-span&gt;&lt;span style='font-size:7.0pt;font-family:"Arial","sans-serif";color:black'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span class=apple-style-span&gt;&lt;span style='font-size:7.0pt;
font-family:"Arial","sans-serif";color:black'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style='color:#2B91AF'&gt;Designer&lt;/span&gt;(&lt;span style='color:blue'&gt;typeof&lt;/span&gt;(&lt;span style='color:#2B91AF'&gt;PrincipalPermissionScopeDesigner&lt;/span&gt;))]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;PrincipalPermissionScope&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;NativeActivity&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;InArgument&lt;/span&gt;&amp;lt;&lt;span style='color:blue'&gt;string&lt;/span&gt;&amp;gt;
PrincipalPermissionName { &lt;span style='color:blue'&gt;get&lt;/span&gt;; &lt;span style='color:blue'&gt;set&lt;/span&gt;;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;InArgument&lt;/span&gt;&amp;lt;&lt;span style='color:blue'&gt;string&lt;/span&gt;&amp;gt;
PrincipalPermissionRole { &lt;span style='color:blue'&gt;get&lt;/span&gt;; &lt;span style='color:blue'&gt;set&lt;/span&gt;;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;Activity&lt;/span&gt; Body
{ &lt;span style='color:blue'&gt;get&lt;/span&gt;; &lt;span style='color:blue'&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;protected&lt;/span&gt; &lt;span style='color:blue'&gt;override&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; Execute(&lt;span style='color:#2B91AF'&gt;NativeActivityContext&lt;/span&gt; context)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;var&lt;/span&gt; name
= &lt;span style='color:blue'&gt;this&lt;/span&gt;.PrincipalPermissionName.Get(context);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;var&lt;/span&gt; role
= &lt;span style='color:blue'&gt;this&lt;/span&gt;.PrincipalPermissionRole.Get(context);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;var&lt;/span&gt; principalPermission
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;PrincipalPermission&lt;/span&gt;(name,
role);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
context.Properties.Add(&lt;span style='color:#A31515'&gt;&amp;quot;AuthorizationManager&amp;quot;&lt;/span&gt;, 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;AuthorizationManager&lt;/span&gt;(principalPermission));&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
context.ScheduleActivity(&lt;span style='color:blue'&gt;this&lt;/span&gt;.Body);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
As part of Scope activity execution, I have added my ReceiveMessageCallback in execution
properties collection. This enables our callback to be called for &lt;i&gt;&lt;u&gt;every message
received by any activity inside the Scope&lt;/u&gt;&lt;/i&gt;. Once we have access to OperationContext
(which is the only as the only parameter of the callback) we can use it to perform
authorization. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
[&lt;span style='color:#2B91AF'&gt;DataContract&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;AuthorizationManager&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;IReceiveMessageCallback&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:#2B91AF'&gt;DataMember&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:#2B91AF'&gt;PrincipalPermission&lt;/span&gt; principalPermission;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;public&lt;/span&gt; AuthorizationManager(&lt;span style='color:#2B91AF'&gt;PrincipalPermission&lt;/span&gt; principalPermission)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;this&lt;/span&gt;.principalPermission
= principalPermission;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; OnReceiveMessage(&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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;
System.ServiceModel.&lt;span style='color:#2B91AF'&gt;OperationContext&lt;/span&gt; operationContext, 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:#2B91AF'&gt;ExecutionProperties&lt;/span&gt; activityExecutionProperties)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;var&lt;/span&gt; currentPrincipal
= &lt;span style='color:#2B91AF'&gt;Thread&lt;/span&gt;.CurrentPrincipal;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;var&lt;/span&gt; isPrincipalSet
= &lt;span style='color:blue'&gt;false&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;var&lt;/span&gt; targetPrincipal
= GetPrincipal(operationContext);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;try&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;if&lt;/span&gt; (targetPrincipal
!= &lt;span style='color:blue'&gt;null&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:#2B91AF'&gt;Thread&lt;/span&gt;.CurrentPrincipal
= targetPrincipal;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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;
isPrincipalSet = &lt;span style='color:blue'&gt;true&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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;
principalPermission.Demand();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;catch&lt;/span&gt; (&lt;span style='color:#2B91AF'&gt;SecurityException&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;throw&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SecurityUtility&lt;/span&gt;.CreateAccessDeniedFaultException();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;finally&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:blue'&gt;if&lt;/span&gt; (isPrincipalSet)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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 style='color:#2B91AF'&gt;Thread&lt;/span&gt;.CurrentPrincipal
= currentPrincipal;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:"Lucida Console"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
And with a customer designer, this is how it look like&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;img border=0 width=325 height=566 id="Picture x0020 1" src="http://www.zamd.net/content/binary/image001123456.png"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;/div&gt;

</description>
      <comments>http://www.zamd.net/CommentView,guid,711edff6-ec10-43b1-adb8-c2dbcb2df3e9.aspx</comments>
      <category>WF4</category>
    </item>
    <item>
      <trackback:ping>http://www.zamd.net/Trackback.aspx?guid=24d2a2d3-1e35-4d64-b36e-71e29f0ae023</trackback:ping>
      <pingback:server>http://www.zamd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.zamd.net/PermaLink,guid,24d2a2d3-1e35-4d64-b36e-71e29f0ae023.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.zamd.net/CommentView,guid,24d2a2d3-1e35-4d64-b36e-71e29f0ae023.aspx</wfw:comment>
      <wfw:commentRss>http://www.zamd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=24d2a2d3-1e35-4d64-b36e-71e29f0ae023</wfw:commentRss>
      <title>Article on AD FS 2.0</title>
      <guid isPermaLink="false">http://www.zamd.net/PermaLink,guid,24d2a2d3-1e35-4d64-b36e-71e29f0ae023.aspx</guid>
      <link>http://www.zamd.net/2009/12/13/ArticleOnADFS20.aspx</link>
      <pubDate>Sun, 13 Dec 2009 12:28:51 GMT</pubDate>
      <description>

&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
My article on AD FS 2.0 was published in November issue of MSDN magazine. Here is
the URL.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;a href="http://msdn.microsoft.com/en-us/magazine/ee335705.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/ee335705.aspx&lt;/a&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;/div&gt;

</description>
      <comments>http://www.zamd.net/CommentView,guid,24d2a2d3-1e35-4d64-b36e-71e29f0ae023.aspx</comments>
      <category>Article</category>
    </item>
    <item>
      <trackback:ping>http://www.zamd.net/Trackback.aspx?guid=2be42374-10dd-4b0d-8982-7965e835b2ab</trackback:ping>
      <pingback:server>http://www.zamd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.zamd.net/PermaLink,guid,2be42374-10dd-4b0d-8982-7965e835b2ab.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.zamd.net/CommentView,guid,2be42374-10dd-4b0d-8982-7965e835b2ab.aspx</wfw:comment>
      <wfw:commentRss>http://www.zamd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=2be42374-10dd-4b0d-8982-7965e835b2ab</wfw:commentRss>
      <title>Managing OperationContext in WF 4</title>
      <guid isPermaLink="false">http://www.zamd.net/PermaLink,guid,2be42374-10dd-4b0d-8982-7965e835b2ab.aspx</guid>
      <link>http://www.zamd.net/2009/12/13/ManagingOperationContextInWF4.aspx</link>
      <pubDate>Sun, 13 Dec 2009 12:26:43 GMT</pubDate>
      <description>

&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
&lt;b&gt;&lt;u&gt;Managing OperationContext in WF 4 using the ISendMessageCallback &amp;amp; IReceiveMessageCallback&lt;/u&gt;&lt;/b&gt;&lt;span style='color:#1F497D'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
WF 4 raised the level of abstraction for writing workflow services and their clients
by defining &lt;b&gt;Send&lt;/b&gt; &amp;amp; &lt;b&gt;Receive&lt;/b&gt; messaging activities. These activities
hides lot of WCF plumbing from you and as result, some useful components like &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontext.aspx"&gt;OperationContext&lt;/a&gt; are
also not available in the usual WCF way. For example,&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-18.0pt;
mso-list:l2 level1 lfo5'&gt;&lt;![if !supportLists]&gt;
&lt;span style='font-family:Wingdings'&gt;&lt;span style='mso-list:Ignore'&gt;Ø&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;When
using Send activity, you never see the ChannelFactory/Channel so you can&amp;#8217;t scope
an OperationContext around them. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-18.0pt;
mso-list:l2 level1 lfo5'&gt;&lt;![if !supportLists]&gt;
&lt;span style='font-family:Wingdings'&gt;&lt;span style='mso-list:Ignore'&gt;Ø&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;When
using Receive activity, activities following the Receive &lt;i&gt;might &lt;/i&gt;execute on a
different thread (than the WCF dispatcher thread) in which case you again wouldn&amp;#8217;t
get OperationContext.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
If you done any WCF programming, you would agree that OperationContext can be very
useful on both Send/Receive side:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-18.0pt;
mso-list:l1 level1 lfo6'&gt;&lt;![if !supportLists]&gt;
&lt;span style='font-family:Wingdings'&gt;&lt;span style='mso-list:Ignore'&gt;Ø&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;On
the send side, you can use OperationContext for sending additional message headers
as part of the outgoing message or you can use OperationContext to add additional
message properties to the outgoing message.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-18.0pt;
mso-list:l1 level1 lfo6'&gt;&lt;![if !supportLists]&gt;
&lt;span style='font-family:Wingdings'&gt;&lt;span style='mso-list:Ignore'&gt;Ø&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;On
the receive side, you can use OperationContext to retrieve very useful information
including but not limited to security information related to the incoming message.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
So in short, access to OperationContext on Send/Receive side can be very useful and
luckily WF 4 has enabled this using a callback mechanism based on &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.activities.ireceivemessagecallback(VS.100).aspx"&gt;IReceiveMessageCallback&lt;/a&gt; &amp;amp; &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.activities.isendmessagecallback(VS.100).aspx"&gt;ISendMessageCallback&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
IReceiveMessageCallback(s) are invoked just after the message is received by a Receive
activity. Similarly, ISendMessageCallback(s) are invoked just before the message is
sent on wire. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
To attach these callback(s) to Send &amp;amp; Receive activities, they must be available
as execution properties when Send/Receive executes. Execution properties are WF mechanism
to enable Thread Local Storage (TLS) in a thread agnostic way. A common method of
adding execution properties to and activity is to create a parent scope activity and
set the execution properties as part of parent execution. Here is an example.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;public&lt;/span&gt;&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;OperationContextScope&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;NativeActivity&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;Activity&lt;/span&gt; Body
{ &lt;span style='color:blue'&gt;get&lt;/span&gt;; &lt;span style='color:blue'&gt;set&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;protected&lt;/span&gt; &lt;span style='color:blue'&gt;override&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; CacheMetadata(&lt;span style='color:#2B91AF'&gt;NativeActivityMetadata&lt;/span&gt; metadata)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
metadata.AddChild(&lt;span style='color:blue'&gt;this&lt;/span&gt;.Body);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;protected&lt;/span&gt; &lt;span style='color:blue'&gt;override&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; Execute(&lt;span style='color:#2B91AF'&gt;NativeActivityContext&lt;/span&gt; context)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='background:yellow;mso-highlight:yellow'&gt;context.Properties.Add(&lt;span style='color:#A31515'&gt;&amp;quot;MessageInspector&amp;quot;&lt;/span&gt;, &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SendMessageInspector&lt;/span&gt;());&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
context.ScheduleActivity(&lt;span style='color:blue'&gt;this&lt;/span&gt;.Body);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style='color:#2B91AF'&gt;DataContract&lt;/span&gt;]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SendMessageInspector&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;ISendMessageCallback&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; OnSendMessage(&lt;span style='color:#2B91AF'&gt;OperationContext&lt;/span&gt; operationContext)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&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 style='color:blue'&gt;var&lt;/span&gt; h1
= &lt;span style='color:#2B91AF'&gt;MessageHeader&lt;/span&gt;.CreateHeader(&lt;span style='color:#A31515'&gt;&amp;quot;yourName&amp;quot;&lt;/span&gt;, &lt;span style='color:#A31515'&gt;&amp;quot;urn:personal&amp;quot;&lt;/span&gt;, &lt;span style='color:#A31515'&gt;&amp;quot;zuahmed&amp;quot;&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
operationContext.OutgoingMessageHeaders.Add(h1);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Once you defined a scope activity like above you can just wrap your actual Send/Receive
inside this scope to activate your inspector. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:#2B91AF'&gt;WorkflowInvoker&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas'&gt;.Invoke(&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue;background:
yellow;mso-highlight:yellow'&gt;new&lt;/span&gt;&lt;span style='background:yellow;
mso-highlight:yellow'&gt; &lt;span style='color:#2B91AF'&gt;OperationContextScope&lt;/span&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Body =&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;Send&lt;/span&gt; {
OperationName = &lt;span style='color:#A31515'&gt;&amp;quot;Ping&amp;quot;&lt;/span&gt;, ServiceContractName
= &lt;span style='color:#A31515'&gt;&amp;quot;IPingService&amp;quot;&lt;/span&gt;, EndpointConfigurationName
= &lt;span style='color:#A31515'&gt;&amp;quot;PingEpr&amp;quot;&lt;/span&gt; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
IReceiveMessageCallback and Receive activity is exactly the same and I leaving that
as an exercise for the readers &lt;span style='font-family:
Wingdings'&gt;J&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
In this post, I have shown you a general purpose mechanism to interact with an OperationContext
while using WF 4 messaging activities. In next few posts, I&amp;#8217;ll use this mechanism
to add some very useful security features to WF 4. Stay tuned...&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;/div&gt;

</description>
      <comments>http://www.zamd.net/CommentView,guid,2be42374-10dd-4b0d-8982-7965e835b2ab.aspx</comments>
      <category>WF 4</category>
    </item>
    <item>
      <trackback:ping>http://www.zamd.net/Trackback.aspx?guid=23054c39-05ca-4e25-97b2-bf35f95957f1</trackback:ping>
      <pingback:server>http://www.zamd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.zamd.net/PermaLink,guid,23054c39-05ca-4e25-97b2-bf35f95957f1.aspx</pingback:target>
      <dc:creator>Zulfiqar</dc:creator>
      <wfw:comment>http://www.zamd.net/CommentView,guid,23054c39-05ca-4e25-97b2-bf35f95957f1.aspx</wfw:comment>
      <wfw:commentRss>http://www.zamd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=23054c39-05ca-4e25-97b2-bf35f95957f1</wfw:commentRss>
      <title>Durable Duplex Messaging in .Net 4 Beta2</title>
      <guid isPermaLink="false">http://www.zamd.net/PermaLink,guid,23054c39-05ca-4e25-97b2-bf35f95957f1.aspx</guid>
      <link>http://www.zamd.net/2009/10/28/DurableDuplexMessagingInNet4Beta2.aspx</link>
      <pubDate>Wed, 28 Oct 2009 12:10:25 GMT</pubDate>
      <description>
&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
&lt;a href="http://www.zamd.net/2009/06/05/DuplexCommunicationWithNet35WorkflowServices.aspx"&gt;Here&lt;/a&gt; I
talked about couple of approaches to enable durable duplex messaging in .Net 3.5. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
.NET 4 has added first class support for durable duplex messaging by extending &lt;a href="http://msdn.microsoft.com/en-us/library/bb924468.aspx"&gt;Context
Exchange Protocol&lt;/a&gt; to include a CallbackContext. So in addition to instanceId,
a client application can send a callback context as part of the call. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Service, upon receiving the message, will start the long running work and when it
needs to callback to client, it can simply use the address from the callback context.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
From API perspective – a new property “ClientCallbackAddress” is added to ContextBindingElement.
This property is also exposed on some higher level bindings like wsHttpContextBinding.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
A new CallbackContextMessageProperty is also added to manipulate callback context
from the application code.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:9.5pt;
font-family:Consolas;color:#A31515'&gt;bindings&lt;/span&gt;&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;&gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:9.5pt;font-family:Consolas;color:#A31515'&gt;wsHttpContextBinding&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas;color:blue'&gt;&gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:9.5pt;font-family:Consolas;color:#A31515'&gt;binding&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas;color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas;color:red'&gt;name&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas;color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas'&gt;"&lt;span style='color:blue'&gt;noSec&lt;/span&gt;"&lt;span style='color:blue'&gt; &lt;/span&gt;&lt;span style='color:red;background:aqua;mso-highlight:
aqua'&gt;clientCallbackAddress&lt;/span&gt;&lt;span style='color:blue;background:aqua;
mso-highlight:aqua'&gt;=&lt;/span&gt;&lt;span style='background:aqua;mso-highlight:aqua'&gt;"&lt;span style='color:blue'&gt;http://localhost:7080&lt;/span&gt;"&lt;span style='color:blue'&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:9.5pt;font-family:Consolas;color:#A31515'&gt;security&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas;color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas;color:red'&gt;mode&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas;color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas'&gt;"&lt;span style='color:blue'&gt;None&lt;/span&gt;"&lt;span style='color:blue'&gt;/&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;&lt;/span&gt; &lt;span style='font-size:9.5pt;font-family:Consolas;color:#A31515'&gt;binding&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas;color:blue'&gt;&gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;&lt;/span&gt; &lt;span style='font-size:9.5pt;font-family:Consolas;color:#A31515'&gt;wsHttpContextBinding&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas;color:blue'&gt;&gt;&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;&lt;/span&gt; &lt;span style='font-size:
9.5pt;font-family:Consolas;color:#A31515'&gt;bindings&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas;color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Any messages sent using above binding will have a callback context attached to it.
Please note callback context is only supported with SOAP based context exchange and
that’s why &lt;span style='font-size:9.5pt;
font-family:Consolas;color:red'&gt;clientCallbackAddress&lt;/span&gt; property
is NOT exposed on basicHttpContextBinding as it uses HTTP cookies for context exchange.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;var&lt;/span&gt;&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt; cf
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ChannelFactory&lt;/span&gt;&lt;&lt;span style='color:#2B91AF'&gt;IRequestChannel&lt;/span&gt;&gt;(&lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;WSHttpContextBinding&lt;/span&gt;(&lt;span style='color:#A31515'&gt;"noSec"&lt;/span&gt;), 
&lt;o:p&gt;&lt;/o:p&gt;
&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt; new&lt;/span&gt;&lt;span style='font-size:9.5pt;font-family:Consolas'&gt; &lt;span style='color:#2B91AF'&gt;EndpointAddress&lt;/span&gt;(&lt;span style='color:#A31515'&gt;"http://localhost:8975/"&lt;/span&gt;));&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;var&lt;/span&gt;&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt; ccmp
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;CallbackContextMessageProperty&lt;/span&gt;(&lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;Dictionary&lt;/span&gt;&lt;&lt;span
style='color:blue'&gt;string&lt;/span&gt;,&lt;span style='color:blue'&gt;string&lt;/span&gt;&gt;());&lt;o:p&gt;&lt;/o:p&gt;
&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas;color:blue'&gt;var&lt;/span&gt;&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt; msg
= &lt;span style='color:#2B91AF'&gt;Message&lt;/span&gt;.CreateMessage(&lt;span style='color:#2B91AF'&gt;MessageVersion&lt;/span&gt;.Default, &lt;span style='color:#A31515'&gt;"urn:foo"&lt;/span&gt;, &lt;span style='color:#A31515'&gt;""&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;msg.Properties.Add(&lt;span style='color:#2B91AF'&gt;CallbackContextMessageProperty&lt;/span&gt;.Name,
ccmp);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:9.5pt;
font-family:Consolas'&gt;cf.CreateChannel().Request(msg);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
This will produce following SOAP envelop and you can see CallbackContext header is
added in outgoing message.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;&lt;/span&gt;&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:#A31515'&gt;s:Envelope&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:red'&gt;xmlns:s&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;"&lt;span style='color:blue'&gt;http://www.w3.org/2003/05/soap-envelope&lt;/span&gt;"&lt;span style='color:blue'&gt; &lt;/span&gt;&lt;span style='color:red'&gt;xmlns:a&lt;/span&gt;&lt;span style='color:blue'&gt;=&lt;/span&gt;"&lt;span style='color:blue'&gt;http://www.w3.org/2005/08/addressing&lt;/span&gt;"&lt;span style='color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:
10.0pt;font-family:"Courier New";color:#A31515'&gt;s:Header&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515'&gt;a:Action&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:red'&gt;s:mustUnderstand&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;"&lt;span style='color:blue'&gt;1&lt;/span&gt;"&lt;span style='color:blue'&gt;&gt;&lt;/span&gt;urn:foo&lt;span style='color:blue'&gt;&lt;/span&gt;&lt;span style='color:#A31515'&gt;a:Action&lt;/span&gt;&lt;span style='color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515'&gt;a:MessageID&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&gt;&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;urn:uuid:c7c03178-fa84-400e-8673-ad1ed28f0f79&lt;span style='color:blue'&gt;&lt;/span&gt;&lt;span style='color:#A31515'&gt;a:MessageID&lt;/span&gt;&lt;span style='color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515'&gt;a:ReplyTo&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515'&gt;a:Address&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&gt;&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;http://www.w3.org/2005/08/addressing/anonymous&lt;span style='color:blue'&gt;&lt;/span&gt;&lt;span style='color:#A31515'&gt;a:Address&lt;/span&gt;&lt;span style='color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515'&gt;a:ReplyTo&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt; &lt;span style='background:aqua;mso-highlight:aqua'&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515;background:
aqua;mso-highlight:aqua'&gt;CallbackContext&lt;/span&gt;&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue;background:aqua;mso-highlight:aqua'&gt; &lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:red;background:aqua;
mso-highlight:aqua'&gt;xmlns&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";
color:blue;background:aqua;mso-highlight:aqua'&gt;=&lt;/span&gt;&lt;span style='font-size:
10.0pt;font-family:"Courier New";background:aqua;mso-highlight:aqua'&gt;"&lt;span style='color:blue'&gt;http://schemas.microsoft.com/ws/2008/02/context&lt;/span&gt;"&lt;span style='color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue;background:aqua;mso-highlight:aqua'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515;
background:aqua;mso-highlight:aqua'&gt;CallbackEndpointReference&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue;background:aqua;
mso-highlight:aqua'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue;background:aqua;mso-highlight:aqua'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515;
background:aqua;mso-highlight:aqua'&gt;a:Address&lt;/span&gt;&lt;span style='font-size:
10.0pt;font-family:"Courier New";color:blue;background:aqua;mso-highlight:aqua'&gt;&gt;&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";background:aqua;mso-highlight:
aqua'&gt;http://localhost:7080/&lt;span style='color:blue'&gt;&lt;/span&gt;&lt;span style='color:#A31515'&gt;a:Address&lt;/span&gt;&lt;span style='color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue;background:aqua;mso-highlight:aqua'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515;
background:aqua;mso-highlight:aqua'&gt;a:ReferenceParameters&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue;background:aqua;
mso-highlight:aqua'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue;background:aqua;mso-highlight:aqua'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515;
background:aqua;mso-highlight:aqua'&gt;Context&lt;/span&gt;&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue;background:aqua;mso-highlight:aqua'&gt; &lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:red;background:aqua;
mso-highlight:aqua'&gt;xmlns&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";
color:blue;background:aqua;mso-highlight:aqua'&gt;=&lt;/span&gt;&lt;span style='font-size:
10.0pt;font-family:"Courier New";background:aqua;mso-highlight:aqua'&gt;"&lt;span style='color:blue'&gt;http://schemas.microsoft.com/ws/2006/05/context&lt;/span&gt;"&lt;span style='color:blue'&gt;/&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue;background:aqua;mso-highlight:aqua'&gt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515;
background:aqua;mso-highlight:aqua'&gt;a:ReferenceParameters&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue;background:aqua;
mso-highlight:aqua'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue;background:aqua;mso-highlight:aqua'&gt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515;
background:aqua;mso-highlight:aqua'&gt;CallbackEndpointReference&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue;background:aqua;
mso-highlight:aqua'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue;background:aqua;mso-highlight:aqua'&gt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515;
background:aqua;mso-highlight:aqua'&gt;CallbackContext&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue;background:aqua;
mso-highlight:aqua'&gt;&gt;&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";
color:blue'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515'&gt;a:To&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:red'&gt;s:mustUnderstand&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;"&lt;span style='color:blue'&gt;1&lt;/span&gt;"&lt;span style='color:blue'&gt;&gt;&lt;/span&gt;http://localhost:8975/&lt;span style='color:blue'&gt;&lt;/span&gt;&lt;span style='color:#A31515'&gt;a:To&lt;/span&gt;&lt;span style='color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515'&gt;s:Header&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:
10.0pt;font-family:"Courier New";color:#A31515'&gt;s:Body&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515'&gt;string&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:red'&gt;xmlns&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;"&lt;span style='color:blue'&gt;http://schemas.microsoft.com/2003/10/Serialization/&lt;/span&gt;"&lt;span style='color:blue'&gt;/&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:10.0pt;
font-family:"Courier New";color:blue'&gt;&lt;/span&gt; &lt;span style='font-size:10.0pt;font-family:"Courier New";color:#A31515'&gt;s:Body&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:"Courier New";
color:blue'&gt;&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";
color:#A31515'&gt;s:Envelope&lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New";
color:blue'&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
On the server side, you can pick up the CallBackContext from the Message Properties
and use it for call-backs. So far I have shown kind of a manual way of dealing with
callback context. Workflow services in .Net 4 along with correlation feature has really
simplified all this and you never need to muck with &lt;span style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'&gt;CallbackContextMessageProperty &lt;/span&gt;etc.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
In your client workflow, simply make sure you have an active correlation handle on
your send activity and then use a binding capable of transporting callback context
(e.g. wsHttpContextBinding mentioned earlier)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
In your server side workflow, simply make sure that Receive and Send (used for callback)
activities are correlated either using implicitly or explicit correlation and that’s
it.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:10.0pt;font-family:"Segoe UI","sans-serif";
color:#595959'&gt;&lt;img border=0 width=271 height=302 id="Picture x0020 3" src="http://www.zamd.net/content/binary/image005.jpg"&gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
You don’t need to specify Endpoint Address on your Send activity and it will automatically
pick it from CallbackContext.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;/div&gt;

</description>
      <comments>http://www.zamd.net/CommentView,guid,23054c39-05ca-4e25-97b2-bf35f95957f1.aspx</comments>
      <category>WF 4</category>
    </item>
    <item>
      <trackback:ping>http://www.zamd.net/Trackback.aspx?guid=90d7d979-483c-4066-8c91-a51a7ddced95</trackback:ping>
      <pingback:server>http://www.zamd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.zamd.net/PermaLink,guid,90d7d979-483c-4066-8c91-a51a7ddced95.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.zamd.net/CommentView,guid,90d7d979-483c-4066-8c91-a51a7ddced95.aspx</wfw:comment>
      <wfw:commentRss>http://www.zamd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=90d7d979-483c-4066-8c91-a51a7ddced95</wfw:commentRss>
      <title>Pass-through SAML tokens &amp; Secure Conversation (Part2)</title>
      <guid isPermaLink="false">http://www.zamd.net/PermaLink,guid,90d7d979-483c-4066-8c91-a51a7ddced95.aspx</guid>
      <link>http://www.zamd.net/2009/06/07/PassthroughSAMLTokensSecureConversationPart2.aspx</link>
      <pubDate>Sun, 07 Jun 2009 13:05:57 GMT</pubDate>
      <description>

&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
Few people have contacted me regarding follow-up on my &lt;a href="http://www.zamd.net/2009/05/08/PassthroughSAMLTokensSecureConversationPart1.aspx"&gt;last&lt;/a&gt; post
so this post continues where the last one left off. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
To keep the API simple, I have created few extension methods. Let&amp;#8217;s first review
these.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New";
color:blue'&gt;public&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;static&lt;/span&gt; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;Extensions&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;static&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; EnableSamlTokenCaching(&lt;span style='color:blue'&gt;this&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ServiceHostBase&lt;/span&gt; source)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; orignal
= source.Description.Behaviors.Remove&amp;lt;&lt;span style='color:#2B91AF'&gt;ServiceCredentials&lt;/span&gt;&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
source.Description.Behaviors.Add(&lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ServiceCredentialsEx&lt;/span&gt;(orignal));&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;static&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SamlSecurityToken&lt;/span&gt; GetIncommingSamlToken(&lt;span style='color:blue'&gt;this&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ServiceSecurityContext&lt;/span&gt; source)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; policy
= source.AuthorizationPolicies.OfType&amp;lt;&lt;span style='color:#2B91AF'&gt;SamlTokenCachingPolicy&lt;/span&gt;&amp;gt;().FirstOrDefault();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;if&lt;/span&gt; (policy
!= &lt;span style='color:blue'&gt;null&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&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 style='color:blue'&gt;return&lt;/span&gt; policy.IncommingSamlToken;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:blue'&gt;null&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;static&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; EnableSamlTokenFlow&amp;lt;TChannel&amp;gt;(&lt;span style='color:blue'&gt;this&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ClientBase&lt;/span&gt;&amp;lt;TChannel&amp;gt;
source, &lt;span style='color:#2B91AF'&gt;SamlSecurityToken&lt;/span&gt; tokenToFlow) &lt;span style='color:blue'&gt;where&lt;/span&gt; TChannel
: &lt;span style='color:blue'&gt;class&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; orignal
= source.Endpoint.Behaviors.Remove&amp;lt;&lt;span style='color:#2B91AF'&gt;ClientCredentials&lt;/span&gt;&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
source.Endpoint.Behaviors.Add(&lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ClientCredentialsWrapper&lt;/span&gt;(orignal));&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;line-height:115%;font-family:
"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;b&gt;&lt;span style='font-size:8.0pt;line-height:115%;font-family:
"Courier New"'&gt;EnableSamlTokenCaching &lt;/span&gt;&lt;/b&gt;is
what you have to call to enable SAML token caching functionality for a particular &lt;i&gt;ServiceHost&lt;/i&gt;.
Here is an example of a simple host (created using a custom factory (IIS/WAS hosted
scenario)) being configured with this API&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New";
color:blue'&gt;public&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;EchoServiceHostFactory&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;ServiceHostFactoryBase&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;override&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ServiceHostBase&lt;/span&gt; CreateServiceHost(&lt;span style='color:blue'&gt;string&lt;/span&gt; constructorString, &lt;span style='color:#2B91AF'&gt;Uri&lt;/span&gt;[]
baseAddresses)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; sh
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ServiceHost&lt;/span&gt;(&lt;span style='color:blue'&gt;typeof&lt;/span&gt;(&lt;span style='color:#2B91AF'&gt;EchoService&lt;/span&gt;),
baseAddresses);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='background:yellow;mso-highlight:yellow'&gt;sh.EnableSamlTokenCaching();&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;return&lt;/span&gt; sh;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;line-height:115%;font-family:
"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
The highlighted call simply injects couple of customized components (interceptors)
into WCF&amp;#8217;s security framework. Specifically it is injecting a new customized &lt;span style='font-size:8.0pt;line-height:115%;
font-family:"Courier New";color:#2B91AF'&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.identitymodel.selectors.samlsecuritytokenauthenticator.aspx"&gt;SamlSecurityTokenAuthenticator&lt;/a&gt;&lt;/span&gt;,
which wraps the original authenticator and simply delegates all calls to it.&amp;nbsp; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;line-height:115%;font-family:
"Courier New";color:#2B91AF'&gt;SamlSecurityTokenAuthenticator &lt;/span&gt;is
called during secure conversation handshake. Here our custom authenticator (SamlSecurityTokenAuthenticatorEx&lt;span style='font-size:8.0pt;line-height:115%;font-family:"Courier New";color:#2B91AF'&gt;)&lt;/span&gt; enables
us to get hold of the incoming SAML token etc.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New";
color:blue'&gt;public&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ServiceCredentialsEx&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;ServiceCredentials&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; ServiceCredentialsEx(&lt;span style='color:#2B91AF'&gt;ServiceCredentials&lt;/span&gt; other)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: &lt;span style='color:blue'&gt;base&lt;/span&gt;(other){}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;override&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SecurityTokenManager&lt;/span&gt; CreateSecurityTokenManager()&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF;background:lime;mso-highlight:lime'&gt;ServiceCredentialsSecurityTokenManagerEx&lt;/span&gt;(&lt;span style='color:blue'&gt;this&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;protected&lt;/span&gt; &lt;span style='color:blue'&gt;override&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ServiceCredentials&lt;/span&gt; CloneCore()&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ServiceCredentialsEx&lt;/span&gt;(&lt;span style='color:blue'&gt;this&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New";
color:blue'&gt;public&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ServiceCredentialsSecurityTokenManagerEx&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;ServiceCredentialsSecurityTokenManager&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; ServiceCredentialsSecurityTokenManagerEx(&lt;span style='color:#2B91AF'&gt;ServiceCredentials&lt;/span&gt; parent)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: &lt;span style='color:blue'&gt;base&lt;/span&gt;(parent){}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;override&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SecurityTokenAuthenticator&lt;/span&gt; CreateSecurityTokenAuthenticator(&lt;span style='color:#2B91AF'&gt;SecurityTokenRequirement&lt;/span&gt; tokenRequirement, &lt;span style='color:blue'&gt;out&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SecurityTokenResolver&lt;/span&gt; outOfBandTokenResolver)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; authenticator
= &lt;span style='color:blue'&gt;base&lt;/span&gt;.CreateSecurityTokenAuthenticator(tokenRequirement, &lt;span style='color:blue'&gt;out&lt;/span&gt; outOfBandTokenResolver);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;if&lt;/span&gt; (authenticator &lt;span style='color:blue'&gt;is&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SamlSecurityTokenAuthenticator&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&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 style='color:blue;background:lime;mso-highlight:lime'&gt;return&lt;/span&gt;&lt;span style='background:lime;mso-highlight:lime'&gt; &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SamlSecurityTokenAuthenticatorEx&lt;/span&gt;((&lt;span style='color:#2B91AF'&gt;SamlSecurityTokenAuthenticator&lt;/span&gt;)authenticator);&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;return&lt;/span&gt; authenticator;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;line-height:115%;font-family:
"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Inside SamlSecurityTokenAuthenticatorEx, I&amp;#8217;m simply creating an additional token
caching policy and&amp;nbsp;&amp;nbsp; adding it to the collection of policies created by
default SAML token authenticator.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New";
color:blue'&gt;public&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SamlSecurityTokenAuthenticatorEx&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;SamlSecurityTokenAuthenticator&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;SamlSecurityTokenAuthenticator&lt;/span&gt; wrapped;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; SamlSecurityTokenAuthenticatorEx(&lt;span style='color:#2B91AF'&gt;SamlSecurityTokenAuthenticator&lt;/span&gt; wrapped)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: &lt;span style='color:blue'&gt;base&lt;/span&gt;(&lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;List&lt;/span&gt;&amp;lt;&lt;span style='color:#2B91AF'&gt;SecurityTokenAuthenticator&lt;/span&gt;&amp;gt;())&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;this&lt;/span&gt;.wrapped
= wrapped;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;protected&lt;/span&gt; &lt;span style='color:blue'&gt;override&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ReadOnlyCollection&lt;/span&gt;&amp;lt;&lt;span style='color:#2B91AF'&gt;IAuthorizationPolicy&lt;/span&gt;&amp;gt;
ValidateTokenCore(&lt;span style='color:#2B91AF'&gt;SecurityToken&lt;/span&gt; token)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; orignalPolicies
= wrapped.ValidateToken(token);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;List&lt;/span&gt;&amp;lt;&lt;span style='color:#2B91AF'&gt;IAuthorizationPolicy&lt;/span&gt;&amp;gt;
finalPolicies = &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;List&lt;/span&gt;&amp;lt;&lt;span style='color:#2B91AF'&gt;IAuthorizationPolicy&lt;/span&gt;&amp;gt;(orignalPolicies);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='background:lime;mso-highlight:lime'&gt;finalPolicies.Add(&lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SamlTokenCachingPolicy&lt;/span&gt;((&lt;span style='color:#2B91AF'&gt;SamlSecurityToken&lt;/span&gt;)token));&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;return&lt;/span&gt; finalPolicies.AsReadOnly();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;line-height:115%;font-family:
"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
My &lt;span style='font-size:8.0pt;line-height:115%;font-family:
"Courier New";color:#2B91AF'&gt;SamlTokenCachingPolicy &lt;/span&gt;is
just a wrapped around the cached token.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New";
color:blue'&gt;public&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SamlTokenCachingPolicy&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;IAuthorizationPolicy&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;const&lt;/span&gt; &lt;span style='color:blue'&gt;string&lt;/span&gt; PolicyID
= &lt;span style='color:#A31515'&gt;&amp;quot;{32835E28-3ED4-42d4-A2EA-FA71E13AF51F}&amp;quot;&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; SamlTokenCachingPolicy(&lt;span style='color:#2B91AF'&gt;SamlSecurityToken&lt;/span&gt; token)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;this&lt;/span&gt;.IncommingSamlToken
= token;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;bool&lt;/span&gt; Evaluate(&lt;span style='color:#2B91AF'&gt;EvaluationContext&lt;/span&gt; evaluationContext, &lt;span style='color:blue'&gt;ref&lt;/span&gt; &lt;span style='color:blue'&gt;object&lt;/span&gt; state)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:blue'&gt;true&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ClaimSet&lt;/span&gt; Issuer&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;get&lt;/span&gt; { &lt;span style='color:blue'&gt;throw&lt;/span&gt; &lt;span style='color:blue'&gt;new&lt;/span&gt; System.&lt;span style='color:#2B91AF'&gt;NotImplementedException&lt;/span&gt;();
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;string&lt;/span&gt; Id&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;get&lt;/span&gt; { &lt;span style='color:blue'&gt;return&lt;/span&gt; PolicyID;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SamlSecurityToken&lt;/span&gt; IncommingSamlToken
{ &lt;span style='color:blue'&gt;get&lt;/span&gt;; &lt;span style='color:blue'&gt;private&lt;/span&gt; &lt;span style='color:blue'&gt;set&lt;/span&gt;;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;line-height:115%;font-family:
"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
IAuthorizationPolicy model nicely aligns with WCF security framework (so I have used
it here). If you are not comfortable with this approach, you could get the same results
by choosing a different caching strategy.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Inside your service method you can get hold of the incoming SAML token using following
piece of code.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;[&lt;span style='color:#2B91AF'&gt;ServiceBehavior&lt;/span&gt;(AddressFilterMode
= &lt;span style='color:#2B91AF'&gt;AddressFilterMode&lt;/span&gt;.Prefix)]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New";
color:blue'&gt;public&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;class&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;EchoService&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;IEchoService&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;string&lt;/span&gt; Echo(&lt;span style='color:blue'&gt;string&lt;/span&gt; input)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:green'&gt;//
Get token from incoming security context..&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; samlToken
= &lt;span style='color:#2B91AF;
background:yellow;mso-highlight:yellow'&gt;OperationContext&lt;/span&gt;&lt;span style='background:yellow;mso-highlight:yellow'&gt;.Current.ServiceSecurityContext.GetIncommingSamlToken();&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;line-height:115%;font-family:
"Courier New"'&gt;}&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;b&gt;GetIncommingSamlToken &lt;/b&gt;is again an extension which extracts the actual token
from my custom AuthorizationPolicy(&lt;span style='font-size:8.0pt;line-height:115%;font-family:"Courier New";color:#2B91AF'&gt;SamlTokenCachingPolicy)&lt;/span&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;static&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;SamlSecurityToken&lt;/span&gt; GetIncommingSamlToken(&lt;span style='color:blue'&gt;this&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ServiceSecurityContext&lt;/span&gt; source)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; policy
= &lt;span style='background:yellow;
mso-highlight:yellow'&gt;source.AuthorizationPolicies.OfType&amp;lt;&lt;span style='color:#2B91AF'&gt;SamlTokenCachingPolicy&lt;/span&gt;&amp;gt;().FirstOrDefault();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New";
background:yellow;mso-highlight:yellow'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;if&lt;/span&gt; (policy
!= &lt;span style='color:blue'&gt;null&lt;/span&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New";
background:yellow;mso-highlight:yellow'&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 style='color:blue'&gt;return&lt;/span&gt; policy.IncommingSamlToken;&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:blue'&gt;null&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
normal;text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Oh, this post is already way too long. Probably next time I will show you, how to
pass this token to backend services (sharing the same certificate). &lt;span style='font-size:8.0pt;line-height:115%;font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;

</description>
      <comments>http://www.zamd.net/CommentView,guid,90d7d979-483c-4066-8c91-a51a7ddced95.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.zamd.net/Trackback.aspx?guid=2981a151-bb26-4b28-9cfa-4083fd7e480c</trackback:ping>
      <pingback:server>http://www.zamd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.zamd.net/PermaLink,guid,2981a151-bb26-4b28-9cfa-4083fd7e480c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.zamd.net/CommentView,guid,2981a151-bb26-4b28-9cfa-4083fd7e480c.aspx</wfw:comment>
      <wfw:commentRss>http://www.zamd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=2981a151-bb26-4b28-9cfa-4083fd7e480c</wfw:commentRss>
      <title>Duplex communication with .Net 3.5 Workflow Services</title>
      <guid isPermaLink="false">http://www.zamd.net/PermaLink,guid,2981a151-bb26-4b28-9cfa-4083fd7e480c.aspx</guid>
      <link>http://www.zamd.net/2009/06/05/DuplexCommunicationWithNet35WorkflowServices.aspx</link>
      <pubDate>Fri, 05 Jun 2009 21:28:52 GMT</pubDate>
      <description>

&lt;div class=Section1&gt;
&lt;p class=MsoNormal&gt;
Workflow Services was introduced as part of .Net 3.5 and enables us to use WF workflows
as implementation of our WCF services. Workflows are long running by nature so the
usual WCF duplex messaging constructs (where correlation between client &amp;amp; server
is done based on actual physical connection/socket) are not suitable for most cases.
Primarily because it is simply not possible or practical to keep a socket open until
workflow finishes its processing (which could potentially take days to produce any
meaningful response).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
So channel based WCF duplex messaging is not good for long running scenarios. So how
can we achieve duplex messaging in long running world?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
The general guidance is to use an explicit callback channel (sometime known as &amp;#8220;back
channel&amp;#8221;) for notifications. You can argue that addressability of the client
(who may be behind NAT/Firewall) is a real blocker for explicit back channel &amp;amp;
I totally agree. However with Relay technologies like &lt;a href="http://www.microsoft.com/azure/netservices.mspx"&gt;.Net
Service Bus&lt;/a&gt;, reaching to the client endpoints is not an issue anymore hence explicit
back channel is much more practical/feasible option now.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Anyways in this post I will show you, how we can achieve durable duplex messaging
using Workflow Services. Here is a basic scenario:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;img border=0 width=603 height=165 id="Object x0020 2" src="http://www.zamd.net/content/binary/image00112345.png"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Frond end service (orange box) is a long running workflow service &amp;#8211; actual service
implementation is a WF workflow so it can go idle, persist, sit in the database &amp;amp;
brought back into memory if and when needed (all the usual stuff). 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Now with above setup if we do usual request-reply messaging &amp;#8211; Send activity
will simply wait for the reply, workflow will stay in memory &amp;amp; ultimately underlying
WCF call will timeout and bad things will happen (workflow might terminate etc).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
So first change we have to do is to move the &amp;#8220;wait for reply logic&amp;#8221; out
of the workflow into the host. With this change workflow can go idle, persist and
ultimately gets unloaded while host is still listening for the response. On the response,
host can bring workflow back into memory and resume the execution.&amp;nbsp; Important
takeaway is that we don&amp;#8217;t have to do all this ourselves. Workflow Services &amp;amp;
associated &amp;#8220;context-exchange protocol&amp;#8221; can do most of this for us. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Following is the implementation of front end service...&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal align=center style='text-align:center'&gt;
&lt;img border=0 width=216 height=420 id="Picture x0020 2" src="http://www.zamd.net/content/binary/image002123.png"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Dowork is a one-way call. As part of Dowork I&amp;#8217;m also passing &lt;b&gt;instanceId&lt;/b&gt; of
the current workflow along with a callback address (using the standard WS-Addressing &lt;b&gt;ReplyTo&lt;/b&gt; header
- for protocol purists: this might not be the correct use of &lt;b&gt;ReplyTo&lt;/b&gt; header
but I&amp;#8217;m using it here to keep things simple). So essentially I&amp;#8217;m saying
&amp;#8220;please call me back on this number, when you are done.&amp;#8221; &lt;span style='font-family:Wingdings'&gt;J&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&amp;nbsp;Dowork call returns immediately by triggering long running work in the Backend
service. Workflow will become idle &amp;amp; can potentially persist. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
To override the value of default replyTo header, I have created a simple message inspector.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";color:blue'&gt;class&lt;/span&gt;&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:#2B91AF'&gt;ReplyToInspector&lt;/span&gt; : &lt;span style='color:#2B91AF'&gt;IClientMessageInspector&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;EndpointAddress&lt;/span&gt; replyTo;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; ReplyToInspector(&lt;span style='color:#2B91AF'&gt;EndpointAddress&lt;/span&gt; replyTo)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;this&lt;/span&gt;.replyTo
= replyTo;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
#region&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt; IClientMessageInspector
Members&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; AfterReceiveReply(&lt;span style='color:blue'&gt;ref&lt;/span&gt; System.ServiceModel.Channels.&lt;span style='color:#2B91AF'&gt;Message&lt;/span&gt; reply, &lt;span style='color:blue'&gt;object&lt;/span&gt; correlationState)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;public&lt;/span&gt; &lt;span style='color:blue'&gt;object&lt;/span&gt; BeforeSendRequest(&lt;span style='color:blue'&gt;ref&lt;/span&gt; System.ServiceModel.Channels.&lt;span style='color:#2B91AF'&gt;Message&lt;/span&gt; request, &lt;span style='color:#2B91AF'&gt;IClientChannel&lt;/span&gt; channel)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
request.Headers.ReplyTo = replyTo;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;return&lt;/span&gt; &lt;span style='color:blue'&gt;null&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
#endregion&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
And this can be configured in config file as:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'&gt;endpointBehaviors&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:blue'&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'&gt;behavior&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:red'&gt;name&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;quot;&lt;span style='color:
blue'&gt;reply&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";color:blue'&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;&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'&gt;replyTo&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:blue'&gt; &lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:red'&gt;address&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:blue'&gt;=&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;&amp;quot;&lt;span style='color:
blue'&gt;http://localhost:43211/Callback/&lt;/span&gt;&amp;quot;&lt;span style='color:blue'&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'&gt;behavior&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:blue'&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New";
color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:#A31515'&gt;endpointBehaviors&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New";color:blue'&gt;&amp;gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Backend service is standard WCF service &amp;#8211; doing callbacks using the usual ChannelFactory
stuff. The important bit (highlighted) is the explicit context management.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";color:blue'&gt;public&lt;/span&gt;&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; Dowork(&lt;span style='color:#2B91AF'&gt;Guid&lt;/span&gt; instanceId)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;Console&lt;/span&gt;.WriteLine(&lt;span style='color:#A31515'&gt;&amp;quot;Doing
long running work...&amp;quot;&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;for&lt;/span&gt; (&lt;span style='color:blue'&gt;int&lt;/span&gt; i
= 0; i &amp;lt; 10; i++)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;Console&lt;/span&gt;.Write(&lt;span style='color:#A31515'&gt;&amp;quot;...&amp;quot;&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;Thread&lt;/span&gt;.Sleep(1000);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;Console&lt;/span&gt;.WriteLine();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;try&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;Console&lt;/span&gt;.WriteLine(&lt;span style='color:#A31515'&gt;&amp;quot;Sending
response...&amp;quot;&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
SendResults(instanceId, &lt;span style='color:#2B91AF'&gt;OperationContext&lt;/span&gt;.Current.IncomingMessageHeaders.ReplyTo);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;catch&lt;/span&gt; (&lt;span style='color:#2B91AF'&gt;Exception&lt;/span&gt; exp)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;Console&lt;/span&gt;.WriteLine(&lt;span style='color:#A31515'&gt;&amp;quot;Failed:
&amp;quot;&lt;/span&gt; + exp.ToString());&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";color:blue'&gt;private&lt;/span&gt;&lt;span style='font-size:
8.0pt;font-family:"Courier New"'&gt; &lt;span style='color:blue'&gt;void&lt;/span&gt; SendResults(&lt;span style='color:#2B91AF'&gt;Guid&lt;/span&gt; instanceId, &lt;span style='color:#2B91AF'&gt;EndpointAddress&lt;/span&gt; remoteAddress)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; binding
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;BasicHttpContextBinding&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; cf
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ChannelFactory&lt;/span&gt;&amp;lt;&lt;span style='color:#2B91AF'&gt;IBackendCallback&lt;/span&gt;&amp;gt;(binding,
remoteAddress);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; proxy
= cf.CreateChannel();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; cc
= proxy &lt;span style='color:blue'&gt;as&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;IContextChannel&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue;
background:yellow;mso-highlight:yellow'&gt;using&lt;/span&gt;&lt;span style='background:
yellow;mso-highlight:yellow'&gt; (&lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;OperationContextScope&lt;/span&gt;(cc))&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";background:yellow;mso-highlight:yellow'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";background:yellow;mso-highlight:yellow'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; cmp
= &lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;ContextMessageProperty&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";background:yellow;mso-highlight:yellow'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:blue'&gt;var&lt;/span&gt; cm
= cc.GetProperty&amp;lt;&lt;span style='color:#2B91AF'&gt;IContextManager&lt;/span&gt;&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";background:yellow;mso-highlight:yellow'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";background:yellow;mso-highlight:yellow'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
cm.Enabled = &lt;span style='color:blue'&gt;false&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";background:yellow;mso-highlight:yellow'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
cmp.Context[&lt;span style='color:#A31515'&gt;&amp;quot;instanceId&amp;quot;&lt;/span&gt;] = instanceId.ToString();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";background:yellow;mso-highlight:yellow'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";background:yellow;mso-highlight:yellow'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New";background:yellow;mso-highlight:yellow'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style='color:#2B91AF'&gt;OperationContext&lt;/span&gt;.Current.OutgoingMessageProperties.Add(&lt;span style='color:#2B91AF'&gt;ContextMessageProperty&lt;/span&gt;.Name,
cmp);&lt;/span&gt;&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
proxy.LongRunningOperationCompleted(&lt;span style='color:blue'&gt;new&lt;/span&gt; &lt;span style='color:#2B91AF'&gt;OperationOutput&lt;/span&gt; {
Id = 22, Status = &lt;span style='color:#A31515'&gt;&amp;quot;Done..&amp;quot;&lt;/span&gt; });&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style='text-autospace:none'&gt;
&lt;span style='font-size:8.0pt;
font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='font-size:8.0pt;font-family:"Courier New"'&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
In Dowork, I&amp;#8217;m passing instanceId as method&amp;#8217;s signature however you can
easily pass this data as part of context header (remmeber context header is property
bag -- IDictionary&amp;lt;string,string&amp;gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
In the SendResults &amp;#8211; I&amp;#8217;m creating approparite context header &amp;#8211; so
that WorflowServiceHost can connect this callback to the correct instance &amp;amp; correct
activity inside that instance. WorkflowServiceHost will also load the workflow if
it got persisted.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
I&amp;#8217;m attaching complete solution with this. In next post, I will talk about durable
messaging enhancements added in .Net 4.0 Beta 1. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
Stay tuned...&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;span style='color:#1F497D'&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Download: &lt;a href="http://www.zamd.net/content/binary/DurableMessaging.zip"&gt;DurableMessaging.zip&lt;/a&gt;
&lt;br&gt;
&lt;/p&gt;</description>
      <comments>http://www.zamd.net/CommentView,guid,2981a151-bb26-4b28-9cfa-4083fd7e480c.aspx</comments>
      <category>WF</category>
    </item>
  </channel>
</rss>