<?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 : Interop</title><link>http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx</link><description>Tags: Interop</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><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>Connect WebSphere and Java applications to SQL Server</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/11/05/websphere-and-sql-server.aspx</link><pubDate>Thu, 06 Nov 2008 00:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9045267</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/9045267.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=9045267</wfw:commentRss><description>&lt;p&gt;FYI: The MS JDBC Driver is completely tested by IBM for use with WebSphere App Server v6.1 and v7.0. &lt;/p&gt;&lt;p&gt;From the &lt;a href="http://www-01.ibm.com/common/ssi/rep_ca/6/897/ENUS208-266/index.html" mce_href="http://www-01.ibm.com/common/ssi/rep_ca/6/897/ENUS208-266/index.html"&gt;IBM Announcement for WebSphere Application Server v7.0&lt;/a&gt;:&amp;nbsp; &lt;br&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;WebSphere Application Server V7.0 does not include the WebSphere Connect JDBC driver that had been provided in WebSphere Application Server V6.1. To replace the functionality provided by the WebSphere Connect JDBC driver, WebSphere Application Server V7.0 is tested with the DataDirect Connect for JDBC driver and the &lt;a href="http://msdn.microsoft.com/en-us/data/aa937724.aspx" mce_href="http://msdn.microsoft.com/en-us/data/aa937724.aspx"&gt;Microsoft SQL Server JDBC Driver&lt;/a&gt;, which may be obtained from DataDirect Technologies or Microsoft.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Connect your WebSphere/Java apps to SQL Server with this driver.&amp;nbsp; Actually, you can connect *any* Java application to SQL this way - it doesn't have to be running in WebSphere.&amp;nbsp; If you develop in Jetty or Tomcat or JBoss or Geronimo, the MS JDBC Driver will work fine for you.&amp;nbsp; &lt;br&gt;&lt;/p&gt;&lt;p&gt;If you have .NET applications, or Office apps, of course you can connect them to SQL Server also. In this way, SQL Server can serve as a nice interop point between Java and .NET applications, or between Java and MS Office (Let's say... an Excel spreadsheet). &lt;/p&gt;&lt;p&gt;Some notes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;the MS JDBC Driver is a &lt;a href="http://rds.yahoo.com/_ylt=A0oGkjdKFxJJ7hIA5YtXNyoA;_ylu=X3oDMTByZWgwN285BHNlYwNzcgRwb3MDMQRjb2xvA3NrMQR2dGlkAw--/SIG=144ld1cf6/EXP=1226008778/**http%3a//www.microsoft.com/downloads/details.aspx%3ffamilyid=C47053EB-3B64-4794-950D-81E1EC91C1BA%26displaylang=en" mce_href="http://rds.yahoo.com/_ylt=A0oGkjdKFxJJ7hIA5YtXNyoA;_ylu=X3oDMTByZWgwN285BHNlYwNzcgRwb3MDMQRjb2xvA3NrMQR2dGlkAw--/SIG=144ld1cf6/EXP=1226008778/**http%3a//www.microsoft.com/downloads/details.aspx%3ffamilyid=C47053EB-3B64-4794-950D-81E1EC91C1BA%26displaylang=en"&gt;free download&lt;/a&gt;.&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/li&gt;&lt;li&gt;It is a full type-4 (100% Java) JDBC 3.0 driver, fully tested and compliant with Sun's verification suite.&lt;br&gt;&lt;/li&gt;&lt;li&gt;It connects to SQL Server 2000, 2005 or 2008&lt;/li&gt;&lt;li&gt;It works from any JVM on any OS platform, including Linux&lt;br&gt;&lt;/li&gt;&lt;li&gt;It works with the &lt;a href="http://rds.yahoo.com/_ylt=A0oGkmoLGhJJ9jQBcdJXNyoA;_ylu=X3oDMTByZWgwN285BHNlYwNzcgRwb3MDMQRjb2xvA3NrMQR2dGlkAw--/SIG=12eehnovf/EXP=1226009483/**http%3a//www.microsoft.com/sql/editions/express/default.mspx" mce_href="http://rds.yahoo.com/_ylt=A0oGkmoLGhJJ9jQBcdJXNyoA;_ylu=X3oDMTByZWgwN285BHNlYwNzcgRwb3MDMQRjb2xvA3NrMQR2dGlkAw--/SIG=12eehnovf/EXP=1226009483/**http%3a//www.microsoft.com/sql/editions/express/default.mspx"&gt;Express version of SQL Server&lt;/a&gt; (which is also a free download) and it works with the Standard and Enterprise versions, too.&lt;/li&gt;&lt;li&gt;There is &lt;a href="http://forums.microsoft.com/msdn/ShowForum.aspx?ForumID=87&amp;amp;SiteID=1" mce_href="http://forums.microsoft.com/msdn/ShowForum.aspx?ForumID=87&amp;amp;SiteID=1"&gt;forum support available for the driver&lt;/a&gt;&lt;/li&gt;&lt;li&gt;There's a tech preview of a JDBC 4.0 compliant driver, &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=f914793a-6fb4-475f-9537-b8fcb776befd&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=f914793a-6fb4-475f-9537-b8fcb776befd&amp;amp;displaylang=en"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;If this is the sort of thing that interests you, be sure to check the &lt;a href="http://blogs.msdn.com/jdbcteam" mce_href="http://blogs.msdn.com/jdbcteam"&gt;team blog for the JDBC driver&lt;/a&gt;. &lt;br&gt;&lt;br&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9045267" 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/IBM/default.aspx">IBM</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/SQL/default.aspx">SQL</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>Microsoft joins AMQP</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/10/24/microsoft-joins-amqp.aspx</link><pubDate>Sat, 25 Oct 2008 00:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9015255</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/9015255.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=9015255</wfw:commentRss><description>
&lt;p&gt;&lt;a href="http://news.cnet.com/8301-1001_3-10074575-92.html" mce_href="http://news.cnet.com/8301-1001_3-10074575-92.html"&gt;Microsoft joins AMQP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It's very good to see this. For those that don't know, AMQP is the &lt;a href="http://jira.amqp.org/confluence/display/AMQP/Advanced+Message+Queuing+Protocol" mce_href="http://jira.amqp.org/confluence/display/AMQP/Advanced+Message+Queuing+Protocol"&gt;Advanced Message Queuing Protocol&lt;/a&gt;, a nascent middleware standard that describes an interoperable protocol for application messaging systems.  Driven primarily by companies, and not by vendors, AMQP aims to introduce new innovation, more competition, and better interop between messaging subsystems.&amp;nbsp; &lt;br&gt;&lt;/p&gt;
&lt;p&gt;If you've read any of my other blog postings you know that interop and messaging systems are near and dear to my heart.&amp;nbsp; This is very good indeed for customers who build and run enterprise information systems with a great deal of heterogeneity. Imagine if MSMQ and the messaging infrastructure on RedHat Enterprise Linux used the same on-the-wire protocol, and supported the same service semantics.&amp;nbsp; This would mean your messaging clients could talk to either message service with full interoperability and switchability.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Some nice possibilities here. Great to see it being driven so much by the companies themselves. &lt;br&gt;&lt;/p&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9015255" 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/MSMQ/default.aspx">MSMQ</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Standards/default.aspx">Standards</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/AMQP/default.aspx">AMQP</category></item><item><title>IIRF v1.2.15 is released - open source URL Rewriting on IIS6</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/10/15/iirf-v1-2-15-is-released-open-source-url-rewriting-on-iis6.aspx</link><pubDate>Wed, 15 Oct 2008 17:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9000075</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/9000075.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=9000075</wfw:commentRss><description>&lt;P&gt;I have &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/2008/06/18/rewriting-urls-on-iis5-iis6-or-iis7-mod-rewrite-on-iis.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2008/06/18/rewriting-urls-on-iis5-iis6-or-iis7-mod-rewrite-on-iis.aspx"&gt;previously written about IIRF&lt;/A&gt;.&amp;nbsp;&amp;nbsp; Here I go again:&amp;nbsp; IIRF has now has been updated to v1.2.15.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;IIRF is &lt;STRONG&gt;&lt;A class="" href="http://www.codeplex.com/IIRF" mce_href="http://www.codeplex.com/IIRF"&gt;Ionic's Isapi Rewrite Filter&lt;/A&gt;.&amp;nbsp; &lt;/STRONG&gt;It&amp;nbsp;is a small, cheap, easy to use, URL rewriting ISAPI filter that combines a good price (free!) with good features. It is fast and powerful. It works on IIS 5.0, 5.1, 6.0, and 7.0.&lt;/P&gt;
&lt;P&gt;You may have heard about the &lt;A class="" href="http://blogs.iis.net/bills/archive/2008/05/31/urlrewrite-module-for-iis7.aspx" mce_href="http://blogs.iis.net/bills/archive/2008/05/31/urlrewrite-module-for-iis7.aspx"&gt;Rewriting Module for IIS7&lt;/A&gt;&amp;nbsp;from Microsoft.&amp;nbsp; This is not that thing.&amp;nbsp; This is a rewriter for IIS6 or 7.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;It works with regular expressions. It's fast.&amp;nbsp; It's written in C. It's open source.&amp;nbsp; It does not require the .NET Framework.&amp;nbsp; It works with PHP, Ruby, ColdFusion, JSP, ASP.NET, and anything else you can run on IIS. &lt;/P&gt;
&lt;P&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=9000075" 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/IIS/default.aspx">IIS</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/IIRF/default.aspx">IIRF</category></item><item><title>DotNetZip revs to v1.6 – now with Unicode support</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/10/14/dotnetzip-revs-to-v1-6-now-with-unicode-support.aspx</link><pubDate>Wed, 15 Oct 2008 00:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9000101</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/9000101.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=9000101</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;The v1.6 release of DotNetZip is now available.&amp;nbsp; DotNetZip is the open source Zip Library for .NET, available at &lt;A href="http://www.codeplex.com/DotNetZip" mce_href="http://www.codeplex.com/DotNetZip"&gt;&lt;SPAN style="COLOR: blue; TEXT-DECORATION: underline"&gt;http://www.codeplex.com/DotNetZip&lt;/SPAN&gt;&lt;/A&gt; . &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Major new features: &lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Unicode support, as well as support for arbitrary code pages. Now you can build zip files that have names with Unicode characters. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Large file support.&amp;nbsp; Full streaming architecture means you can zip large files without loading them into memory all at one time. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Partial Trust&amp;nbsp; - for running on shared hosetd ASP.NET servers&amp;nbsp; &lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;DotNetZip is still small, fast, and the easiest .NET zip library to use. Check this sample code:&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;PRE&gt;      &lt;SPAN style="COLOR: #a020f0"&gt;using&lt;/SPAN&gt; (&lt;SPAN style="COLOR: #228b22"&gt;var&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;zip&lt;/SPAN&gt; = &lt;SPAN style="COLOR: #a020f0"&gt;new&lt;/SPAN&gt; ZipFile())
      {
        &lt;SPAN style="COLOR: #5f9ea0"&gt;zip&lt;/SPAN&gt;.AddDirectory(directory);
        &lt;SPAN style="COLOR: #5f9ea0"&gt;zip&lt;/SPAN&gt;.Save(targetZip);
      }
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;It is 100% managed code. People love it: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: center"&gt;&lt;IMG alt="" src="http://blogs.msdn.com/blogfiles/dotnetinterop/101408_2152_DotNetZipre1.png" mce_src="http://blogs.msdn.com/blogfiles/dotnetinterop/101408_2152_DotNetZipre1.png"&gt; &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;DotNetZip is powerful, too: it does password-protected zip files, zip comments, self-extracting zips, zip-to-stream, stream-to-zip, and more.&amp;nbsp; You can use it in any .NET app - WinForms, console app, ASP.NET page, etc.&amp;nbsp; In ASP.NET, you can write a zip archive directly to Response.OutputStream as a download to the browser client. On the codeplex site, there are lots of examples and the documentation is solid. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;DotNetZip is free, but is &lt;A href="http://en.wikipedia.org/wiki/Donationware" mce_href="http://en.wikipedia.org/wiki/Donationware"&gt;&lt;SPAN style="COLOR: #666666; TEXT-DECORATION: underline"&gt;donationware&lt;/SPAN&gt;&lt;/A&gt;. For those who are happy with DotNetZip, I am &lt;A href="http://cheeso.members.winisp.net/DotNetZipDonate.aspx" mce_href="http://cheeso.members.winisp.net/DotNetZipDonate.aspx"&gt;&lt;SPAN style="COLOR: #666666; TEXT-DECORATION: underline"&gt;accepting donations&lt;/SPAN&gt;&lt;/A&gt; on behalf of my favorite charity. &lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9000101" 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/Zip/default.aspx">Zip</category></item><item><title>Eclipse tools for Silverlight and .NET</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/10/13/eclipse-tools-for-silverlight-and-net.aspx</link><pubDate>Mon, 13 Oct 2008 23:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8998523</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8998523.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8998523</wfw:commentRss><description>&lt;P&gt;There is now an Eclipse project, &lt;A class="" href="http://www.eclipse4sl.org/" mce_href="http://www.eclipse4sl.org/"&gt;Eclipse4SL&lt;/A&gt;,&amp;nbsp;to produce tools that work with &lt;A class="" href="http://www.microsoft.com/silverlight" mce_href="http://www.microsoft.com/silverlight"&gt;Microsoft Silverlight&lt;/A&gt;.&amp;nbsp; See &lt;A class="" href="http://blogs.msdn.com/neilhut/archive/2008/10/13/eclipse-tools-for-silverlight.aspx" mce_href="http://blogs.msdn.com/neilhut/archive/2008/10/13/eclipse-tools-for-silverlight.aspx"&gt;Neil Hutson's blog post&lt;/A&gt; for some details. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;For those of you who have day jobs and find it hard to keep up with all the code-names and product names coming out of Microsoft, Silverlight is the name a cross-browser, cross-platform, and cross-device plug-in for rich interactive applications for the Web. &lt;EM&gt;Huh?&lt;/EM&gt;&amp;nbsp; Break it down: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Silverlight is a browser plug-in&lt;/STRONG&gt;: Runs in IE, Firefix, Opera, and more.&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;As a plug-in, Silverlight provides a runtime&lt;/STRONG&gt;, which is at it's core, .NET based.&amp;nbsp; It is a lightweight version (subset) of the .NET Framework.&amp;nbsp;When you write declarative code, you'll be using a .NET langauge &amp;nbsp;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Silverlight is cross-platform&lt;/STRONG&gt;: Microsoft produces versions to run on Windows and Mac and the Mono project is doing &lt;A class="" href="http://www.mono-project.com/Moonlight" mce_href="http://www.mono-project.com/Moonlight"&gt;Moonlight for Linux&lt;/A&gt;.&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Silverlight is for Rich Interactive apps&lt;/STRONG&gt;.&amp;nbsp; This means high-def video, audio, hypertext, dynamic data.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Bottom line, Silverlight is like Adobe's Flash, but built on a broad platform (.NET and the CLR) with mainstream language support (C# and VB) as opposed to a relatively narrow platform and runtime requiring ActionScript. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Because Silverlight uses a lightweight NET runtime, if the &lt;A class="" href="http://www.eclipse4sl.org/" mce_href="http://www.eclipse4sl.org/"&gt;Eclipse4SL project&lt;/A&gt; succeeds, developers will be able to use Eclipse&amp;nbsp;tools to create .NET applications. How about that!&amp;nbsp; You will be able to edit &lt;A class="" href="http://www.eclipse4sl.org/images/About_xaml.png" mce_href="http://www.eclipse4sl.org/images/About_xaml.png"&gt;XAML&lt;/A&gt; and &lt;A class="" href="http://www.eclipse4sl.org/images/About_CS.png" mce_href="http://www.eclipse4sl.org/images/About_CS.png"&gt;C# in Eclipse&lt;/A&gt;!&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Milestone 1 for Eclipse4SL is set for this week: October 14th there'll be a CTP of the tools. Feature complete in December.&amp;nbsp; Nice!&amp;nbsp; I love to see this. Love it, love it, love it. &lt;/P&gt;
&lt;P&gt;From the Eclipse4SL website, Interop is a key criterion for success:&amp;nbsp; &lt;EM&gt;&lt;STRONG&gt;Increased Interoperability:&lt;/STRONG&gt; Eclipse will contain functionality that will help Java Developers build Silverlight applications that work better with Java Web Services using REST, SOAP, JSON and other standards.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/EM&gt;There's a company called Soyatec, a longtime Eclipse Foundation member,&amp;nbsp;doing the analysis and development work. &lt;/P&gt;
&lt;P&gt;For my part, I'm so glad we're getting to the point where we all can work together collaboratively to produce interesting stuff for customers.&amp;nbsp;&amp;nbsp; Next milestone:&amp;nbsp; when a proejct like this doesn't warrant blog posts entitled "&lt;A class="" href="http://dev.eclipse.org/blogs/mike/2008/10/13/interesting-times-indeed/" mce_href="http://dev.eclipse.org/blogs/mike/2008/10/13/interesting-times-indeed/"&gt;interesting times indeed&lt;/A&gt;."&amp;nbsp; &lt;/P&gt;
&lt;P&gt;:)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8998523" 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/Java/default.aspx">Java</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Eclipse/default.aspx">Eclipse</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Weblogic JMS with .NET</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/10/09/weblogic-jms-with-net.aspx</link><pubDate>Thu, 09 Oct 2008 18:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8991973</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8991973.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8991973</wfw:commentRss><description>&lt;P&gt;This came out last month, I just learned about it from an email from&amp;nbsp;&lt;A class="" href="http://weblogs.asp.net/gsusx/default.aspx" mce_href="http://weblogs.asp.net/gsusx/default.aspx"&gt;Jesus&lt;/A&gt; today. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;WebLogic Server 10gR3 now has &lt;A class="" href="http://edocs.bea.com/wls/docs103/jms_dotnet/overview.html" mce_href="http://edocs.bea.com/wls/docs103/jms_dotnet/overview.html"&gt;an officially-supported .NET client&lt;/A&gt; for its JMS provider&lt;/STRONG&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;EM&gt;Very cool.&lt;/EM&gt;&amp;nbsp; Some of you might be wondering, &lt;EM&gt;just what does that mean?&amp;nbsp; &lt;/EM&gt;It means there is a queue mechanism in the WebLogic Server, for a long time this has been called "Weblogic JMS".&amp;nbsp; And you can connect to that queue subsystem&amp;nbsp;via .NET applications. James Bayer has a blog entry on it, which you should &lt;A class="" href="http://blogs.oracle.com/jamesbayer/2008/09/jms_with_net_weblogic_server_1.html" mce_href="http://blogs.oracle.com/jamesbayer/2008/09/jms_with_net_weblogic_server_1.html"&gt;check out&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;pet peeve alert!&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp; Calling a queue "JMS" is strange and confusing.&amp;nbsp; It would be like calling the Oracle database "Oracle JDBC"&amp;nbsp;&amp;nbsp; or "Oracle ADO.NET".&amp;nbsp; Oracle Database is not the same as JDBC.&amp;nbsp; JDBC is an API.&amp;nbsp; ADO.NET is the name for an API.&amp;nbsp; The database is not the API.&amp;nbsp; The database (whether Oracle, Microsoft SQL Server, IBM DB2, or something else) exposes mutliple API families - some for Java, some for .NET languages, some for C and C++.&amp;nbsp; The programmatic interfaces are distinct from the implementation.&lt;/P&gt;
&lt;P&gt;With JMS, Sun and the Java guys have confused the issue.&amp;nbsp; Maybe even on purpose: remember back when JMS was conceived, Sun had aspirations to make Java itself &lt;EM&gt;a platform &lt;/EM&gt;- everything contained within Java as other things like the operating system and the database itself, and to the point, a messaging subsystem, recede into the background.&amp;nbsp; Well, that didn't really happen, despite the huge popularity of Java as a programming language.&amp;nbsp;&amp;nbsp; Operating systems still matter, databases still matter, message queues did not get subsumed into the programming language.&amp;nbsp; Java is a language and a VM and a base class library, but not a platform.&amp;nbsp;&amp;nbsp; Regardless, the side effect of Sun's unfulfilled platform aspirations for Java is that today, people call message and queue subsystems "JMS."&amp;nbsp;&amp;nbsp; Developers speak of JMS topics, JMS queues, JMS messages.&amp;nbsp; But it is clear: just as &lt;A class="" href="http://java.sun.com/javase/technologies/database/index.jsp" mce_href="http://java.sun.com/javase/technologies/database/index.jsp"&gt;JDBC is a Sun/Java&amp;nbsp;API for databases&lt;/A&gt;, &amp;nbsp;&lt;A class="" href="http://java.sun.com/products/jms/" mce_href="http://java.sun.com/products/jms/"&gt;JMS is a Java&amp;nbsp;API for Messaging subsystems&lt;/A&gt;.&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;IBM has always been very clear about this with its &lt;A class="" href="http://ibm.com/software/mqseries" mce_href="http://ibm.com/software/mqseries"&gt;MQ product&lt;/A&gt;, later called MQSeries and then changed to "WebSphere MQ".&amp;nbsp;&amp;nbsp; (For this post I'll just call it &lt;STRONG&gt;MQ&lt;/STRONG&gt;.)&amp;nbsp;&amp;nbsp; MQ is the implementation, and MQ exposes a bunch of different APIs - for C, for .NET, for Java, and I'm sure, for other languages.&amp;nbsp; In what looks like a bit of schizophrenia, IBM also has &lt;A class="" href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/ucli_ovrvw.html#ucli_ovrvw" mce_href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/ucli_ovrvw.html#ucli_ovrvw"&gt;message service within WebSphere Application Server&lt;/A&gt;, which is called WebSphere JMS if I am not mistaken, and which... you guessed it, exposes more than just a JMS programming interface.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;For some reason, the queue infrastructure&amp;nbsp;for&amp;nbsp;&lt;EM&gt;some &lt;/EM&gt;products has been called "JMS" as if that is the only API that has ever mattered.&amp;nbsp; Seems like a result of shortsighted and wrongheaded product planning to me.&amp;nbsp; And it's darned confusing, to boot.&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;A separate issue is that JMS is not merely an API!&amp;nbsp; JMS actually injects some&amp;nbsp;message protocol&amp;nbsp;behavior, specifically the RFH2 header formatting stuff, which makes for tricky interop with other, non-Java applications through queue subsystems.&amp;nbsp; Designing JMS this way presented a big, unnecessary obstacle to interop, and &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/search.aspx?q=JMS&amp;amp;p=1" mce_href="http://blogs.msdn.com/dotnetinterop/search.aspx?q=JMS&amp;amp;p=1"&gt;I've blogged on it previously&lt;/A&gt;.&amp;nbsp;&amp;nbsp; IBM has had to introduce &lt;A class="" href="http://www.ibm.com/developerworks/websphere/library/techarticles/0509_phillips/0509_phillips.html" mce_href="http://www.ibm.com/developerworks/websphere/library/techarticles/0509_phillips/0509_phillips.html"&gt;new APIs&lt;/A&gt; for MQ and its other queue subsystems, specifically to work around this interop barrier.&amp;nbsp; I don't know a better way to solve it, than the way IBM did.&amp;nbsp; But make a note to yourself - if you ever design a queue system or queue API, keep the API separate from the application protocol and message formatting. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Check it out!&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=8991973" 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/MQ/default.aspx">MQ</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/JMS/default.aspx">JMS</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Oracle/default.aspx">Oracle</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/WebLogic/default.aspx">WebLogic</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 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>DotNetZip users: Please Test Unicode support (free zip library for .NET)</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/19/test-out-unicode-support-in-dotnetzip-free-zip-library-for-net.aspx</link><pubDate>Fri, 19 Sep 2008 22:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8959335</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8959335.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8959335</wfw:commentRss><description>&lt;P&gt;&lt;A class="" href="http://www.codeplex.com/DotNetZip" mce_href="http://www.codeplex.com/DotNetZip"&gt;DotNetZip&lt;/A&gt; is an open-source library to allow any .NET application to read and create zip files.&amp;nbsp; If you want your ASP.NET page to grab an uploaded zipfile and unpack it on the server, DotNetZip can help you.&amp;nbsp; If you want to generate a zipfile from a server-based app like an ASP.NET page and send it as a download, DotNetZip can be the library you need.&amp;nbsp; If you have a windows forms app or a WPF app that needs to read or write zipfiles, DotNetZip can help.&amp;nbsp; If you have an agent application that watches for files to be dropped into a directory, then zips or unzips them, DotNetZip is the thing you need. &lt;/P&gt;
&lt;P&gt;DotNetZip has been available as an open source project &lt;A class="" href="http://www.codeplex.com/" mce_href="http://www.codeplex.com"&gt;on CodePlex&lt;/A&gt;&amp;nbsp;for about a year. In that time I've added a bunch of features as requested by people who are using it - support for passwords, support for stream-based interfaces, zipfile comments, the ability to remove entries from zip files, progress events for zipping up or unzipping, finer control over the use of compression, and so on.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The &lt;A class="" href="http://www.codeplex.com/DotNetZip/WorkItem/View.aspx?WorkItemId=3152" mce_href="http://www.codeplex.com/DotNetZip/WorkItem/View.aspx?WorkItemId=3152"&gt;#1 most requested feature&lt;/A&gt; for the DotNetZip library is Unicode support - people want to be able to zip up files that have filenames with non-ASCII characters.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I've produced a &lt;A class="" href="http://www.codeplex.com/DotNetZip/Release/ProjectReleases.aspx?ReleaseId=14569" mce_href="http://www.codeplex.com/DotNetZip/Release/ProjectReleases.aspx?ReleaseId=14569"&gt;preliminary release&lt;/A&gt; with support for Unicode, and I'm asking for&amp;nbsp;people to&amp;nbsp;try it out, test it and tell&amp;nbsp;me if this does what they need&amp;nbsp;it to do.&amp;nbsp; The thing is, Unicode was added to the &lt;A class="" href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT" mce_href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT"&gt;PKWare specification for zip files&lt;/A&gt; only about a year ago.&amp;nbsp; There are few tools out there that properly support the spec.&amp;nbsp; In particular, &lt;A class="" href='http://search.msn.com/results.aspx?q=windows+"compressed+folderS"+unicode&amp;amp;FORM=QBHP' mce_href='http://search.msn.com/results.aspx?q=windows+"compressed+folderS"+unicode&amp;amp;FORM=QBHP'&gt;Windows XP and Windows Vista do not support the PKWare Unicode specification&lt;/A&gt; in the "compressed folders" feature.&amp;nbsp; In Windows, if you click on a zip file that complies with the PKWare spec, you won't get what you want to get.&amp;nbsp; And it's not just Windows.&amp;nbsp; Most tools don't support Unicode zip files.&amp;nbsp; As a result, I don't know how to test the Unicode support effectively.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Because zip tools that do Unicode are few and far between, I used a fallback approach in the library.&amp;nbsp; In the latest prelim release, DotNetZip uses the &lt;A class="" href="http://en.wikipedia.org/wiki/Code_page_437" mce_href="http://en.wikipedia.org/wiki/Code_page_437"&gt;IBM437 code page&lt;/A&gt; to encode non-ASCII characters by default.&amp;nbsp; This is not in the PKWare spec, but zip files that people have sent me are using this encoding.&amp;nbsp; IBM437 in zip files may be a quiet, unspecified, &lt;EM&gt;de-facto standard, &lt;/EM&gt;"good enough" for many people.&amp;nbsp; Of course, using the IBM437 mode, you cannot do Chinese characters, which is a huge hole.&amp;nbsp; But IBM437 does cover characters with umlauts and tildes and so on, a lot of Latin languages.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;And now I'm asking for your help.&amp;nbsp; I'd like everyone who uses DotNetZip to try out the new Unicode and IBM437 stuff.&amp;nbsp; It is available in the latest &lt;A class="" href="http://www.codeplex.com/DotNetZip/Release/ProjectReleases.aspx?ReleaseId=14569" mce_href="http://www.codeplex.com/DotNetZip/Release/ProjectReleases.aspx?ReleaseId=14569"&gt;v1.6 prelim release availalble&lt;/A&gt; on the releases tab.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;For tests:&amp;nbsp; &lt;BR&gt;Use the library to zip up files that have "Unicode filenames", or more accurately, filenames with characters that cannot be represented in 7-bit ASCII.&amp;nbsp; This might be characters with umlauts, tildes, and so on, in addition to characters from the non-Latin languages&amp;nbsp; - Hebrew, Greek, Cyrillic, and of course, Chinese.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;See if it works, see if the files zip up and unzip properly.&amp;nbsp; See if the files open in Explorer the way you expect.&amp;nbsp; See if it works intuitively, if the library behaves the way you would like it to behave.&amp;nbsp; See if the zip files can be read by other tools and libraries (&lt;A class="" href="http://www.7-zip.org/" mce_href="http://www.7-zip.org/"&gt;7-zip&lt;/A&gt; or &lt;A class="" href="http://www.zlib.net/" mce_href="http://www.zlib.net/"&gt;zlib&lt;/A&gt; or &lt;A class="" href="http://www.rarlab.com/" mce_href="http://www.rarlab.com/"&gt;winrar&lt;/A&gt;).&amp;nbsp; That kind of thing. &lt;/P&gt;
&lt;P&gt;You will have to &lt;A class="" href="http://www.codeplex.com/DotNetZip/Release/ProjectReleases.aspx?ReleaseId=14569" mce_href="http://www.codeplex.com/DotNetZip/Release/ProjectReleases.aspx?ReleaseId=14569"&gt;check the doc&lt;/A&gt; on the UseUnicode property on the ZipFile to see the options and the details of the implementation.&amp;nbsp; I encourage you to try all your tests with that flag both ON and OFF - to see how it behaves and what you would prefer.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;If find something that breaks, or surprises you, then please do &lt;A class="" href="http://www.codeplex.com/DotNetZip/WorkItem/AdvancedList.aspx" mce_href="http://www.codeplex.com/DotNetZip/WorkItem/AdvancedList.aspx"&gt;report it&lt;/A&gt;.&amp;nbsp; If you are really ambitious, you can write up a test case that reproduces the problem you observed and attach it to a &lt;A class="" href="http://www.codeplex.com/DotNetZip/WorkItem/AdvancedList.aspx" mce_href="http://www.codeplex.com/DotNetZip/WorkItem/AdvancedList.aspx"&gt;new workitem&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The new Unicode support in the library is easy to describe, but it is hard for me to test.&amp;nbsp; It is hard for me to know if I am testing the right things.&amp;nbsp; I need help on this, before I can declare the unicode support useful,&amp;nbsp;stable, and interoperable. &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=8959335" 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/Zip/default.aspx">Zip</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Unicode/default.aspx">Unicode</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/CodePlex/default.aspx">CodePlex</category></item><item><title>Many many LINQ Providers</title><link>http://blogs.msdn.com/dotnetinterop/archive/2008/09/12/many-many-linq-providers.aspx</link><pubDate>Fri, 12 Sep 2008 18:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8945843</guid><dc:creator>DotNetInterop</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dotnetinterop/comments/8945843.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dotnetinterop/commentrss.aspx?PostID=8945843</wfw:commentRss><description>&lt;P&gt;When LINQ shipped, it included a provider model, to encourage people to make other systems and data stores accessible from the coolness-that-is-LINQ.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Back in February, Charlie Calvert published a&amp;nbsp; &lt;A class="" href="http://blogs.msdn.com/charlie/archive/2008/02/28/link-to-everything-a-list-of-linq-providers.aspx" mce_href="http://blogs.msdn.com/charlie/archive/2008/02/28/link-to-everything-a-list-of-linq-providers.aspx"&gt;long list of&amp;nbsp;LINQ providers&lt;/A&gt;.&amp;nbsp; In July, Robert Shelton later&amp;nbsp;&lt;A class="" href="http://www.sheltonblog.com/archive/2008/07/11/list-of-linq-providers.aspx" mce_href="http://www.sheltonblog.com/archive/2008/07/11/list-of-linq-providers.aspx"&gt;reblogged it&lt;/A&gt;.&amp;nbsp; Charlie also has a &lt;A class="" href="http://blogs.msdn.com/charlie/archive/2006/10/05/Links-to-LINQ.aspx" mce_href="http://blogs.msdn.com/charlie/archive/2006/10/05/Links-to-LINQ.aspx"&gt;list of LINQ Links&lt;/A&gt;.&amp;nbsp; Nice to see.&amp;nbsp; By my count there are 33 different LINQ providers listed.&amp;nbsp; I'll bet there are more by now. &lt;/P&gt;
&lt;P&gt;You can also &lt;A class="" href="http://search.msn.com/results.aspx?q=linq+providers&amp;amp;form=QBRE3" mce_href="http://search.msn.com/results.aspx?q=linq+providers&amp;amp;form=QBRE3"&gt;search for more&lt;/A&gt;&amp;nbsp;on LINQ providers. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8945843" 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/LINQ/default.aspx">LINQ</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/dotnetinterop/archive/tags/Providers/default.aspx">Providers</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></channel></rss>