<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">All About Interop</title><subtitle type="html">Connecting .NET to just about anything else</subtitle><id>http://blogs.msdn.com/dotnetinterop/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/dotnetinterop/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2008-09-23T08:32:00Z</updated><entry><title>Enable .NET 3.5 goodies in IIS vdir</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/12/05/enable-net-3-5-goodies-in-asp-net-vdir.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/12/05/enable-net-3-5-goodies-in-asp-net-vdir.aspx</id><published>2008-12-05T20:29:00Z</published><updated>2008-12-05T20:29:00Z</updated><content type="html">&lt;P&gt;Some of you may be oddballs like me:&amp;nbsp; you like .NET, you program in .NET, but you don't always use Visual Studio.&amp;nbsp;&amp;nbsp; You hand-code everything for some applications.&amp;nbsp; You often open up a text editor and just start writing a source module, with no wizards, no project templates, etc.&amp;nbsp; You hand-code your MSbuild files.&amp;nbsp; You hand-code your web.config files. &lt;/P&gt;
&lt;P&gt;Oddballs like us cannot rely on the code-generation that comes with Visual Studio.&amp;nbsp; So when we write a new ASP.NET application, and we want to use the .NET 3.5 goodies in that app - things like var types, and LINQ - we need to explicitly specify that we want .NET 3.5 compilation.&amp;nbsp; Same is true if you are writing a WCF service and want to use REST or any of the var types or LINQ. &lt;/P&gt;
&lt;P&gt;I've done this twice now and had to search for the way to do it both times.&amp;nbsp; I'm putting here as a "note to self" and also as a reference for anyone else.&amp;nbsp; These are the custom magic incantations for web.config, if you want to enable .NET 3.5 in your ASP.NET app, or in your WCF Service - eg, the cool REST stuff from .NET 3.5.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;&lt;PRE&gt;&amp;lt;&lt;SPAN style="COLOR: #a020f0"&gt;?xml&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;version&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"1.0"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;encoding&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"utf-8"&lt;/SPAN&gt;?&amp;gt;
&amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;configuration&lt;/SPAN&gt;&amp;gt;

  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;system.web&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;compilation&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;debug&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"false"&lt;/SPAN&gt;&amp;gt;  
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;assemblies&lt;/SPAN&gt;&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;add&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;assembly&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;add&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;assembly&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;add&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;assembly&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;add&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;assembly&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"&lt;/SPAN&gt;/&amp;gt;  
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;assemblies&lt;/SPAN&gt;&amp;gt;  
    &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;compilation&lt;/SPAN&gt;&amp;gt;  
  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;system.web&lt;/SPAN&gt;&amp;gt;


  &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;system.codedom&lt;/SPAN&gt;&amp;gt;  
    &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;compilers&lt;/SPAN&gt;&amp;gt;  
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;compiler&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;language&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"c#;cs;csharp"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;extension&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;".cs"&lt;/SPAN&gt;   
                &lt;SPAN style="COLOR: #b8860b"&gt;type&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&lt;/SPAN&gt;   
                &lt;SPAN style="COLOR: #b8860b"&gt;warningLevel&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"4"&lt;/SPAN&gt;&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;providerOption&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"CompilerVersion"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;value&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"v3.5"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;providerOption&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"WarnAsError"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;value&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"false"&lt;/SPAN&gt;/&amp;gt;  
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;compiler&lt;/SPAN&gt;&amp;gt;  
      &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;compiler&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;language&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"vb;vbs;visualbasic;vbscript"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;extension&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;".vb"&lt;/SPAN&gt;   
                &lt;SPAN style="COLOR: #b8860b"&gt;type&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&lt;/SPAN&gt;   
                &lt;SPAN style="COLOR: #b8860b"&gt;warningLevel&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"4"&lt;/SPAN&gt;&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;providerOption&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"CompilerVersion"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;value&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"v3.5"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;providerOption&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"OptionInfer"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;value&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"true"&lt;/SPAN&gt;/&amp;gt;  
        &amp;lt;&lt;SPAN style="COLOR: #0000ff"&gt;providerOption&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;name&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"WarnAsError"&lt;/SPAN&gt; &lt;SPAN style="COLOR: #b8860b"&gt;value&lt;/SPAN&gt;=&lt;SPAN style="COLOR: #bc8f8f"&gt;"false"&lt;/SPAN&gt;/&amp;gt;  
      &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;compiler&lt;/SPAN&gt;&amp;gt;  
    &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;compilers&lt;/SPAN&gt;&amp;gt;  
  &amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;system.codedom&lt;/SPAN&gt;&amp;gt; 

&amp;lt;/&lt;SPAN style="COLOR: #0000ff"&gt;configuration&lt;/SPAN&gt;&amp;gt;
&lt;/PRE&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9156090" width="1" height="1"&gt;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Not Really Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Not+Really+Interop/default.aspx" /><category term="WCF" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx" /><category term="REST" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx" /><category term="emacs" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/emacs/default.aspx" /><category term="ASP.NET" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Geneva supports OASIS WS-Trust, SAML</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/11/07/geneva-supports-oasis-ws-trust.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/11/07/geneva-supports-oasis-ws-trust.aspx</id><published>2008-11-07T19:09:00Z</published><updated>2008-11-07T19:09:00Z</updated><content type="html">&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="Websphere" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Websphere/default.aspx" /><category term="WCF" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx" /><category term="Java" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx" /><category term="SAML" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/SAML/default.aspx" /><category term="WS-Trust" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WS-Trust/default.aspx" /></entry><entry><title>Connect WebSphere and Java applications to SQL Server</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/11/05/websphere-and-sql-server.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/11/05/websphere-and-sql-server.aspx</id><published>2008-11-06T00:55:00Z</published><updated>2008-11-06T00:55:00Z</updated><content type="html">&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="Websphere" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Websphere/default.aspx" /><category term="IBM" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/IBM/default.aspx" /><category term="Java" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx" /><category term="SQL" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/SQL/default.aspx" /></entry><entry><title>Such a deal! MSDN for startups</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/11/05/such-a-deal-msdn-for-startups.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/11/05/such-a-deal-msdn-for-startups.aspx</id><published>2008-11-06T00:20:00Z</published><updated>2008-11-06T00:20:00Z</updated><content type="html">
&lt;p&gt;Today Microsoft announced &lt;b&gt;BizSpark&lt;/b&gt;: &lt;a href="http://www.microsoftstartupzone.com/bizspark" mce_href="http://www.microsoftstartupzone.com/bizspark"&gt;http://www.microsoftstartupzone.com/bizspark&lt;/a&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;This program gives ISV startup with less than USD$1m in annual revenue (lower amounts for some other countries - for example it's just USD$250k for Egypt) free access to MSDN subscriptions. Nice. You get Visual Studio, Expression, VSTS, SQL Server, BizTalk Server, SharePoint Server, Windows Server - all you need to build a software app on the Microsoft application platform.&amp;nbsp; &lt;br&gt;&lt;/p&gt;



&lt;p&gt;There are some requirements:&amp;nbsp; you have to be a software startup, privately held, and there's the revenue limit.&amp;nbsp; If you don't qualify for that deal, there are others that may work for you. Here's a summary : &lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.microsoftstartupzone.com/bizspark" title="BizSpark"&gt;BizSpark&lt;/a&gt; - Free development software for ISVs.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.empowerforisv.com/" title="Empower"&gt;Empower for ISVs&lt;/a&gt; - Accelerates ISVs development on the Microsoft platform&amp;nbsp;with software,&amp;nbsp;support, and other resources.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dreamspark.com/default.aspx" title="DreamSpark"&gt;DreamSpark&lt;/a&gt; -&amp;nbsp; like BizSpark, but for Students. Download Microsoft developer and design tools at no charge.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoftstartupzone.com/Software/Pages/Try_a_Product.aspx" title="Free stuff"&gt;Free software&lt;/a&gt; - Free software and trial software.&lt;/li&gt;
&lt;/ul&gt;Check it out...&lt;br&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9045212" width="1" height="1"&gt;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="MSDN" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/MSDN/default.aspx" /></entry><entry><title>REST in WCF: Varying response content type based on HTTP Request Headers</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/11/04/rest-in-wcf-varying-response-content-type-based-on-http-request-headers.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/11/04/rest-in-wcf-varying-response-content-type-based-on-http-request-headers.aspx</id><published>2008-11-05T00:39:00Z</published><updated>2008-11-05T00:39:00Z</updated><content type="html">&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="WCF" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx" /><category term="REST" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx" /></entry><entry><title>It just got easier to build REST apps in .NET</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/10/29/it-just-got-easier-to-build-rest-apps-in-net.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/10/29/it-just-got-easier-to-build-rest-apps-in-net.aspx</id><published>2008-10-30T00:48:00Z</published><updated>2008-10-30T00:48:00Z</updated><content type="html">&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="PHP" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/PHP/default.aspx" /><category term="WCF" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx" /><category term="Java" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx" /><category term="REST" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/REST/default.aspx" /></entry><entry><title>Microsoft joins AMQP</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/10/24/microsoft-joins-amqp.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/10/24/microsoft-joins-amqp.aspx</id><published>2008-10-25T00:04:00Z</published><updated>2008-10-25T00:04:00Z</updated><content type="html">
&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="MSMQ" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/MSMQ/default.aspx" /><category term="Standards" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Standards/default.aspx" /><category term="AMQP" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/AMQP/default.aspx" /></entry><entry><title>IIRF v1.2.15 is released - open source URL Rewriting on IIS6</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/10/15/iirf-v1-2-15-is-released-open-source-url-rewriting-on-iis6.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/10/15/iirf-v1-2-15-is-released-open-source-url-rewriting-on-iis6.aspx</id><published>2008-10-15T17:21:00Z</published><updated>2008-10-15T17:21:00Z</updated><content type="html">&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="IIS" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/IIS/default.aspx" /><category term="IIRF" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/IIRF/default.aspx" /></entry><entry><title>DotNetZip revs to v1.6 – now with Unicode support</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/10/14/dotnetzip-revs-to-v1-6-now-with-unicode-support.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/10/14/dotnetzip-revs-to-v1-6-now-with-unicode-support.aspx</id><published>2008-10-15T00:54:00Z</published><updated>2008-10-15T00:54:00Z</updated><content type="html">&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="Zip" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Zip/default.aspx" /></entry><entry><title>Eclipse tools for Silverlight and .NET</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/10/13/eclipse-tools-for-silverlight-and-net.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/10/13/eclipse-tools-for-silverlight-and-net.aspx</id><published>2008-10-13T23:00:00Z</published><updated>2008-10-13T23:00:00Z</updated><content type="html">&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="Java" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx" /><category term="Eclipse" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Eclipse/default.aspx" /><category term="Silverlight" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Silverlight/default.aspx" /></entry><entry><title>Weblogic JMS with .NET</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/10/09/weblogic-jms-with-net.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/10/09/weblogic-jms-with-net.aspx</id><published>2008-10-09T18:36:00Z</published><updated>2008-10-09T18:36:00Z</updated><content type="html">&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="MQ" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/MQ/default.aspx" /><category term="JMS" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/JMS/default.aspx" /><category term="Oracle" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Oracle/default.aspx" /><category term="Java" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Java/default.aspx" /><category term="WebLogic" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WebLogic/default.aspx" /></entry><entry><title>Interop sessions at Oracle Open World </title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/26/interop-sessions-at-oracle-open-world.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/09/26/interop-sessions-at-oracle-open-world.aspx</id><published>2008-09-27T06:43:00Z</published><updated>2008-09-27T06:43:00Z</updated><content type="html">&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="WCF" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx" /></entry><entry><title>WSDL-First in WCF, versus WSDL-First in ASMX</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/25/wsdl-first-in-wcf-versus-wsdl-first-in-asmx.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/09/25/wsdl-first-in-wcf-versus-wsdl-first-in-asmx.aspx</id><published>2008-09-25T18:25:00Z</published><updated>2008-09-25T18:25:00Z</updated><content type="html">&lt;P&gt;I wanted to point something out regarding &lt;A class="" href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/24/wsdl-first-development-with-wcf.aspx" mce_href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/24/wsdl-first-development-with-wcf.aspx"&gt;the WSDL-First item I posted yesterday&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;This is a look at the interface generated by the SvcUtil.exe tool for WCF.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.CodeDom.Compiler.GeneratedCodeAttribute(&lt;SPAN style="COLOR: #a31515"&gt;"System.ServiceModel"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #a31515"&gt;"3.0.0.0"&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.ServiceContractAttribute(Namespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConfigurationName=&lt;SPAN style="COLOR: #a31515"&gt;"Ionic.Samples.Webservices.Sep21.IResearchServiceSoap"&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;IResearchServiceSoap&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.OperationContractAttribute(Action=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Registration"&lt;/SPAN&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReplyAction=&lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.XmlSerializerFormatAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Registration(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; registrationXml);&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.OperationContractAttribute(Action=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Query"&lt;/SPAN&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReplyAction=&lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.XmlSerializerFormatAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Query(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; queryXml);&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.OperationContractAttribute(Action=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Status"&lt;/SPAN&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReplyAction=&lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [System.ServiceModel.XmlSerializerFormatAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Status();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/DIV&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It looks quite similar to the interface that you can generate using the appropriate wsdl.exe tool if you would prefer to use the ASMX (or System.Web.Services) stack that first shipped in .NET v1.1, and continues to be available in .NET 3.5. &lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 2pt; FONT-SIZE: 9pt; BACKGROUND: white; PADDING-BOTTOM: 2pt; BORDER-LEFT: windowtext 1pt solid; COLOR: black; LINE-HEIGHT: 98%; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; FONT-FAMILY: Consolas, Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;[System.CodeDom.Compiler.GeneratedCodeAttribute(&lt;SPAN style="COLOR: #a31515"&gt;"wsdl"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #a31515"&gt;"2.0.50727.42"&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;[System.Web.Services.WebServiceBindingAttribute(Name=&lt;SPAN style="COLOR: #a31515"&gt;"ResearchServiceSoap"&lt;/SPAN&gt;, Namespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;IResearchServiceSoap&lt;/SPAN&gt; {&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;remarks/&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.WebMethodAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.Protocols.SoapDocumentMethodAttribute(&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Registration"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RequestNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ResponseNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Use=System.Web.Services.Description.SoapBindingUse.Literal, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Registration(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; registrationXml);&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;remarks/&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.WebMethodAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.Protocols.SoapDocumentMethodAttribute(&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Query"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RequestNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ResponseNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Use=System.Web.Services.Description.SoapBindingUse.Literal, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Query(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; queryXml);&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;remarks/&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.WebMethodAttribute()]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Web.Services.Protocols.SoapDocumentMethodAttribute(&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search/Status"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RequestNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ResponseNamespace=&lt;SPAN style="COLOR: #a31515"&gt;"urn:Microsoft.Search"&lt;/SPAN&gt;, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Use=System.Web.Services.Description.SoapBindingUse.Literal, &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; Status();&lt;/P&gt;
&lt;P style="MARGIN: 0px" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;}&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;So as you can see, it is a very similar model. Different attributes support the different runtimes (System.Web.Services versus WCF), but it is very parallel. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8964013" width="1" height="1"&gt;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="WCF" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx" /><category term="WSDL" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WSDL/default.aspx" /><category term="ASMX" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/ASMX/default.aspx" /></entry><entry><title>WSDL-First development with WCF</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/24/wsdl-first-development-with-wcf.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/09/24/wsdl-first-development-with-wcf.aspx</id><published>2008-09-24T18:36:00Z</published><updated>2008-09-24T18:36:00Z</updated><content type="html">&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="WCF" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx" /><category term="WSDL" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WSDL/default.aspx" /></entry><entry><title>Flatten your WSDL with this Custom ServiceHost for WCF</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/dotnetinterop/archive/2008/09/23/flatten-your-wsdl-with-this-custom-servicehost-for-wcf.aspx" /><id>http://blogs.msdn.com/dotnetinterop/archive/2008/09/23/flatten-your-wsdl-with-this-custom-servicehost-for-wcf.aspx</id><published>2008-09-23T18:32:00Z</published><updated>2008-09-23T18:32:00Z</updated><content type="html">&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;</content><author><name>DotNetInterop</name><uri>http://blogs.msdn.com/members/DotNetInterop.aspx</uri></author><category term="Interop" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/Interop/default.aspx" /><category term="WCF" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WCF/default.aspx" /><category term="WSDL" scheme="http://blogs.msdn.com/dotnetinterop/archive/tags/WSDL/default.aspx" /></entry></feed>