<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>All About Interop : WCF</title><link>http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx</link><description>Tags: WCF</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Enable .NET 3.5 goodies in IIS vdir</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/12/05/enable-net-3-5-goodies-in-asp-net-vdir.aspx</link><pubDate>Fri, 05 Dec 2008 20:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9156090</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/9156090.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=9156090</wfw:commentRss><description>&lt;P&gt;Some of you may be oddballs like me:&amp;nbsp; you like .NET, you program in .NET, but you don't always use Visual Studio.&amp;nbsp;&amp;nbsp; You hand-code everything for some applications.&amp;nbsp; You often open up a text editor and just start writing a source module, with no wizards, no project templates, etc.&amp;nbsp; You hand-code your MSbuild files.&amp;nbsp; You hand-code your web.config files. &lt;/P&gt;
&lt;P&gt;Oddballs like us cannot rely on the code-generation that comes with Visual Studio.&amp;nbsp; So when we write a new ASP.NET application, and we want to use the .NET 3.5 goodies in that app - things like var types, and LINQ - we need to explicitly specify that we want .NET 3.5 compilation.&amp;nbsp; Same is true if you are writing a WCF service and want to use REST or any of the var types or LINQ. &lt;/P&gt;
&lt;P&gt;I've done this twice now and had to search for the way to do it both times.&amp;nbsp; I'm putting here as a "note to self" and also as a reference for anyone else.&amp;nbsp; These are the custom magic incantations for web.config, if you want to enable .NET 3.5 in your ASP.NET app, or in your WCF Service - eg, the cool REST stuff from .NET 3.5.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;&lt;PRE&gt;&amp;lt;&lt;SPAN style="COLOR: #a020f0"&gt;?xml&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;version&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"1.0"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;encoding&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"utf-8"&lt;/SPAN&gt;?&amp;gt;
&amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;configuration&lt;/SPAN&gt;&amp;gt;

  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;system.web&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;compilation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;debug&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"false"&lt;/SPAN&gt;&amp;gt;  
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;assemblies&lt;/SPAN&gt;&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;add&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;assembly&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;add&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;assembly&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;add&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;assembly&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;add&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;assembly&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"&lt;/SPAN&gt;/&amp;gt;  
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;assemblies&lt;/SPAN&gt;&amp;gt;  
    &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;compilation&lt;/SPAN&gt;&amp;gt;  
  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;system.web&lt;/SPAN&gt;&amp;gt;


  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;system.codedom&lt;/SPAN&gt;&amp;gt;  
    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;compilers&lt;/SPAN&gt;&amp;gt;  
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;compiler&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;language&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"c#;cs;csharp"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;extension&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;".cs"&lt;/SPAN&gt;   
                &lt;SPAN style="COLOR: #b8860b"&gt;type&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&lt;/SPAN&gt;   
                &lt;SPAN style="COLOR: #b8860b"&gt;warningLevel&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"4"&lt;/SPAN&gt;&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;providerOption&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"CompilerVersion"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;value&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"v3.5"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;providerOption&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"WarnAsError"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;value&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"false"&lt;/SPAN&gt;/&amp;gt;  
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;compiler&lt;/SPAN&gt;&amp;gt;  
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;compiler&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;language&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"vb;vbs;visualbasic;vbscript"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;extension&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;".vb"&lt;/SPAN&gt;   
                &lt;SPAN style="COLOR: #b8860b"&gt;type&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&lt;/SPAN&gt;   
                &lt;SPAN style="COLOR: #b8860b"&gt;warningLevel&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"4"&lt;/SPAN&gt;&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;providerOption&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"CompilerVersion"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;value&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"v3.5"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;providerOption&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"OptionInfer"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;value&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"true"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;providerOption&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"WarnAsError"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;value&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"false"&lt;/SPAN&gt;/&amp;gt;  
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;compiler&lt;/SPAN&gt;&amp;gt;  
    &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;compilers&lt;/SPAN&gt;&amp;gt;  
  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;system.codedom&lt;/SPAN&gt;&amp;gt; 

&amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;configuration&lt;/SPAN&gt;&amp;gt;
&lt;/PRE&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9156090" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Not+Really+Interop/default.aspx">Not Really Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/emacs/default.aspx">emacs</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Geneva supports OASIS WS-Trust, SAML</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/11/07/geneva-supports-oasis-ws-trust.aspx</link><pubDate>Fri, 07 Nov 2008 19:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9051139</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/9051139.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=9051139</wfw:commentRss><description>&lt;FONT face=Calibri size=3&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Last week at the PDC 2008, Microsoft released the public beta of “Geneva”.&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;“Geneva” is three things:&lt;/P&gt;
&lt;P class=MsoCommentText style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;STRONG&gt;Geneva Server.&amp;nbsp; &lt;/STRONG&gt;This is a security token service (STS), as defined in the &lt;A class="" href="http://en.wikipedia.org/wiki/WS-Trust" mce_href="http://en.wikipedia.org/wiki/WS-Trust"&gt;OASIS WS-Trust&lt;/A&gt; specification.&amp;nbsp; This thing issues and transforms claims, manages user access, and enables automated federation.&lt;/P&gt;
&lt;P class=MsoCommentText style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;STRONG&gt;Geneva Framework.&amp;nbsp; &lt;/STRONG&gt;This is a managed (.NET) Framework that helps developers build claims-aware applications and services, that connect to the STS.&amp;nbsp; You can use it to process claims&amp;nbsp;on&amp;nbsp;either side of an authorization transaction (requestor or responder).&lt;/P&gt;
&lt;P class=MsoCommentText style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;STRONG&gt;Windows CardSpace Geneva.&amp;nbsp; &lt;/STRONG&gt;This is just an extension of the &lt;A href="http://msdn.microsoft.com/en-us/library/aa480189.aspx"&gt;CardSpace&lt;/A&gt; thing in Windows you know and love today.&amp;nbsp; chances are, you've seen it, but you don't use it. In a nutshell - CardSpace is a set of Windows features and user-interface that lets users navigate access decisions and control how personal information is used. Everyone has multiple claims as part of their identity: you are a student at UW, you are an employee of BigCorp, you are a member in good standing of a particular club, you have received a particular security clearance, You have a bank account with number 4444-444-44 at BigBank, etc. CardSpace lets you decide which of the many &lt;I&gt;claims&lt;/I&gt; you can make about your identity, to disclose to a particular service or server. Rather than disclosing "everything" about you to every server or service, you disclose only what you need to disclose for the particular transaction. That is one aspect of the identity model, and CardSpace is the thing in Windows that makes that possible. &lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;CardSpace technology, and actually, the Identity Metasystem concept, is pretty cool. If you haven't looked at it, you should. &amp;nbsp; The problem with CardSpace and more generally, using claims-based access control (CBAC) in an application, has always been that &lt;B&gt;&lt;I&gt;it was impractical&lt;/I&gt;&lt;/B&gt;. Microsoft delivered a client (CardSpace), but we didn't deliver an STS! And we didn't deliver an easy way for the server to evaluate and verify claims. Therefore developers didn't have an easy way to employ CBAC in their apps. Geneva will change this. &lt;/P&gt;
&lt;P&gt;Now, some of you are thinking, &lt;I&gt;"ok, this sounds interesting but I don't know what you are talking about with this WS-Trust thing and 'claims based access control'&lt;/I&gt;. And I can understand that. Here's the thing - instead of hand-crafting access-control logic into your application, instead of managing your own user list and access control list, you can "outsource" this job to an STS. The &lt;A href="http://msdn.microsoft.com/en-us/library/ms952386.aspx"&gt;Authorization Manager&lt;/A&gt; (sometimes called AzMan) is similar in philosophy, so if you understand the utility of AzMan, then you will get the idea of CBAC. But AzMan is not standards based, not federated, not truly claims-based (it is role based, which is less general than claims-based), and not usable in Web services transactions. Imagine generalizing AzMan and federating it and using only standard protocols, and that's where we're headed with Geneva. You're gonna want to use this. &lt;/P&gt;
&lt;P&gt;I said "Geneva is standards based." The key to standards is support by the vendors, in tools, frameworks, servers, and so on. Currently, WCF from Microsoft supports WS-Trust, as does the WSIT from Sun. WebSphere App Server v7.0 announced support for WS-Trust just last month, but I haven't had the time to test it with Geneva. Not sure of other frameworks. The key is, with Geneva, the server is now here, and people can and will start building on this. I think with the release of the Geneva CTP, we'll start to see broader adoption of WS-Trust and standards-based CBAC among frameworks.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;One last thing to point out: In the cloud, the Microsoft Services Connector and the .NET Access Control Service, both announced at PDC as well, are built on “Geneva” technology and share the same claims architecture. &lt;/P&gt;
&lt;P&gt;More Information:&lt;BR&gt;&lt;SPAN style="MARGIN: 0in 0in 0pt 0.5in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;A href="http://www.identityblog.com/"&gt;Kim Cameron’s blog&lt;/A&gt; &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="MARGIN: 0in 0in 0pt 0.5in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;A href="http://blogs.msdn.com/vbertocci/"&gt;Vittorio Bertocci’s blog&lt;/A&gt; &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="MARGIN: 0in 0in 0pt 0.5in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=122266"&gt;Get the Geneva beta&lt;/A&gt; &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="MARGIN: 0in 0in 0pt 0.5in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;A href="http://www.microsoft.com/geneva"&gt;Single stop resource on Geneva&lt;/A&gt; &lt;/SPAN&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;A list of “Geneva” sessions recordings at PDC:&lt;/P&gt;
&lt;TABLE class="" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class=""&gt;code&lt;/TH&gt;
&lt;TH class=""&gt;Title&lt;/TH&gt;
&lt;TH class=""&gt;Presenter(s)&lt;/TH&gt;
&lt;TH class=""&gt;Link&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;BB11&lt;/TD&gt;
&lt;TD class=""&gt;Identity Roadmap for Software + Services&lt;/TD&gt;
&lt;TD class=""&gt;Kim Cameron and Vittorio Bertocci&lt;/TD&gt;
&lt;TD class=""&gt;&lt;A href="http://channel9.msdn.com/pdc2008/BB11/"&gt;http://channel9.msdn.com/pdc2008/BB11/&lt;/A&gt; &lt;/TD&gt;
&lt;TR&gt;
&lt;TD class=""&gt;BB42&lt;/TD&gt;
&lt;TD class=""&gt;Identity: "Geneva" Server and Framework Overview &lt;/TD&gt;
&lt;TD class=""&gt;Stuart Kwan and Caleb Baker &lt;/TD&gt;
&lt;TD class=""&gt;&lt;A href="http://channel9.msdn.com/pdc2008/BB42/"&gt;http://channel9.msdn.com/pdc2008/BB42/&lt;/A&gt; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;BB43&lt;/TD&gt;
&lt;TD class=""&gt;Identity: "Geneva" Deep Dive &lt;/TD&gt;
&lt;TD class=""&gt;Jan Alexander &lt;/TD&gt;
&lt;TD class=""&gt;&lt;A href="http://channel9.msdn.com/pdc2008/BB43/"&gt;http://channel9.msdn.com/pdc2008/BB43/&lt;/A&gt; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;BB44&lt;/TD&gt;
&lt;TD class=""&gt;Identity: Windows CardSpace "Geneva" Under the Hood &lt;/TD&gt;
&lt;TD class=""&gt;Rich Randall &lt;/TD&gt;
&lt;TD class=""&gt;&lt;A href="http://channel9.msdn.com/pdc2008/BB44/"&gt;http://channel9.msdn.com/pdc2008/BB44/&lt;/A&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9051139" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Websphere/default.aspx">Websphere</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/SAML/default.aspx">SAML</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WS-Trust/default.aspx">WS-Trust</category></item><item><title>REST in WCF: Varying response content type based on HTTP Request Headers</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/11/04/rest-in-wcf-varying-response-content-type-based-on-http-request-headers.aspx</link><pubDate>Wed, 05 Nov 2008 00:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9041661</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/9041661.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=9041661</wfw:commentRss><description>&lt;P&gt;&lt;A class="" href="http://damianblog.com/" mce_href="http://damianblog.com"&gt;Damian Mehers&lt;/A&gt;&amp;nbsp;made a &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/2008/04/03/varying-content-type-according-to-the-url-in-wcf-rest-service.aspx#9027543" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2008/04/03/varying-content-type-according-to-the-url-in-wcf-rest-service.aspx#9027543"&gt;comment&lt;/A&gt; on &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/2008/04/03/varying-content-type-according-to-the-url-in-wcf-rest-service.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2008/04/03/varying-content-type-according-to-the-url-in-wcf-rest-service.aspx"&gt;my blog post from April&lt;/A&gt;, but I felt it was worth a full reblog.&lt;/P&gt;
&lt;P&gt;Damian's used the same WCF extensibility&amp;nbsp;points I used to produce some boilerplate that varies the response content type from JSON to XML, based on the Accept or Content-Type&amp;nbsp;header of the GET request.&amp;nbsp; He extends WebHttpBehavior to return an IDispatchMessageFormatter that does either JSON or XML. &lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;WebHttpBehavior2Ex&lt;/SPAN&gt; : &lt;SPAN style="COLOR: #2b91af"&gt;WebHttpBehavior&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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: #2b91af"&gt;IDispatchMessageFormatter&lt;/SPAN&gt; GetReplyDispatchFormatter(&lt;SPAN style="COLOR: #2b91af"&gt;OperationDescription&lt;/SPAN&gt; operationDescription, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&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;ServiceEndpoint&lt;/SPAN&gt; endpoint)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;WebGetAttribute&lt;/SPAN&gt; webGetAttribute = operationDescription.Behaviors.Find&amp;lt;&lt;SPAN style="COLOR: #2b91af"&gt;WebGetAttribute&lt;/SPAN&gt;&amp;gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;DynamicResponseTypeAttribute&lt;/SPAN&gt; mapAcceptedContentTypeToResponseEncodingAttribute = &lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; operationDescription.Behaviors.Find&amp;lt;&lt;SPAN style="COLOR: #2b91af"&gt;DynamicResponseTypeAttribute&lt;/SPAN&gt;&amp;gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; (webGetAttribute != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt; &amp;amp;&amp;amp; mapAcceptedContentTypeToResponseEncodingAttribute != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;) {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: green"&gt;// We need two formatters, since we don't know what type we will need until runtime&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; webGetAttribute.ResponseFormat = &lt;SPAN style="COLOR: #2b91af"&gt;WebMessageFormat&lt;/SPAN&gt;.Json;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: #2b91af"&gt;IDispatchMessageFormatter&lt;/SPAN&gt; jsonDispatchMessageFormatter = &lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;base&lt;/SPAN&gt;.GetReplyDispatchFormatter(operationDescription, endpoint);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; webGetAttribute.ResponseFormat = &lt;SPAN style="COLOR: #2b91af"&gt;WebMessageFormat&lt;/SPAN&gt;.Xml;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: #2b91af"&gt;IDispatchMessageFormatter&lt;/SPAN&gt; xmlDispatchMessageFormatter = &lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;base&lt;/SPAN&gt;.GetReplyDispatchFormatter(operationDescription, endpoint);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &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;DynamicFormatter&lt;/SPAN&gt;() { &lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; jsonDispatchMessageFormatter = jsonDispatchMessageFormatter, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; xmlDispatchMessageFormatter = xmlDispatchMessageFormatter };&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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;base&lt;/SPAN&gt;.GetReplyDispatchFormatter(operationDescription, endpoint);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;And then in the DynamicFormatter code, he just picks the formatter as appropriate: &lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;DynamicFormatter&lt;/SPAN&gt; : &lt;SPAN style="COLOR: #2b91af"&gt;IDispatchMessageFormatter&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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;IDispatchMessageFormatter&lt;/SPAN&gt; jsonDispatchMessageFormatter { &lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR: blue"&gt;set&lt;/SPAN&gt;; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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;IDispatchMessageFormatter&lt;/SPAN&gt; xmlDispatchMessageFormatter { &lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR: blue"&gt;set&lt;/SPAN&gt;; }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; DeserializeRequest(System.ServiceModel.Channels.&lt;SPAN style="COLOR: #2b91af"&gt;Message&lt;/SPAN&gt; message, &lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;[] parameters)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; System.ServiceModel.Channels.&lt;SPAN style="COLOR: #2b91af"&gt;Message&lt;/SPAN&gt; SerializeReply(&lt;SPAN style="COLOR: #2b91af"&gt;MessageVersion&lt;/SPAN&gt; messageVersion, &lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;[] parameters, &lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt; result)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Message&lt;/SPAN&gt; request = &lt;SPAN style="COLOR: #2b91af"&gt;OperationContext&lt;/SPAN&gt;.Current.RequestContext.RequestMessage;&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// This code is based on ContentTypeBasedDispatch example in WCF REST Starter Kit Samples&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// It calls either &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;HttpRequestMessageProperty&lt;/SPAN&gt; prop = (&lt;SPAN style="COLOR: #2b91af"&gt;HttpRequestMessageProperty&lt;/SPAN&gt;)request.Properties[&lt;SPAN style="COLOR: #2b91af"&gt;HttpRequestMessageProperty&lt;/SPAN&gt;.Name];&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; accepts = prop.Headers[&lt;SPAN style="COLOR: #2b91af"&gt;HttpRequestHeader&lt;/SPAN&gt;.Accept];&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; (accepts != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (accepts.Contains(&lt;SPAN style="COLOR: #a31515"&gt;"text/xml"&lt;/SPAN&gt;) || accepts.Contains(&lt;SPAN style="COLOR: #a31515"&gt;"application/xml"&lt;/SPAN&gt;))&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;return&lt;/SPAN&gt; xmlDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (accepts.Contains(&lt;SPAN style="COLOR: #a31515"&gt;"application/json"&lt;/SPAN&gt;))&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;return&lt;/SPAN&gt; jsonDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; contentType = prop.Headers[&lt;SPAN style="COLOR: #2b91af"&gt;HttpRequestHeader&lt;/SPAN&gt;.ContentType];&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (contentType != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; (contentType.Contains(&lt;SPAN style="COLOR: #a31515"&gt;"text/xml"&lt;/SPAN&gt;) || contentType.Contains(&lt;SPAN style="COLOR: #a31515"&gt;"application/xml"&lt;/SPAN&gt;))&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; xmlDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;/P&gt;
&lt;P style="MARGIN: 0px"&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;else&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (contentType.Contains(&lt;SPAN style="COLOR: #a31515"&gt;"application/json"&lt;/SPAN&gt;))&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; jsonDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;/P&gt;
&lt;P style="MARGIN: 0px"&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; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; xmlDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/DIV&gt;
&lt;P mce_keep="true"&gt;It's pretty nifty and it requires no changes to the app logic.&amp;nbsp; You need to use a custom ServiceHost and use a custom attribute on each Operation.&amp;nbsp; Because it uses the HTTP headers and not the URI itself to determine content-type of the response, I think it has some nice benefits over the approach I described in April. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Damian's got a full VS2008 solution will all the boilerplate code.&lt;/P&gt;
&lt;P mce_keep="true"&gt;check it out. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9041661" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx">REST</category></item><item><title>It just got easier to build REST apps in .NET</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/10/29/it-just-got-easier-to-build-rest-apps-in-net.aspx</link><pubDate>Thu, 30 Oct 2008 00:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9023083</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/9023083.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=9023083</wfw:commentRss><description>&lt;P&gt;The REST starter kit that we launched at PDC is now live! ::&amp;nbsp;&lt;A href="http://www.msdn.com/wcf/rest" mce_href="http://www.msdn.com/wcf/rest"&gt;http://www.msdn.com/wcf/rest&lt;/A&gt; . &lt;/P&gt;
&lt;P&gt;The WCF REST Starter Kit is a set of features, Visual Studio templates, samples and guidance that help people build REST apps using WCF.&amp;nbsp; WCF, part of the .NET Framework, got some enhancements for REST support in the .NET&amp;nbsp;3.5 release.&amp;nbsp; This starter kit is a bunch of blueprints and supporting material to make it easier to use what is in the Framework for REST. &lt;/P&gt;
&lt;P&gt;Like, blueprints and guidelines for how to do caching, security, error handling, help page support, conditional PUT, push style streaming, type based dispatch and semi-structured XML support.&amp;nbsp; Whoa! &lt;/P&gt;
&lt;P&gt;The WCF REST Starter Kit also provides Visual Studio templates for creating REST style services such as an Atom feed service, a REST-RPC hybrid service, Resource singleton and collection services and an Atom Publishing Protocol service. In addition, there are samples, documentation and other guidance that help to use these new capabilities. &lt;/P&gt;
&lt;P&gt;The goal is to provide a toolset that simplifies building RESTful services today, and to take feedback from the developer community on the features provided in the WCF REST Starter Kit that will shape future REST capabilities in WCF 4.0. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9023083" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/PHP/default.aspx">PHP</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx">REST</category></item><item><title>Interop sessions at Oracle Open World </title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/26/interop-sessions-at-oracle-open-world.aspx</link><pubDate>Sat, 27 Sep 2008 06:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8967315</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8967315.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8967315</wfw:commentRss><description>&lt;P&gt;Jesus and my collegue Kent Brown both spoke at Oracle Open World recently, on interop between WCF and WebLogic.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://weblogs.asp.net/gsusx/archive/2008/09/19/speaking-at-oracle-open-world.aspx"&gt;http://weblogs.asp.net/gsusx/archive/2008/09/19/speaking-at-oracle-open-world.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;But I found out after the fact! nice!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8967315" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category></item><item><title>WSDL-First in WCF, versus WSDL-First in ASMX</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/25/wsdl-first-in-wcf-versus-wsdl-first-in-asmx.aspx</link><pubDate>Thu, 25 Sep 2008 18:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8964013</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8964013.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8964013</wfw:commentRss><description>&lt;P&gt;I wanted to point something out regarding &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/24/wsdl-first-development-with-wcf.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/24/wsdl-first-development-with-wcf.aspx"&gt;the WSDL-First item I posted yesterday&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;This is a look at the interface generated by the SvcUtil.exe tool for WCF.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.CodeDom.Compiler.GeneratedCodeAttribute(&lt;SPAN style="COLOR: #a31515"&gt;"System.ServiceModel"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #a31515"&gt;"3.0.0.0"&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.ServiceContractAttribute(Namespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConfigurationName=&lt;SPAN style="COLOR: #a31515"&gt;"Ionic.Samples.Webservices.Sep21.IResearchServiceSoap"&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;IResearchServiceSoap&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.OperationContractAttribute(Action=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Registration"&lt;/SPAN&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReplyAction=&lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.XmlSerializerFormatAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Registration(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; registrationXml);&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.OperationContractAttribute(Action=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Query"&lt;/SPAN&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReplyAction=&lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.XmlSerializerFormatAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Query(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; queryXml);&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.OperationContractAttribute(Action=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Status"&lt;/SPAN&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReplyAction=&lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.XmlSerializerFormatAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Status();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/DIV&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It looks quite similar to the interface that you can generate using the appropriate wsdl.exe tool if you would prefer to use the ASMX (or System.Web.Services) stack that first shipped in .NET v1.1, and continues to be available in .NET 3.5. &lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;[System.CodeDom.Compiler.GeneratedCodeAttribute(&lt;SPAN style="COLOR: #a31515"&gt;"wsdl"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #a31515"&gt;"2.0.50727.42"&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;[System.Web.Services.WebServiceBindingAttribute(Name=&lt;SPAN style="COLOR: #a31515"&gt;"ResearchServiceSoap"&lt;/SPAN&gt;, Namespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;IResearchServiceSoap&lt;/SPAN&gt; {&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;remarks/&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.WebMethodAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.Protocols.SoapDocumentMethodAttribute(&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Registration"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RequestNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ResponseNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Use=System.Web.Services.Description.SoapBindingUse.Literal, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Registration(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; registrationXml);&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;remarks/&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.WebMethodAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.Protocols.SoapDocumentMethodAttribute(&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Query"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RequestNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ResponseNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Use=System.Web.Services.Description.SoapBindingUse.Literal, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Query(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; queryXml);&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;remarks/&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.WebMethodAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.Protocols.SoapDocumentMethodAttribute(&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Status"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RequestNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ResponseNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Use=System.Web.Services.Description.SoapBindingUse.Literal, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Status();&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;}&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;So as you can see, it is a very similar model. Different attributes support the different runtimes (System.Web.Services versus WCF), but it is very parallel. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8964013" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WSDL/default.aspx">WSDL</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/ASMX/default.aspx">ASMX</category></item><item><title>WSDL-First development with WCF</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/24/wsdl-first-development-with-wcf.aspx</link><pubDate>Wed, 24 Sep 2008 18:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8961888</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8961888.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8961888</wfw:commentRss><description>&lt;P&gt;&lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/05/using-the-wsdl-first-design-approach-with-wcf-services.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/05/using-the-wsdl-first-design-approach-with-wcf-services.aspx"&gt;A couple weeks ago I mentioned&lt;/A&gt; that you could do WSDL-First development with WCF, but I didn't go into detail as to how that would work.&amp;nbsp; Somebody asked, so I guess I'll describe the specific steps. I want to use a real scenario, so for a WSDL, I will use the WSDL that Microsoft defines for &lt;A class="" href="http://msdn.microsoft.com/en-us/library/aa295420(office.11).aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa295420(office.11).aspx"&gt;Microsoft Office Research Services&lt;/A&gt;. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Did you get that? Microsoft Office defines a WSDL for Research Services. Any Microsoft Office program, Office 2003 or Office 2007, can call out to any service that implements the given Research Service wire contract. Office programs are web services clients. Ok, we're all clear on that, right? &lt;/P&gt;
&lt;P&gt;And this it may be &lt;I&gt;counter intuitive&lt;/I&gt; for some people. The &lt;I&gt;client&lt;/I&gt; application, in this case, Microsoft Office, specifies the on-the-wire contract, the WSDL. Lots of people have a server-centric design perspective, and assume that the server defines the contract. That often makes sense, but not in this case. Because there are so many deployments of Microsoft Office out there, it makes sense for the client to define the contract. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Back to the WSDL. But let me be straight with you: on the website I referenced, I did not actually see a WSDL specifically defined for the Office Research Service.&amp;nbsp; I'd expect to find it in the &lt;A class="" href="http://msdn.microsoft.com/en-us/library/aa295420(office.11).aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa295420(office.11).aspx"&gt;Schema Reference&lt;/A&gt;, but that reference includes XML Schema, not web services contracts. On the other hand, the Research Service SDK includes sample applications built on .NET and ASMX, and running those you can generate the WSDL that is being used.&amp;nbsp; So... effectively the WSDL &lt;EM&gt;is implicitly published&lt;/EM&gt;.&amp;nbsp; I took some liberties with the WSDL available in that way and I came up with my own WSDL, like so: &lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;&lt;PRE&gt;&amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;definitions&lt;/SPAN&gt;
  &lt;SPAN style="COLOR: #da70d6"&gt;xmlns&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;http&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"http://schemas.xmlsoap.org/wsdl/http/"&lt;/SPAN&gt;
  &lt;SPAN style="COLOR: #da70d6"&gt;xmlns&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;soap&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"http://schemas.xmlsoap.org/wsdl/soap/"&lt;/SPAN&gt;
  &lt;SPAN style="COLOR: #da70d6"&gt;xmlns&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;s&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"http://www.w3.org/2001/XMLSchema"&lt;/SPAN&gt;
  &lt;SPAN style="COLOR: #da70d6"&gt;xmlns&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;s0&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;
  &lt;SPAN style="COLOR: #da70d6"&gt;xmlns&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;soapenc&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"http://schemas.xmlsoap.org/soap/encoding/"&lt;/SPAN&gt;
  &lt;SPAN style="COLOR: #da70d6"&gt;xmlns&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;wsaw&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"http://www.w3.org/2006/05/addressing/wsdl"&lt;/SPAN&gt;
  &lt;SPAN style="COLOR: #b8860b"&gt;targetNamespace&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;
  &lt;SPAN style="COLOR: #b8860b"&gt;xmlns&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"http://schemas.xmlsoap.org/wsdl/"&lt;/SPAN&gt;
&amp;gt;

  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;types&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;schema&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;elementFormDefault&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"qualified"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;targetNamespace&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;&amp;gt;

      &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Registration"&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;complexType&lt;/SPAN&gt;&amp;gt;
          &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;sequence&lt;/SPAN&gt;&amp;gt;
            &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;minOccurs&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"0"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;maxOccurs&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"1"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"registrationXml"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;type&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s:string"&lt;/SPAN&gt; /&amp;gt;
          &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;sequence&lt;/SPAN&gt;&amp;gt;
        &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;complexType&lt;/SPAN&gt;&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"RegistrationResponse"&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;complexType&lt;/SPAN&gt;&amp;gt;
          &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;sequence&lt;/SPAN&gt;&amp;gt;
            &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;minOccurs&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"0"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;maxOccurs&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"1"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"RegistrationResult"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;type&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s:string"&lt;/SPAN&gt; /&amp;gt;
          &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;sequence&lt;/SPAN&gt;&amp;gt;
        &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;complexType&lt;/SPAN&gt;&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt;&amp;gt;

      &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Query"&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;complexType&lt;/SPAN&gt;&amp;gt;
          &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;sequence&lt;/SPAN&gt;&amp;gt;
            &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;minOccurs&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"0"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;maxOccurs&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"1"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"queryXml"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;type&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s:string"&lt;/SPAN&gt; /&amp;gt;
          &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;sequence&lt;/SPAN&gt;&amp;gt;
        &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;complexType&lt;/SPAN&gt;&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"QueryResponse"&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;complexType&lt;/SPAN&gt;&amp;gt;
          &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;sequence&lt;/SPAN&gt;&amp;gt;
            &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;minOccurs&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"0"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;maxOccurs&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"1"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"QueryResult"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;type&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s:string"&lt;/SPAN&gt; /&amp;gt;
          &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;sequence&lt;/SPAN&gt;&amp;gt;
        &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;complexType&lt;/SPAN&gt;&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt;&amp;gt;

      &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Status"&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;complexType&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"StatusResponse"&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;complexType&lt;/SPAN&gt;&amp;gt;
          &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;sequence&lt;/SPAN&gt;&amp;gt;
            &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;minOccurs&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"0"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;maxOccurs&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"1"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"StatusResult"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;type&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s:string"&lt;/SPAN&gt; /&amp;gt;
          &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;sequence&lt;/SPAN&gt;&amp;gt;
        &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;complexType&lt;/SPAN&gt;&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;element&lt;/SPAN&gt;&amp;gt;

    &amp;lt;/&lt;SPAN style="COLOR: #da70d6"&gt;s&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;schema&lt;/SPAN&gt;&amp;gt;
  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;types&lt;/SPAN&gt;&amp;gt;


  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"RegistrationSoapIn"&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;part&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"parameters"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;element&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:Registration"&lt;/SPAN&gt; /&amp;gt;
  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt;&amp;gt;
  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"RegistrationSoapOut"&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;part&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"parameters"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;element&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:RegistrationResponse"&lt;/SPAN&gt; /&amp;gt;
  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt;&amp;gt;

  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"QuerySoapIn"&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;part&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"parameters"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;element&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:Query"&lt;/SPAN&gt; /&amp;gt;
  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt;&amp;gt;
  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"QuerySoapOut"&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;part&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"parameters"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;element&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:QueryResponse"&lt;/SPAN&gt; /&amp;gt;
  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt;&amp;gt;

  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"StatusSoapIn"&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;part&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"parameters"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;element&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:Status"&lt;/SPAN&gt; /&amp;gt;
  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt;&amp;gt;
  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"StatusSoapOut"&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;part&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"parameters"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;element&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:StatusResponse"&lt;/SPAN&gt; /&amp;gt;
  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;message&lt;/SPAN&gt;&amp;gt;

  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;portType&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"IResearchServiceSoap"&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Registration"&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;input&lt;/SPAN&gt;  &lt;SPAN style="COLOR: #b8860b"&gt;message&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:RegistrationSoapIn"&lt;/SPAN&gt;  &lt;SPAN style="COLOR: #da70d6"&gt;wsaw&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;Action&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"urn:Microsoft.Search/Registration"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;output&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;message&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:RegistrationSoapOut"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #da70d6"&gt;wsaw&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;Action&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;""&lt;/SPAN&gt; /&amp;gt;
    &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt;&amp;gt;

    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Query"&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;input&lt;/SPAN&gt;  &lt;SPAN style="COLOR: #b8860b"&gt;message&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:QuerySoapIn"&lt;/SPAN&gt;  &lt;SPAN style="COLOR: #da70d6"&gt;wsaw&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;Action&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"urn:Microsoft.Search/Query"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;output&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;message&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:QuerySoapOut"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #da70d6"&gt;wsaw&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;Action&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;""&lt;/SPAN&gt; /&amp;gt;
    &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt;&amp;gt;

    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Status"&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;input&lt;/SPAN&gt;  &lt;SPAN style="COLOR: #b8860b"&gt;message&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:StatusSoapIn"&lt;/SPAN&gt;  &lt;SPAN style="COLOR: #da70d6"&gt;wsaw&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;Action&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"urn:Microsoft.Search/Status"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;output&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;message&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:StatusSoapOut"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #da70d6"&gt;wsaw&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #b8860b"&gt;Action&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;""&lt;/SPAN&gt; /&amp;gt;
    &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt;&amp;gt;

    &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt;&amp;gt;

  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;portType&lt;/SPAN&gt;&amp;gt;

  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;binding&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"ResearchServiceSoap"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;type&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"s0:IResearchServiceSoap"&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;soap&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;binding&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;transport&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"http://schemas.xmlsoap.org/soap/http"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;style&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"document"&lt;/SPAN&gt; /&amp;gt;

    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Registration"&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;soap&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;soapAction&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"urn:Microsoft.Search/Registration"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;style&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"document"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;input&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;soap&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;body&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;use&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"literal"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;input&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;output&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;soap&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;body&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;use&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"literal"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;output&lt;/SPAN&gt;&amp;gt;
    &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt;&amp;gt;

    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Query"&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;soap&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;soapAction&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"urn:Microsoft.Search/Query"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;style&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"document"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;input&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;soap&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;body&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;use&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"literal"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;input&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;output&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;soap&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;body&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;use&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"literal"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;output&lt;/SPAN&gt;&amp;gt;
    &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt;&amp;gt;

    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Status"&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;soap&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;soapAction&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"urn:Microsoft.Search/Status"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;style&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"document"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;input&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;soap&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;body&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;use&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"literal"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;input&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;output&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN style="COLOR: #da70d6"&gt;soap&lt;/SPAN&gt;:&lt;SPAN style="COLOR: #0000ff"&gt;body&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;use&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"literal"&lt;/SPAN&gt; /&amp;gt;
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;output&lt;/SPAN&gt;&amp;gt;
    &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;operation&lt;/SPAN&gt;&amp;gt;


  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;binding&lt;/SPAN&gt;&amp;gt;

&amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;definitions&lt;/SPAN&gt;&amp;gt;
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Ok, starting with that WSDL, given to us by Microsoft Office, we now want to build a service that implements that WSDL, and we want to build it in WCF. We start with the &lt;A href="http://msdn.microsoft.com/en-us/library/aa347733.aspx"&gt;svcutil.exe tool&lt;/A&gt;, which is shipped with the .NET SDK v3.0 , or later. &lt;/P&gt;
&lt;P&gt;Continuing on with the thought from above: most people have a server-centric design perspective when it comes to web services; most people think the server comes first, then you build the clients...The svcutil.exe tool is also guilty of that.&amp;nbsp; In fact there is &lt;A class="" href="http://msdn.microsoft.com/en-us/library/aa751905.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa751905.aspx"&gt;documentation that describes how to build a client using the svcutil.exe tool&lt;/A&gt;, but as far as I know there is no doc that describes how to create a WCF service from&amp;nbsp;a WSDL file&amp;nbsp;using the&amp;nbsp;svcutil.exe tool. We're going to fix that. Despite the fact that there is no doc for this, it is in fact a supported scenario.&amp;nbsp; Constructing the service starting from the WSDL works. &lt;/P&gt;
&lt;P&gt;Here's how you generate a server-side "stub" and the interface for that WSDL:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Consolas; Courier: "&gt;c:\netsdk3.0\bin\svcutil.exe /language:C# /out:IResearchService.cs /n:*,Ionic.Samples.Webservices.Sep24 ResearchService.wsdl &lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;On the command line, I specify the output file, the language, and also the WSDL file itself.&amp;nbsp; If there are external XSD files, you will need to specify those, too.&amp;nbsp;In this case, the entire contract is contained within a single WSDL file.&amp;nbsp; The last interesting bit is the /n switch, which I use to specify the namespace for all the generated classes. Without this switch the interface and the Data Access Objects are all generated into the default (global::) namespace, which I don't like.&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;You can see that I reference the .NET SDK v3.0 directory for the svcutil.exe tool.&amp;nbsp; WCF first shipped in the .NET SDK v3.0.&amp;nbsp; Even if you have .NET SDK 3.5 installed, (or Visual Studio 2008), you will still use the svcutil.exe from .NET 3.0.&amp;nbsp; This is because of the russian-doll model of releases that .NET 2.0, 3.0 and 3.5 are. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Now, this is a command line, which is definitely not a GUI.&amp;nbsp; But you can teach Visual Studio to do this for you. To do this, you need to go to the Tools menu, and select External Tools.&amp;nbsp; Then click Add, and specify these settings for the svcutil tool:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://blogs.msdn.com/blogfiles/dotnetinterop/092308_0435_Xxx11.png" mce_src="http://blogs.msdn.com/blogfiles/dotnetinterop/092308_0435_Xxx11.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Of course you have to specify the relevant path for the .NET SDK V3.0, for your installation.&amp;nbsp; Regardless whether you run svcutil.exe from an MSbuild file, or from Visual Studio, here's what the generated interface looks like: &lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;&lt;PRE&gt;&lt;SPAN&gt;    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
&lt;/SPAN&gt;    [&lt;SPAN style="COLOR: #5f9ea0"&gt;System&lt;/SPAN&gt;.&lt;SPAN style="COLOR: #5f9ea0"&gt;ServiceModel&lt;/SPAN&gt;.ServiceContractAttribute(Namespace=&lt;SPAN style="COLOR: #bc8f8f"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;,&lt;BR&gt;        ConfigurationName=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Ionic.Samples.Webservices.Sep24.IResearchServiceSoap"&lt;/SPAN&gt;)]
    &lt;SPAN style="COLOR: #a020f0"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a020f0"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR: #228b22"&gt;IResearchServiceSoap&lt;/SPAN&gt;
    {
        
        &lt;SPAN&gt;[System.ServiceModel.OperationContractAttribute(Action="urn:Microsoft.Search/Registration",
            ReplyAction="")]
&lt;/SPAN&gt;        [&lt;SPAN style="COLOR: #5f9ea0"&gt;System&lt;/SPAN&gt;.&lt;SPAN style="COLOR: #5f9ea0"&gt;ServiceModel&lt;/SPAN&gt;.XmlSerializerFormatAttribute()]
        &lt;SPAN style="COLOR: #228b22"&gt;string&lt;/SPAN&gt; Registration(&lt;SPAN style="COLOR: #228b22"&gt;string&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;registrationXml&lt;/SPAN&gt;);
        
        &lt;SPAN&gt;[System.ServiceModel.OperationContractAttribute(Action="urn:Microsoft.Search/Query",
            ReplyAction="")]
&lt;/SPAN&gt;        [&lt;SPAN style="COLOR: #5f9ea0"&gt;System&lt;/SPAN&gt;.&lt;SPAN style="COLOR: #5f9ea0"&gt;ServiceModel&lt;/SPAN&gt;.XmlSerializerFormatAttribute()]
        &lt;SPAN style="COLOR: #228b22"&gt;string&lt;/SPAN&gt; Query(&lt;SPAN style="COLOR: #228b22"&gt;string&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;queryXml&lt;/SPAN&gt;);
        
        &lt;SPAN&gt;[System.ServiceModel.OperationContractAttribute(Action="urn:Microsoft.Search/Status",
            ReplyAction="")]
&lt;/SPAN&gt;        [&lt;SPAN style="COLOR: #5f9ea0"&gt;System&lt;/SPAN&gt;.&lt;SPAN style="COLOR: #5f9ea0"&gt;ServiceModel&lt;/SPAN&gt;.XmlSerializerFormatAttribute()]
        &lt;SPAN style="COLOR: #228b22"&gt;string&lt;/SPAN&gt; Status();
        
    }
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;The Office Research Service interface&amp;nbsp;is a bit of a bummer, because the operations on this service interface just exchange strings. No complex types here.&amp;nbsp; But trust me, it works the same if you use complex types in the interface.&amp;nbsp; In that case, the output source file will include a .NET&amp;nbsp;DataContract definition for the various complex types, along with XML namespace settings and so on. &amp;nbsp;The silly thing is that the Office Research Service does actually send back XML.&amp;nbsp; But rather than use xsd:anyType to allow any XML, or even a strictly-specified XML element, the office app just specifies a string. In effect, the XML is encoded as a string.&amp;nbsp; When&amp;nbsp;implementing the service, you would actually instantiate an XmlDocument and load in the string you get passed, if you know what I mean.&amp;nbsp; This is normally something the web services runtime would do for you, if you specify your WSDL that way.&amp;nbsp; But Office did not do that.&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;Ok, moving on.... Now, If you are sharp-eyed, you will notice that the command line to generate the server-side stub and interface is the same command line you would use for the Client proxy.&amp;nbsp; And you're right. In fact if you look in the generated file you will find some client-specific proxy classes.&amp;nbsp;No problem with any of that. For the client we need those proxy classes, but for the server we don't. In a server-specific project, that generated code will remain unused, or of course you could manually remove it from the generated file. &lt;/P&gt;
&lt;P mce_keep="true"&gt;At this point, you have the interface.&amp;nbsp; Now you need the implementation. In Visual Studio, if you begin to type in a class definition, and then type in a colon and specify the name of an interface, you can right click on that interface and ask Visual Studio to generate method stubs for all the interface methods.&amp;nbsp;Perfect.&amp;nbsp;&amp;nbsp; As well, you will need to decorate your WCF Service class with the ServiceBehavior attribute. &amp;nbsp; It looks like this: &lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;&lt;PRE&gt;    [ServiceBehavior(Name="WcfResearchLibrary",
                     Namespace=&lt;SPAN style="COLOR: #bc8f8f"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;,
                     IncludeExceptionDetailInFaults=&lt;SPAN style="COLOR: #5f9ea0"&gt;true&lt;/SPAN&gt;)]
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;After that, you fill in the implementation for those methods.&amp;nbsp; Then you need to consider the service host for your app.&amp;nbsp; If it will run in IIS, then you code up a .svc file;&amp;nbsp; if you want to host it in a console app, then you use some of the boilerplate I mentioned in &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/22/custom-service-config-file-for-a-wcf-service-hosted-in-iis.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/22/custom-service-config-file-for-a-wcf-service-hosted-in-iis.aspx"&gt;a previous post&lt;/A&gt;. And so on.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Then you need to deal with the configuration settings, another &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/22/custom-service-config-file-for-a-wcf-service-hosted-in-iis.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/22/custom-service-config-file-for-a-wcf-service-hosted-in-iis.aspx"&gt;issue I dealt with in the previous post&lt;/A&gt;. &amp;nbsp;And that's pretty much it.&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;You have now coded a WCF Service using WSDL-First design principles.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8961888" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WSDL/default.aspx">WSDL</category></item><item><title>Flatten your WSDL with this Custom ServiceHost for WCF</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/23/flatten-your-wsdl-with-this-custom-servicehost-for-wcf.aspx</link><pubDate>Tue, 23 Sep 2008 18:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8960261</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8960261.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8960261</wfw:commentRss><description>&lt;P&gt;Yesterday I mentioned using a custom service host to flatten the WSDL that is generated by a WCF service.&amp;nbsp; This is &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/2007/05/10/improving-wcf-interoperability.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2007/05/10/improving-wcf-interoperability.aspx"&gt;something Christian showed us all how to do&lt;/A&gt; a long while ago, to improve interoperability between WCF-implemented services and consumers written on other technology stacks.&amp;nbsp; Flattening WSDL is important for Interop purposes becausse many tools don't digest modular WSDL very well.&amp;nbsp; When I say modular WSDL, I mean WSDL that imports other WSDL's or XSDs.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I realized that I had never actually published the code for my custom WCF&amp;nbsp;service host that flattens WSDL.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;So here it is. &lt;SPAN style="COLOR: red"&gt;&lt;EM&gt;[updated 146pm US/Pacific time based on Natasa's comment]&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;
&lt;DIV style="FONT-SIZE: 9pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Consolas"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Collections;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Collections.Generic;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.ServiceModel.Channels;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.ServiceModel.Description;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.ServiceModel.Dispatcher;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Xml.Schema;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; ServiceDescription = System.Web.Services.Description.ServiceDescription;&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;namespace&lt;/SPAN&gt; Thinktecture.ServiceModel&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;FlatWsdl&lt;/SPAN&gt; : IWsdlExportExtension, IEndpointBehavior&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; ExportContract(WsdlExporter exporter, WsdlContractConversionContext context) { }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; XmlSchemaSet schemaSet = exporter.GeneratedXmlSchemas;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt; (WsdlDescription wsdl &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; exporter.GeneratedWsdlDocuments)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: #2b91af"&gt;List&lt;/SPAN&gt;&amp;lt;XmlSchema&amp;gt; importsList = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;List&lt;/SPAN&gt;&amp;lt;XmlSchema&amp;gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt; (XmlSchema schema &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; wsdl.Types.Schemas)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; AddImportedSchemas(schema, schemaSet, importsList);&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (importsList.Count == 0)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;return&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; wsdl.Types.Schemas.Clear();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt; (XmlSchema schema &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; importsList)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; RemoveXsdImports(schema);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; wsdl.Types.Schemas.Add(schema);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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;void&lt;/SPAN&gt; AddImportedSchemas(XmlSchema schema, XmlSchemaSet schemaSet, &lt;SPAN style="COLOR: #2b91af"&gt;List&lt;/SPAN&gt;&amp;lt;XmlSchema&amp;gt; importsList)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt; (XmlSchemaImport import &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; schema.Includes)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: #2b91af"&gt;ICollection&lt;/SPAN&gt; realSchemas =&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; schemaSet.Schemas(import.Namespace);&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt; (XmlSchema ixsd &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; realSchemas)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; (!importsList.Contains(ixsd))&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;/P&gt;
&lt;P style="MARGIN: 0px"&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; importsList.Add(ixsd);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; AddImportedSchemas(ixsd, schemaSet, importsList);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;/P&gt;
&lt;P style="MARGIN: 0px"&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; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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;void&lt;/SPAN&gt; RemoveXsdImports(XmlSchema schema)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &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; schema.Includes.Count; i++)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (schema.Includes[i] &lt;SPAN style="COLOR: blue"&gt;is&lt;/SPAN&gt; XmlSchemaImport)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; schema.Includes.RemoveAt(i--);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) { }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) { }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; Validate(ServiceEndpoint endpoint) { }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;FlatWsdlServiceHost&lt;/SPAN&gt; : System.ServiceModel.ServiceHost&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; FlatWsdlServiceHost() { }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; FlatWsdlServiceHost(&lt;SPAN style="COLOR: #2b91af"&gt;Type&lt;/SPAN&gt; serviceType, &lt;SPAN style="COLOR: blue"&gt;params&lt;/SPAN&gt; Uri[] baseAddresses)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;(serviceType, baseAddresses) { }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; FlatWsdlServiceHost(&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt; singletonInstance, &lt;SPAN style="COLOR: blue"&gt;params&lt;/SPAN&gt; Uri[] baseAddresses)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;(singletonInstance, baseAddresses) { }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; ApplyConfiguration()&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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(&lt;SPAN style="COLOR: #a31515"&gt;"ApplyConfiguration (thread {0})"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; System.Threading.&lt;SPAN style="COLOR: #2b91af"&gt;Thread&lt;/SPAN&gt;.CurrentThread.ManagedThreadId);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;.ApplyConfiguration();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; InjectFlatWsdlExtension();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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;void&lt;/SPAN&gt; InjectFlatWsdlExtension()&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt; (ServiceEndpoint endpoint &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;.Description.Endpoints)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&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; endpoint.Behaviors.Add(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; FlatWsdl());&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;sealed&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;FlatWsdlServiceHostFactory&lt;/SPAN&gt; : System.ServiceModel.Activation.ServiceHostFactory&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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;override&lt;/SPAN&gt; System.ServiceModel.ServiceHostBase CreateServiceHost(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; constructorString, Uri[] baseAddresses)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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;base&lt;/SPAN&gt;.CreateServiceHost(constructorString, baseAddresses);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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; System.ServiceModel.ServiceHost CreateServiceHost(&lt;SPAN style="COLOR: #2b91af"&gt;Type&lt;/SPAN&gt; serviceType, Uri[] baseAddresses)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&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;new&lt;/SPAN&gt; FlatWsdlServiceHost(serviceType, baseAddresses);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;}&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And to use this, you would specify something like this in your .svc file: &lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;&lt;PRE&gt;&amp;lt;%&lt;SPAN style="COLOR: blue"&gt;@&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a31515"&gt;ServiceHost&lt;/SPAN&gt;
    &lt;SPAN style="COLOR: red"&gt;Language&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="C#"&lt;/SPAN&gt;
    &lt;SPAN style="COLOR: red"&gt;Factory&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="Thinktecture.ServiceModel.FlatWsdlServiceHostFactory"&lt;/SPAN&gt;
    &lt;SPAN style="COLOR: red"&gt;Service&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="Ionic.Samples.Webservices.WcfService1"&lt;/SPAN&gt;%&amp;gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8960261" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WSDL/default.aspx">WSDL</category></item><item><title>Custom Config file for a WCF Service hosted in IIS</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/22/custom-service-config-file-for-a-wcf-service-hosted-in-iis.aspx</link><pubDate>Mon, 22 Sep 2008 17:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8960243</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8960243.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8960243</wfw:commentRss><description>&lt;p&gt;I am constantly developing new WCF services to try out various techniques,&amp;nbsp;ideas, scenarios. &lt;/p&gt;
&lt;p&gt;Many times for these quickie WCF applications I will just use a text editor to write the code.&amp;nbsp; As you know &lt;a href="http://msdn.microsoft.com/en-us/library/ms730158.aspx" class="" mce_href="http://msdn.microsoft.com/en-us/library/ms730158.aspx"&gt;there are multiple options for hosting your WCF services&lt;/a&gt;.&amp;nbsp; For these quick apps, I will typically write a simple custom console host for the WCF service, what is sometimes called "self-hosting" the WCF service.&amp;nbsp; You've seen some form of this&amp;nbsp;boilerplate code many times: &lt;/p&gt;
&lt;div style="border: 1pt solid windowtext; padding: 2pt; background: white none repeat scroll 0% 0%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; line-height: 98%; font-family: Consolas,Courier New;"&gt;&lt;pre&gt;        &lt;span style="color: rgb(160, 32, 240);"&gt;public static void Main()&lt;br&gt;&lt;/span&gt;        {&lt;br&gt;            &lt;span style="color: rgb(34, 139, 34);"&gt;string&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;addressRoot&lt;/span&gt;= &lt;span style="color: rgb(188, 143, 143);"&gt;"http://localhost:5555/"&lt;/span&gt;;&lt;br&gt;            &lt;span style="color: rgb(34, 139, 34);"&gt;string&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;endpointSuffix&lt;/span&gt;= &lt;span style="color: rgb(188, 143, 143);"&gt;"MyWcfService"&lt;/span&gt;;&lt;br&gt;            &lt;span style="color: rgb(34, 139, 34);"&gt;string&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;endpointAddress&lt;/span&gt;= addressRoot + endpointSuffix;&lt;br&gt;&lt;br&gt;            &lt;span style="color: rgb(178, 34, 34);"&gt;// &lt;/span&gt;&lt;span style="color: rgb(178, 34, 34);"&gt;get the type we are hosting &lt;br&gt;&lt;/span&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(34, 139, 34);"&gt;Type&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;t1&lt;/span&gt; = &lt;span style="color: rgb(160, 32, 240);"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(95, 158, 160);"&gt;Ionic&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Samples&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Webservices&lt;/span&gt;.MyWcfService);&lt;br&gt;&lt;br&gt;            &lt;span style="color: rgb(34, 139, 34);"&gt;var&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;host&lt;/span&gt; = &lt;br&gt;                &lt;span style="color: rgb(160, 32, 240);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;ServiceModel&lt;/span&gt;.ServiceHost(t1,&lt;br&gt;                                                    &lt;span style="color: rgb(160, 32, 240);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.Uri(endpointAddress));&lt;br&gt;&lt;br&gt;            &lt;span style="color: rgb(178, 34, 34);"&gt;// &lt;/span&gt;&lt;span style="color: rgb(178, 34, 34);"&gt;Create the binding&lt;br&gt;&lt;/span&gt;            &lt;span style="color: rgb(34, 139, 34);"&gt;var&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;basicBinding&lt;/span&gt; = &lt;span style="color: rgb(160, 32, 240);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;ServiceModel&lt;/span&gt;.BasicHttpBinding();&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;basicBinding&lt;/span&gt;.Namespace = &lt;span style="color: rgb(188, 143, 143);"&gt;"urn:Ionic.Samples"&lt;/span&gt;;&lt;br&gt;&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;host&lt;/span&gt;.AddServiceEndpoint&lt;br&gt;                (&lt;span style="color: rgb(160, 32, 240);"&gt;typeof&lt;/span&gt;(IService),&lt;br&gt;                 basicBinding, &lt;br&gt;                 &lt;span style="color: rgb(188, 143, 143);"&gt;""&lt;/span&gt;);&lt;br&gt;&lt;br&gt;            &lt;span style="color: rgb(178, 34, 34);"&gt;// &lt;/span&gt;&lt;span style="color: rgb(178, 34, 34);"&gt;add the "get metadata" behavior &lt;br&gt;&lt;/span&gt;            &lt;span style="color: rgb(178, 34, 34);"&gt;// &lt;/span&gt;&lt;span style="color: rgb(178, 34, 34);"&gt;This will allow the service to emit WSDL when tickled at the proper HTTP endpoint&lt;br&gt;&lt;/span&gt;            &lt;span style="color: rgb(34, 139, 34);"&gt;var&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;smb&lt;/span&gt;= &lt;span style="color: rgb(160, 32, 240);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;ServiceModel&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Description&lt;/span&gt;.ServiceMetadataBehavior();&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;smb&lt;/span&gt;.HttpGetEnabled = &lt;span style="color: rgb(95, 158, 160);"&gt;true&lt;/span&gt;;&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;smb&lt;/span&gt;.HttpGetUrl = &lt;span style="color: rgb(160, 32, 240);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.Uri(endpointAddress);&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;host&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Description&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Behaviors&lt;/span&gt;.Add(smb);&lt;br&gt;&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Console&lt;/span&gt;.WriteLine();&lt;br&gt;&lt;br&gt;            &lt;span style="color: rgb(178, 34, 34);"&gt;// &lt;/span&gt;&lt;span style="color: rgb(178, 34, 34);"&gt;Open the ServiceHost to create listeners and start listening for messages&lt;br&gt;&lt;/span&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;host&lt;/span&gt;.Open();&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(188, 143, 143);"&gt;"Service implementation: "&lt;/span&gt; + &lt;span style="color: rgb(95, 158, 160);"&gt;t1&lt;/span&gt;.ToString());&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(188, 143, 143);"&gt;"Service Address: {0}"&lt;/span&gt;, endpointAddress);&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(188, 143, 143);"&gt;"The service is ready."&lt;/span&gt;);&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Console&lt;/span&gt;.WriteLine();&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(188, 143, 143);"&gt;"Press &amp;lt;ENTER&amp;gt; to terminate the service."&lt;/span&gt;);&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Console&lt;/span&gt;.WriteLine();&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Console&lt;/span&gt;.ReadLine();&lt;br&gt;&lt;br&gt;            &lt;span style="color: rgb(178, 34, 34);"&gt;// &lt;/span&gt;&lt;span style="color: rgb(178, 34, 34);"&gt;Close to shutdown the service&lt;br&gt;&lt;/span&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;host&lt;/span&gt;.Close();&lt;br&gt;        }&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p mce_keep="true"&gt;But sometimes I need the WCF service to run for a longer period of time, maybe permanently.&amp;nbsp; This is where the IIS host makes sense - for security and lifecycle purposes.&amp;nbsp; And the ASP.NET deployment stuff works nicely for WCF services - I copy the Interface (IService.cs) and the Service Implementation code to the App_Code directory of IIS, and then copy the .svc file over, and I'm nearly there.&amp;nbsp; The only thing the IIS-hosted service lacks now is the service configuration.&amp;nbsp; &lt;/p&gt;
&lt;p mce_keep="true"&gt;Deploying to IIS, I don't get to use my boilerplate ServiceHost code as above.&amp;nbsp; Which means I don't have the programmatic control over the endpoint and the ServiceMetadataBehavior, and I don't get to specify an endpoint and any behaviors.&amp;nbsp; So of course I have to&amp;nbsp;embed the relevant&amp;nbsp;configuration information in the .config file, which in the case of IIS hosting, is the web.config file.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p mce_keep="true"&gt;A problem comes in when hosting multiple WCF services in a single IIS virtual directory:&amp;nbsp; Each Service gets its own individual .svc file, but all services share a single web.config file.&amp;nbsp; If I update a service, then I need to modify that single file.&amp;nbsp; If I add a service, I need to edit the file.&amp;nbsp; If I remove a service, I need to edit the file.&amp;nbsp; And in each case the edits and changes for one service could affect the other services, if the edits are not done properly.&amp;nbsp; &lt;/p&gt;
&lt;p mce_keep="true"&gt;Ideally I'd like the IIS-hosted WCF service to have its own configuration, independent of any other services running from that same vdir.&amp;nbsp; The .svc file is completely independent.&amp;nbsp; Why can't the configuration also be independent?&amp;nbsp; How can I do this? &lt;/p&gt;
&lt;p mce_keep="true"&gt;I looked around and found the &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehostbase.applyconfiguration.aspx" class="" mce_href="http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehostbase.applyconfiguration.aspx"&gt;ServiceHostBase.ApplyConfiguration&lt;/a&gt; method.&amp;nbsp; If I construct a custom service host, then I can override the ApplyConfiguration method and load my service configuration from... anywhere.&amp;nbsp;&amp;nbsp; I decided to establish a simple convention - I will look for a file in the server directory called &amp;lt;ServiceName&amp;gt;.config.&amp;nbsp; This is not &amp;lt;AssemblyName&amp;gt;.config, which is the .NET default.&amp;nbsp; In this case the assembly is likely going to be dynamically generated and named.&amp;nbsp; So using the&amp;nbsp;assembly name to find the config file is probably not right.&amp;nbsp; The next option is to use the Service Name; this is something you specify in code in the [&lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.aspx" class="" mce_href="http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.aspx"&gt;ServiceBehavior&lt;/a&gt;] attribute.&amp;nbsp; Assuming you select a unique name for each service,&amp;nbsp;that name ought to be useful for uniquifying the configuration file. &amp;nbsp;&lt;/p&gt;
&lt;p mce_keep="true"&gt;Then, it is a simple matter of loading in the configuration file, within the custom ServiceHost.&amp;nbsp;&amp;nbsp;This bit of black magic does the trick for me:&amp;nbsp;&lt;/p&gt;
&lt;div style="border: 1pt solid windowtext; padding: 2pt; background: white none repeat scroll 0% 0%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; line-height: 98%; font-family: Consolas,Courier New;"&gt;&lt;pre&gt;        &lt;span style="color: rgb(160, 32, 240);"&gt;protected override void ApplyConfiguration()&lt;br&gt;&lt;/span&gt;        {&lt;br&gt;&lt;br&gt;            &lt;span style="color: rgb(178, 34, 34);"&gt;// &lt;/span&gt;&lt;span style="color: rgb(178, 34, 34);"&gt;generate the name of the custom configFile, from the service name:&lt;br&gt;&lt;/span&gt;            &lt;span style="color: rgb(34, 139, 34);"&gt;string&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;configFilename&lt;/span&gt; = &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;IO&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Path&lt;/span&gt;.Combine ( physicalPath,&lt;br&gt;                                                             &lt;span style="color: rgb(95, 158, 160);"&gt;String&lt;/span&gt;.Format(&lt;span style="color: rgb(188, 143, 143);"&gt;"{0}.config"&lt;/span&gt;, &lt;span style="color: rgb(160, 32, 240);"&gt;this&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Description&lt;/span&gt;.Name));&lt;br&gt;            &lt;br&gt;            &lt;span style="color: rgb(160, 32, 240);"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(95, 158, 160);"&gt;string&lt;/span&gt;.IsNullOrEmpty(configFilename) || !&lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;IO&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;File&lt;/span&gt;.Exists(configFilename))&lt;br&gt;                &lt;span style="color: rgb(160, 32, 240);"&gt;base&lt;/span&gt;.ApplyConfiguration();&lt;br&gt;            &lt;span style="color: rgb(160, 32, 240);"&gt;else&lt;/span&gt;&lt;br&gt;                LoadConfigFromCustomLocation(configFilename);&lt;br&gt;&lt;br&gt;        } &lt;br&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p mce_keep="true"&gt;Then there is some supporting logic, to get the physical path and to actually load the configuration: &lt;/p&gt;
&lt;div style="border: 1pt solid windowtext; padding: 2pt; background: white none repeat scroll 0% 0%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; line-height: 98%; font-family: Consolas,Courier New;"&gt;&lt;pre&gt;        &lt;span style="color: rgb(160, 32, 240);"&gt;private&lt;/span&gt; &lt;span style="color: rgb(34, 139, 34);"&gt;string&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;_physicalPath&lt;/span&gt; = &lt;span style="color: rgb(95, 158, 160);"&gt;null&lt;/span&gt;;&lt;br&gt;        &lt;span style="color: rgb(160, 32, 240);"&gt;private&lt;/span&gt; &lt;span style="color: rgb(34, 139, 34);"&gt;string&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;physicalPath&lt;/span&gt;&lt;br&gt;        {&lt;br&gt;            &lt;span style="color: rgb(160, 32, 240);"&gt;get&lt;/span&gt; &lt;br&gt;            {&lt;br&gt;                &lt;span style="color: rgb(160, 32, 240);"&gt;if&lt;/span&gt; (_physicalPath == &lt;span style="color: rgb(95, 158, 160);"&gt;null&lt;/span&gt;)&lt;br&gt;                {&lt;br&gt;                    &lt;span style="color: rgb(178, 34, 34);"&gt;// &lt;/span&gt;&lt;span style="color: rgb(178, 34, 34);"&gt;if hosted in IIS&lt;br&gt;&lt;/span&gt;                    _physicalPath = &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Web&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Hosting&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;HostingEnvironment&lt;/span&gt;.ApplicationPhysicalPath;&lt;br&gt;                    &lt;span style="color: rgb(160, 32, 240);"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(95, 158, 160);"&gt;String&lt;/span&gt;.IsNullOrEmpty(_physicalPath))&lt;br&gt;                    {&lt;br&gt;                        &lt;span style="color: rgb(178, 34, 34);"&gt;// &lt;/span&gt;&lt;span style="color: rgb(178, 34, 34);"&gt;for hosting outside of IIS&lt;br&gt;&lt;/span&gt;                        _physicalPath= &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;IO&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Directory&lt;/span&gt;.GetCurrentDirectory();&lt;br&gt;                    }&lt;br&gt;                }&lt;br&gt;                &lt;span style="color: rgb(160, 32, 240);"&gt;return&lt;/span&gt; _physicalPath;&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        &lt;span style="color: rgb(160, 32, 240);"&gt;private void LoadConfigFromCustomLocation(string configFilename)&lt;br&gt;&lt;/span&gt;        {&lt;br&gt;            &lt;span style="color: rgb(34, 139, 34);"&gt;var&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;filemap&lt;/span&gt; = &lt;span style="color: rgb(160, 32, 240);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Configuration&lt;/span&gt;.ExeConfigurationFileMap();&lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;filemap&lt;/span&gt;.ExeConfigFilename = configFilename;&lt;br&gt; &lt;br&gt;            &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Configuration&lt;/span&gt;.&lt;span style="color: rgb(34, 139, 34);"&gt;Configuration&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;config&lt;/span&gt; = &lt;br&gt;                &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Configuration&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;ConfigurationManager&lt;/span&gt;.OpenMappedExeConfiguration&lt;br&gt;                (filemap, &lt;br&gt;                 &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Configuration&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;ConfigurationUserLevel&lt;/span&gt;.None);&lt;br&gt; &lt;br&gt;            &lt;span style="color: rgb(34, 139, 34);"&gt;var&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;serviceModel&lt;/span&gt; = &lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;ServiceModel&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Configuration&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;ServiceModelSectionGroup&lt;/span&gt;.GetSectionGroup(config);&lt;br&gt; &lt;br&gt;            &lt;span style="color: rgb(34, 139, 34);"&gt;bool&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;loaded&lt;/span&gt;= &lt;span style="color: rgb(95, 158, 160);"&gt;false&lt;/span&gt;;&lt;br&gt;            &lt;span style="color: rgb(160, 32, 240);"&gt;foreach&lt;/span&gt; (&lt;span style="color: rgb(95, 158, 160);"&gt;System&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;ServiceModel&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Configuration&lt;/span&gt;.&lt;span style="color: rgb(34, 139, 34);"&gt;ServiceElement&lt;/span&gt; &lt;span style="color: rgb(184, 134, 11);"&gt;se&lt;/span&gt; &lt;span style="color: rgb(160, 32, 240);"&gt;in&lt;/span&gt; &lt;span style="color: rgb(95, 158, 160);"&gt;serviceModel&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Services&lt;/span&gt;.Services)&lt;br&gt;            {&lt;br&gt;                &lt;span style="color: rgb(160, 32, 240);"&gt;if&lt;/span&gt;(!loaded)&lt;br&gt;                    &lt;span style="color: rgb(160, 32, 240);"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(95, 158, 160);"&gt;se&lt;/span&gt;.Name == &lt;span style="color: rgb(160, 32, 240);"&gt;this&lt;/span&gt;.&lt;span style="color: rgb(95, 158, 160);"&gt;Description&lt;/span&gt;.ConfigurationName)&lt;br&gt;                    {&lt;br&gt;                        &lt;span style="color: rgb(160, 32, 240);"&gt;base&lt;/span&gt;.LoadConfigurationSection(se);&lt;br&gt;                        loaded= &lt;span style="color: rgb(95, 158, 160);"&gt;true&lt;/span&gt;;&lt;br&gt;                    }&lt;br&gt;            }&lt;br&gt;            &lt;span style="color: rgb(160, 32, 240);"&gt;if&lt;/span&gt; (!loaded)&lt;br&gt;                &lt;span style="color: rgb(160, 32, 240);"&gt;throw&lt;/span&gt; &lt;span style="color: rgb(160, 32, 240);"&gt;new&lt;/span&gt; ArgumentException(&lt;span style="color: rgb(188, 143, 143);"&gt;"ServiceElement doesn't exist"&lt;/span&gt;);         &lt;br&gt;        }&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p mce_keep="true"&gt;And of course to make this work, you will need to specify a custom ServiceHostFactory in the .svc file.&amp;nbsp; The custom service host approach is useful for lots of things; in the past I used it for &lt;a href="http://blogs.msdn.com/dotnetinterop/archive/2007/08/20/improving-wcf-interop-with-websphere-rad-by-controlling-wsdl-generation.aspx" class="" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2007/08/20/improving-wcf-interop-with-websphere-rad-by-controlling-wsdl-generation.aspx"&gt;WSDL-Flattening&lt;/a&gt; or for &lt;a href="http://blogs.msdn.com/dotnetinterop/archive/2007/07/19/interop-between-asmx-and-wcf-services.aspx" class="" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2007/07/19/interop-between-asmx-and-wcf-services.aspx"&gt;modifying namespaces on SOAP payloads&lt;/a&gt;. Of course you can have a single custom service host that combines all those capabilities, if you like. For this post I am focusing only on the config file. &lt;/p&gt;
&lt;div style="border: 1pt solid windowtext; padding: 2pt; background: white none repeat scroll 0% 0%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; line-height: 98%; font-family: Consolas,Courier New;"&gt;&lt;pre&gt;&amp;lt;%@ &lt;span style="color: rgb(163, 21, 21);"&gt;ServiceHost&lt;/span&gt;&lt;br&gt;    &lt;span style="color: red;"&gt;Language&lt;/span&gt;=&lt;span style="color: blue;"&gt;"C#"&lt;/span&gt; &lt;br&gt;    &lt;span style="color: red;"&gt;Debug&lt;/span&gt;=&lt;span style="color: blue;"&gt;"true"&lt;/span&gt; &lt;br&gt;    &lt;span style="color: red;"&gt;Service&lt;/span&gt;=&lt;span style="color: blue;"&gt;"Ionic.Samples.Webservices.Sep20.CustomConfigService"&lt;/span&gt; &lt;br&gt;&lt;br&gt;    &lt;span style="color: red;"&gt;Factory&lt;/span&gt;=&lt;span style="color: blue;"&gt;"Ionic.ServiceModel.ServiceHostFactory"&lt;/span&gt;&lt;br&gt;&lt;br&gt;%&amp;gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p mce_keep="true"&gt;For now, the logic that reads in a unique&amp;nbsp;file per service will do, but in the general case I'd like to be able to read the configuration from a remote centralized repository, like a network share or a database.&amp;nbsp; That is something left for the future. &lt;/p&gt;
&lt;p mce_keep="true"&gt;I've attached all the code here in a zipfile. &lt;br&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8960243" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/dotnetinterop/attachment/8960243.ashx" length="10274" type="application/zip" /><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WSDL/default.aspx">WSDL</category></item><item><title>Using the WSDL-First design approach with WCF services</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/05/using-the-wsdl-first-design-approach-with-wcf-services.aspx</link><pubDate>Fri, 05 Sep 2008 17:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8923642</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8923642.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8923642</wfw:commentRss><description>&lt;P&gt;Couple of helpful posts from the archives for you.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;If you are care about interop, then you probably want to use a contract-first or WSDL-first design for your web services.&amp;nbsp; In other words, you will not simply decorate server-side code annotations (in Java) or attributes (in .NET) and generate WSDL dynamically from that running code.&amp;nbsp; That approach works in demonstrations, but it does not lend itself to good interoperability in the long run. &lt;/P&gt;
&lt;P&gt;So you start with WSDL.&amp;nbsp; Since you are WCF-savvy, you are confining yourself to&amp;nbsp;&lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms733112.aspx"&gt;the subset of XML Schema that is friendly to WCF&lt;/A&gt;.&amp;nbsp; The restriction isn't too onerous, though, especially as it improves&amp;nbsp;interoperability significantly, and also simplifies your life since you don't have to read and understand all of the XML Schema spec!&amp;nbsp; Ok, so following those rules, you write the WSDL. And&amp;nbsp;then you generate from that WSDL the server-side stub code, and the client-side proxy code, using the web services toolkits of your choice.&amp;nbsp; On the .NET side, that toolkit is obviously WCF (and the tool itself is svcutil.exe); on the Java side, maybe the JAXWS reference implementation, or AXIS2, and so on.&amp;nbsp; But the trick is, the generated code on the .NET side is muy bueno if you write your WSDL following a few additional simple rules, which are not mentioned in the above linked doc. &lt;/P&gt;
&lt;P&gt;For example, if you want to pass a collection in your interface, and you will be using WCF on one or both ends of the wire, then you want to use an explicit complexType for the array in the WSDL/XSD.&amp;nbsp; This is not required by WSI Basic Profile, nor is it mentioned anywhere in the official WCF doc as far as I know.&amp;nbsp; Nonetheless, follow this rule for best results.&amp;nbsp; &amp;nbsp;Do not define your arrays with an element and a @maxOccurs="unbounded" attribute in your schema; if you do, you will get the XmlSerializer with WCF, rather than the DataContract serializer, and that is&amp;nbsp;probably not what you want.&amp;nbsp; More on this tip &lt;A class="" href="http://kjellsj.blogspot.com/2008/03/wcf-datacontractserializer-schema-rules.html" mce_href="http://kjellsj.blogspot.com/2008/03/wcf-datacontractserializer-schema-rules.html"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Also, use only one part in each wsdl:message (to comply with&amp;nbsp;WS-I Basic Profile) and set the message part attribute @name = "parameters" to make the messages document/literal wrapped, versus bare.&amp;nbsp; If you're not sure, you want wrapped.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Finally, another tip: when using collections in service interfaces (or more specifically, data contracts), you can use the svcutil.exe tool to specify that collections be represented in the generated .NET code as one of the Generic collection types, rather than a vanilla array.&amp;nbsp; This is done with the /collectionType option on the svcutil.exe command line.&amp;nbsp; See &lt;A class="" href="http://www.request-response.com/blog/PermaLink,guid,ff5fab81-affb-4b2b-aa67-c80bdfc86cbd.aspx" mce_href="http://www.request-response.com/blog/PermaLink,guid,ff5fab81-affb-4b2b-aa67-c80bdfc86cbd.aspx"&gt;this post&lt;/A&gt; for more detail on that idea. &lt;/P&gt;
&lt;P mce_keep="true"&gt;I think there might be a similar codegen hint on other web services toolkits but I could not find the right switch on AXIS2.&amp;nbsp; &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8923642" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx">Java</category></item><item><title>Web services interop with WCF - Relevant Forum Questions</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/04/wcf-interop-forum-questions.aspx</link><pubDate>Thu, 04 Sep 2008 17:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8895668</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8895668.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8895668</wfw:commentRss><description>&lt;P&gt;I was just browsing the &lt;A href="http://forums.microsoft.com/msdn/ShowForum.aspx?ForumID=118&amp;amp;SiteID=1"&gt;WCF forum&lt;/A&gt; on MSDN. Here's a summary of the recent interesting threads dealing with interop:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3790715&amp;amp;SiteID=1" mce_href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3790715&amp;amp;SiteID=1"&gt;How to map complex data types exposed by a J2EE web services, into a WCF client?&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3783287&amp;amp;SiteID=1" mce_href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3783287&amp;amp;SiteID=1"&gt;How to use connect from an AXIS 2 client to a WCF service using SSL?&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3790825&amp;amp;SiteID=1"&gt;How to transfer a Hashtable or Vector&lt;T&gt; over web services?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3338236&amp;amp;SiteID=1"&gt;How to transfer a Fault from WebLogic/Java to a WCF client&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3831985&amp;amp;SiteID=1&amp;amp;mode=1"&gt;How to tell svcutil.exe to use existing types when generating proxy classes&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3655359&amp;amp;SiteID=1"&gt;Contract-first design with WCF and the svcutil.exe tool (Generating service stubs)&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Check it out.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8895668" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/AXIS/default.aspx">AXIS</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Links/default.aspx">Links</category></item><item><title>How to Build REST apps on .NET using WCF</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/08/22/how-to-build-rest-apps-on-net-using-wcf.aspx</link><pubDate>Fri, 22 Aug 2008 19:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8888182</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8888182.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8888182</wfw:commentRss><description>&lt;FONT color=#1f497d&gt;
&lt;P&gt;There's a new screencast series on building services using the WCF part of .NET.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The first few are already available.&amp;nbsp; The first one is the basic "Hello World" example, the next couple cover REST: &amp;nbsp;&lt;/P&gt;
&lt;DIV style="MARGIN-LEFT: 0.5in"&gt;
&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/posts/cliff.simpkins/Endpoint-Screencasts-Creating-Your-First-WCF-Service/" mce_href="http://channel9.msdn.com/posts/cliff.simpkins/Endpoint-Screencasts-Creating-Your-First-WCF-Service/"&gt;How to build a WCF Service using Visual Studio 2008, and .NET 3.5.&lt;/A&gt; (10 minutes)&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/posts/RobBagby/deCast-Creating-a-HI-REST-GET-Service-with-WCF-35/" mce_href="http://channel9.msdn.com/posts/RobBagby/deCast-Creating-a-HI-REST-GET-Service-with-WCF-35/"&gt;Creating a HI-REST GET Service with WCF 3.5 sp1&lt;/A&gt; (15 minutes)&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/posts/RobBagby/deCast-Consuming-a-HI-REST-GET-Service-From-Silverlight-2-Beta-2/" mce_href="http://channel9.msdn.com/posts/RobBagby/deCast-Consuming-a-HI-REST-GET-Service-From-Silverlight-2-Beta-2/"&gt;Consuming a HI-REST GET Service From Silverlight 2 (Beta 2)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://channel9.msdn.com/posts/rojacobs/endpointtv-Controlling-the-URI-in-RESTful-WCF-with-Rob-Bagby/"&gt;How to Shape the URI in REST services built on WCF&lt;/A&gt; (See also, the accompanying &lt;A href="http://blogs.msdn.com/endpoint/archive/2008/08/22/rest-in-wcf-part-ix-controlling-the-uri.aspx"&gt;blog post&lt;/A&gt;.)&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;There will be more to come, too, covering Content Negotiation, Atom, and more. Stay tuned!&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8888182" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx">REST</category></item><item><title>Facebook Thrift, Google ProtoBufs, and Interop</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/07/10/facebook-thrift-google-protobufs-and-interop.aspx</link><pubDate>Thu, 10 Jul 2008 21:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8718231</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8718231.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8718231</wfw:commentRss><description>&lt;P&gt;Dare had an &lt;A class="" href="http://www.25hoursaday.com/weblog/2008/07/10/TheRevengeOfRPCGoogleProtocolBuffersAndFacebookThrift.aspx" mce_href="http://www.25hoursaday.com/weblog/2008/07/10/TheRevengeOfRPCGoogleProtocolBuffersAndFacebookThrift.aspx"&gt;en-pointe analysis&lt;/A&gt; of the emergence of various new non-standarcd communications protocols, such as &lt;A class="" href="http://developers.facebook.com/thrift/" mce_href="http://developers.facebook.com/thrift/"&gt;Facebook Thrift&lt;/A&gt; and &lt;A class="" href="http://code.google.com/p/protobuf/" mce_href="http://code.google.com/p/protobuf/"&gt;Google Protocol buffers&lt;/A&gt;, and how they compare to the standards-based comms protocols like RSS, ATOM or even WS-*.&amp;nbsp; Dare correctly points out that these tools can be useful if you tightly control the endpoints involved in the communication, and, if you're certain the set of communicating endpoints&amp;nbsp;will never expand to include anything you don't tightly control (acquisition?&amp;nbsp;partner?).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;[I updated this blog entry a couple days after it was first published.&amp;nbsp; The text added is enclosed in square brackets.]&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;After one is accustomed to fire and police protection, and very smooth roads, and&amp;nbsp;storm sewers that keep the roads clear when it rains, it can be easy to forget, and to&amp;nbsp;chafe under the income tax burden that keeps all those government systems functioning.&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the same way, paying the angle-bracket-tax can get annoying after a while, too.&amp;nbsp; Starting in 1999 or so, we, as an industry, moved away from binary &lt;EM&gt;[remote-procedure call]&lt;/EM&gt; protocols such as those dragged in by DCE RPC, CORBA IIOP, Microsoft DCOM, or Java RMI.&amp;nbsp; Instead we have invested heavily in the development of tools and frameworks&amp;nbsp;&amp;nbsp;that use an XML-based message-passing paradigm to improve interop.&amp;nbsp; We achieved critical mass on &lt;EM&gt;[message-based]&lt;/EM&gt;communication standards, and everyone was happy.&amp;nbsp; Except now some of us are not, and we apparently want RPC again. &lt;/P&gt;
&lt;P&gt;We want binary serialization because it is so darn efficient.&amp;nbsp; We want opaque data formats because those angle brackets are just so tiresome. &lt;/P&gt;
&lt;P&gt;Well, we embrace those efficiencies at our peril.&amp;nbsp; We have been here before!&amp;nbsp;&amp;nbsp; I am not saying that there is no place for Protocol Bugg^H^Hffers.&amp;nbsp; What I am saying is that we as an industry shifted to XML-based message passing for a good reason, and that reason has not disappeared.&amp;nbsp; We're used to the smooth roads and working sewers.&amp;nbsp; Let's not have a revolution and toss all that aside.&amp;nbsp; Use optimized communications where it makes sense.&amp;nbsp;&lt;EM&gt;[And don't drag in RPC when all we want is binary serialization.]&lt;/EM&gt; &amp;nbsp;Dare shows the way.&lt;/P&gt;
&lt;P&gt;Last thing - just dreaming a bit here... wouldn't it be cool for developers if there was a single programming framework that could do angle brackets as well as optimized binary transfers?&amp;nbsp;&lt;EM&gt;[And everything was a message? Not a remote procedure call in sight?]&lt;/EM&gt; &amp;nbsp;Wouldn't it be cool if you could code it once, and then select the serialization mechanism at configuration time, in metadata.&amp;nbsp; Wait, wouldn't it be even coooler if .. this is gonna sound crazy, but.... wouldn't it be cool if we could have multiple communication endpoints running at the same time, each dedicated to a different wire protocol, but using the same backing business logic.&amp;nbsp; One endpoint could speak XML, another could speak binary, and they could run at the same time.&amp;nbsp; &amp;nbsp; &lt;A class="" href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx" mce_href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;That &lt;EM&gt;would &lt;/EM&gt;be cool&lt;/A&gt;, wouldn't it? &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8718231" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category></item><item><title>New WCF + WF blog:  Endpoint</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/07/07/new-wcf-wf-blog-endpoint.aspx</link><pubDate>Mon, 07 Jul 2008 18:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8693830</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8693830.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8693830</wfw:commentRss><description>&lt;P&gt;A &lt;A class="" href="http://blogs.msdn.com/endpoint" mce_href="http://blogs.msdn.com/endpoint"&gt;New Blog&lt;/A&gt; started last week, aggregating WCF and WF topics.&amp;nbsp; If you're like me you have really good intentions about reading blogs, you have your subscriptions all organized, you download the content through outlook daily... but then when it comes down to it, it's hard to keep up with reading them all. &lt;/P&gt;
&lt;P&gt;Now there's &lt;STRONG&gt;&lt;EM&gt;one blog&lt;/EM&gt;&lt;/STRONG&gt; to subscribe to for WCF and WF stuff.&amp;nbsp; &lt;A class="" href="http://blogs.msdn.com/endpoint" mce_href="http://blogs.msdn.com/endpoint"&gt;Endpoint&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;This one is run by my colleague, Cliff Simpkins, but it's not a one-man-show.&amp;nbsp; He posts his own stuff, but he also aggregates content from other places and brings in guest posters.&amp;nbsp; This should be really good.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8693830" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WF/default.aspx">WF</category></item><item><title>Varying Content-Type according to the URL in a WCF REST Service</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/04/03/varying-content-type-according-to-the-url-in-wcf-rest-service.aspx</link><pubDate>Thu, 03 Apr 2008 18:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8351948</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8351948.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8351948</wfw:commentRss><description>&lt;font family="Calibri"&gt;&lt;size=3&gt;
&lt;/size=3&gt;&lt;/font&gt;
&lt;p&gt;&lt;font family="Calibri"&gt;My buddy Justin &lt;a href="http://blogs.msdn.com/justinjsmith/archive/2007/08/22/setting-http-headers-in-wcf-net-3-5.aspx" class="" mce_href="http://blogs.msdn.com/justinjsmith/archive/2007/08/22/setting-http-headers-in-wcf-net-3-5.aspx"&gt;wrote about how to set the Content-Type&amp;nbsp;headers&lt;/a&gt; in a WebGet method in a WCF REST app. Doing this would allow each WebGet method to specify its own Content-Type at runtime.&amp;nbsp; &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font family="Calibri"&gt;After I summarized how to build a WCF REST app in a post a couple weeks ago, Kyle Beyer asked if there was a way to avoid hard-coding the Content-Type in the WebGet attribute on the method. &lt;/font&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;font family="Calibri"&gt;One question ... Do you know of a way to get a WCF service to honor the 'Content-Type' HTTP header instead of hard coding the content type via an attribute on the method? I would really like to create a service that has a single set of methods which returns JSON/XML based on the HTTP header(s) ... suggestions? &lt;/font&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;font family="Calibri"&gt;Taking a page from the White House Press spokesperson, rather than answering Kyle's question, I'm going to answer a different question, a question&amp;nbsp;&lt;i&gt;I would like &lt;/i&gt;to answer.&amp;nbsp;&amp;nbsp;The question I will answer is, &lt;i&gt;how can I create a service that has a single set of methods that returns JSON or XML depending on the URL tickled (and not on the Accept header)? &lt;/i&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font family="Calibri"&gt;This is a little different than what Kyle wants, but it may be good enough.&amp;nbsp; What I mean is this:&amp;nbsp; a single method decorated with [WebGet] can deliver JSON or XML, depending on the URI.&amp;nbsp; We can specify &lt;a href="http://server/Foo/3782982/json"&gt;http://server/Foo/3782982/json&lt;/a&gt; and get json, or specify &lt;a href="http://server/Foo/3782982/xml"&gt;http://server/Foo/3782982/xml&lt;/a&gt; and get plain-old-XML.&amp;nbsp; &lt;/font&gt;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&lt;font family="Calibri"&gt;We can do this without any extra code in the Operation method itself.&amp;nbsp; In fact the operation method doesn't care whether it is JSON or XML.&amp;nbsp; How do we pull this off? &lt;/font&gt;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&lt;font family="Calibri"&gt;My trick was to use a custom ServiceHost.&amp;nbsp; It automagically enables Content-Type selection by URL, for all WebGet&lt;br&gt;operations that are decorated with a special marker attribute.&amp;nbsp; (ionic.samples.WcfRest.DynamicContentType).&amp;nbsp; &lt;/font&gt;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&lt;font family="Calibri"&gt;The service host works its magic by cloning the OperationDescription for all operations in the service contract that are specially marked.&amp;nbsp; One copy of the OperationDescription gets WebMessageFormat.Xml and the other gets WebMessageFormat.Json.&amp;nbsp;They get differing UriTemplates so WCF can disambiguate (double word score).&amp;nbsp; Both clones point to the same method in the service class, so there is no duplication of application code.&lt;/font&gt;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&lt;font family="Calibri"&gt;Here's what the service host looks like:&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;div style="border: 1pt solid windowtext; padding: 2pt; background: white none repeat scroll 0% 0%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: Consolas,Courier New; line-height: 98%;"&gt;



&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&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: rgb(43, 145, 175);"&gt;MagicContentTypeSelectingServiceHost&lt;/span&gt; : ServiceHost&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; MagicContentTypeSelectingServiceHost(&lt;span style="color: rgb(43, 145, 175);"&gt;Type&lt;/span&gt; t, &lt;span style="color: blue;"&gt;params&lt;/span&gt; Uri[] baseAddrs) : &lt;span style="color: blue;"&gt;base&lt;/span&gt;(t, baseAddrs) { }&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; MagicContentTypeSelectingServiceHost(&lt;span style="color: blue;"&gt;object&lt;/span&gt; singletonInstance, &lt;span style="color: blue;"&gt;params&lt;/span&gt; Uri[] baseAddresses)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&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;base&lt;/span&gt;(singletonInstance, baseAddresses) { }&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; MagicContentTypeSelectingServiceHost() : &lt;span style="color: blue;"&gt;base&lt;/span&gt;() { }&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; OnOpening()&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TraceMe(&lt;span style="color: rgb(163, 21, 21);"&gt;""&lt;/span&gt;);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TraceMe(&lt;span style="color: rgb(163, 21, 21);"&gt;""&lt;/span&gt;);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ServiceEndpointCollection sec = &lt;span style="color: blue;"&gt;this&lt;/span&gt;.Description.Endpoints;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&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;foreach&lt;/span&gt; (ServiceEndpoint se &lt;span style="color: blue;"&gt;in&lt;/span&gt; sec)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; TraceMe(&lt;span style="color: rgb(163, 21, 21);"&gt;"Endpoint: "&lt;/span&gt;);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; TraceMe(&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;nbsp; Address: {0}"&lt;/span&gt;, se.Address.ToString());&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; TraceMe(&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;nbsp; Contract: {0}"&lt;/span&gt;, se.Contract.ToString());&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;var&lt;/span&gt; opsToAdd = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;List&lt;/span&gt;&amp;lt;OperationDescription&amp;gt;();&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (OperationDescription opDesc &lt;span style="color: blue;"&gt;in&lt;/span&gt; se.Contract.Operations)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; {&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;object&lt;/span&gt;[] attrs = opDesc.SyncMethod.GetCustomAttributes(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(ionic.samples.WcfRest.DynamicContentType), &lt;span style="color: blue;"&gt;false&lt;/span&gt;);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;if&lt;/span&gt; ((attrs != &lt;span style="color: blue;"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (attrs.Length == 1))&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; {&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; TraceMe(&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;nbsp; operation: {0}"&lt;/span&gt;, opDesc.Name);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; TraceMe(&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;nbsp;&amp;nbsp;&amp;nbsp; Marked with {0} attribute"&lt;/span&gt;, &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(ionic.samples.WcfRest.DynamicContentType));&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; WebGetAttribute wga =&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; opDesc.Behaviors.Find&amp;lt;WebGetAttribute&amp;gt;();&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; (wga != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (wga.IsResponseFormatSetExplicitly)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; {&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &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: rgb(43, 145, 175);"&gt;Exception&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; (&lt;span style="color: rgb(43, 145, 175);"&gt;String&lt;/span&gt;.Format(&lt;span style="color: rgb(163, 21, 21);"&gt;"On method '{0}', there are conflicting attributes. When using the "&lt;/span&gt; +&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: rgb(163, 21, 21);"&gt;"custom service host {1}, on a method that is marked with {2}, the "&lt;/span&gt; +&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: rgb(163, 21, 21);"&gt;"ResponseFormat in the WebGet attribute must be omitted."&lt;/span&gt;,&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; opDesc.Name,&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.GetType().ToString(),&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;47&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(ionic.samples.WcfRest.DynamicContentType)));&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;49&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; }&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;50&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;51&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; TraceMe(&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;nbsp;&amp;nbsp;&amp;nbsp; Cloning this operation ..."&lt;/span&gt;);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;52&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;53&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: green;"&gt;// Now, clone this OperationDescription.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;54&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: green;"&gt;// We can copy references to all properties, except those we are changing. &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;55&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: green;"&gt;// The only thing that is changing is the WebGetAttribute, so &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;56&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: green;"&gt;// we must actually new up one of those. &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;57&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;58&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; OperationDescription od = &lt;span style="color: blue;"&gt;new&lt;/span&gt; OperationDescription(opDesc.Name + &lt;span style="color: rgb(163, 21, 21);"&gt;".clone"&lt;/span&gt;, opDesc.DeclaringContract);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;59&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;60&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;string&lt;/span&gt; rootTemplate = wga.UriTemplate;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;61&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; WebGetAttribute wga2 = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;62&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (System.ServiceModel.Description.IOperationBehavior b &lt;span style="color: blue;"&gt;in&lt;/span&gt; opDesc.Behaviors)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;63&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; {&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;64&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;if&lt;/span&gt; ((b &lt;span style="color: blue;"&gt;as&lt;/span&gt; System.ServiceModel.Web.WebGetAttribute) != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;65&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; {&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;66&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; wga2 = &lt;span style="color: blue;"&gt;new&lt;/span&gt; WebGetAttribute();&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;67&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (wga.IsBodyStyleSetExplicitly)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;68&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; wga2.BodyStyle = wga.BodyStyle;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;69&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;70&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (wga.IsRequestFormatSetExplicitly)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;71&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; wga2.RequestFormat = wga.RequestFormat;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;72&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;73&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: green;"&gt;// Now, differentiate the two WebGetAttribute instances with the ResponseFormat.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;74&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: green;"&gt;// The original OperationDescription gets XML, the clone gets JSON&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;75&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; wga.ResponseFormat = WebMessageFormat.Xml;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;76&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; wga2.ResponseFormat = WebMessageFormat.Json;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;77&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; wga.UriTemplate = rootTemplate + &lt;span style="color: rgb(163, 21, 21);"&gt;"/xml"&lt;/span&gt;;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;78&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; wga2.UriTemplate = rootTemplate + &lt;span style="color: rgb(163, 21, 21);"&gt;"/json"&lt;/span&gt;;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;79&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;80&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; od.Behaviors.Add(wga2);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;81&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;82&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; }&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;83&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;84&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; od.Behaviors.Add(b);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;85&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; }&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;86&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;87&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (System.ServiceModel.Description.MessageDescription md &lt;span style="color: blue;"&gt;in&lt;/span&gt; opDesc.Messages)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;88&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; od.Messages.Add(md);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;89&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;90&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (System.ServiceModel.Description.FaultDescription fd &lt;span style="color: blue;"&gt;in&lt;/span&gt; opDesc.Faults)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;91&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; od.Faults.Add(fd);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;92&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;93&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; od.SyncMethod = opDesc.SyncMethod;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;94&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;95&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: green;"&gt;// remember to add this OperationDescription to the service contract&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;96&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; opsToAdd.Add(od);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;97&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;98&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; }&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;99&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; }&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;100&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;101&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: green;"&gt;// add the cloned operation descriptions to the ServiceContract&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;102&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (OperationDescription od &lt;span style="color: blue;"&gt;in&lt;/span&gt; opsToAdd)&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;103&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&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; se.Contract.Operations.Add(od);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;104&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;105&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&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;base&lt;/span&gt;.OnOpening();&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;106&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;107&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TraceMe(&lt;span style="color: rgb(163, 21, 21);"&gt;""&lt;/span&gt;);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;108&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TraceMe(&lt;span style="color: rgb(163, 21, 21);"&gt;""&lt;/span&gt;);&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;109&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;110&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;111&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p mce_keep="true"&gt;&lt;font family="Calibri"&gt;You can see on lines 58 through 96, the OperationDescription for a marked operation gets cloned. Then on line 103, the cloned operation gets added into the ServiceContract.&amp;nbsp; &lt;/font&gt;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&lt;font family="Calibri"&gt;The operation in the service interface looks the same as any operation, except it is marked with an attribute, like this: &lt;/font&gt;&lt;/p&gt;


&lt;div style="border: 1pt solid windowtext; padding: 2pt; background: white none repeat scroll 0% 0%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: Consolas,Courier New; line-height: 98%;"&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; [OperationContract]&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; [ionic.samples.WcfRest.DynamicContentType]&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; [WebGet(&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; BodyStyle = WebMessageBodyStyle.Bare,&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UriTemplate = &lt;span style="color: rgb(163, 21, 21);"&gt;"dyn/{orderId}"&lt;/span&gt;)]&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/font&gt;&lt;/span&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; ReplyMsg GetOrderInfoEx(&lt;span style="color: blue;"&gt;string&lt;/span&gt; orderId);&lt;/font&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p mce_keep="true"&gt;&lt;font family="Calibri"&gt;The UriTemplate gets changed transparently at runtime by the custom service host.&amp;nbsp; The effective UriTemplate is "dyn/{orderId}/json" for the JSON flavor, and "dyn/{orderId}/xml for the plain-old-XML flavor. &lt;/font&gt;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&lt;font family="Calibri"&gt;This service host works in self-hosted apps as well as those hosted within IIS. Not exactly what Kyle asked for but this could do the trick for some of you.&amp;nbsp; The code is attached to this post.&lt;/font&gt;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&lt;font family="Calibri"&gt;Be sure to test thoroughly before you use this in production apps. &lt;/font&gt;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&lt;font family="Calibri"&gt;Cheers!&lt;/font&gt;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&lt;font family="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font family="Calibri"&gt;&lt;font color="red"&gt;&lt;i&gt;[Addendum: I think you may be able to modify this custom &lt;a href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx"&gt;ServiceHost&lt;/a&gt; idea slightly to do Content-Type negotiation based on the Accept header. You may be able to use the a slightly modified version of this ServiceHost, that clones specially marked OperationDescriptions. Along with that, add an &lt;a href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.description.iendpointbehavior.aspx"&gt;IEndpointBehavior&lt;/a&gt; that sets a modified &lt;a href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.dispatcher.dispatchruntime.operationselector.aspx"&gt;OperationSelector&lt;/a&gt;. Then, within your own selector you could examine the request headers and then choose the operation you want.]&lt;/i&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;font family="Calibri"&gt;&lt;/font&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8351948" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/dotnetinterop/attachment/8351948.ashx" length="6788" type="text/plain" /><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx">Interop</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/JSON/default.aspx">JSON</category></item></channel></rss>