Friday, September 30, 2011

Interop Bindings for WCF released in codeplex

I am happy to announce that one of the projects in which Microsoft and Tellago have been collaborating together during the last few months was released as part of wcf.codeplex.com. The primary aim of this “WCF Interop Bindings” project is to simplify the work needed for making WCF services interoperable with other service stacks like Oracle WebLogic, IBM Websphere, Metro or Apache Axis. 
The main goal behind web services has always been to enable communication between heterogeneous systems. However, we all know that archiving such level of interoperability in the context of web services and WS-* is really complicated and requires good knowledge of the different message stacks to generate compatible messages at the wire level.
For that reason, the WCF team came up with this interesting idea of providing a set of pre-defined bindings with a limited set of settings that you can use out of the box for supporting the most common interop scenarios with the mentioned stacks using protocols like WS-Security, WS-SecureConversation or WS-ReliableMessaging.
Bindings provided out of the box in the current bits
The current bits provides a set of custom binding implementations for Oracle WebLogic, IBM Websphere, Metro and Apache Axis. The name of those bindings basically matches the message stack you want to use. For example, the following configuration illustrates how a service can be configured to be compatible at wire level with Oracle WebLogic using Username over certificates as the security scenario.
<configuration>
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Interop.Samples.HelloWorldService" behaviorConfiguration="helloWorld">
<endpoint address="Username_WebLogic" binding="webLogicBinding" bindingConfiguration="helloWorld_UsernameOverCertificate" 
contract="Microsoft.ServiceModel.Interop.Samples.IHelloWorld"/>
<endpoint address="Mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
</service>
</services>
<bindings>
<webLogicBinding>
<binding name="helloWorld_UsernameOverCertificate">
<security mode="UserNameOverCertificate"/>
</binding>
</webLogicBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="helloWorld">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug httpHelpPageEnabled="true"/>
<serviceCredentials>
<serviceCertificate
storeLocation="LocalMachine"
storeName="TrustedPeople"
x509FindType="FindBySubjectDistinguishedName"
findValue="CN=HelloWorldService"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<extensions>
<bindingExtensions>
<add name="webLogicBinding" type="Microsoft.ServiceModel.Interop.WebLogic.Configuration.WebLogicBindingCollectionElement,
Microsoft.ServiceModel.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4fc38efee625237e"/>
</bindingExtensions>
</extensions>
</system.serviceModel>
</configuration>
Visual Studio 2010 Integration
The binding implementations are not the only thing you get out of the box with the current bits. The WCF team also wanted to provide developers with a rich experience for configuring and creating the services with one of the pre-defined interop scenarios. Having that in mind, this project also integrates in Visual Studio 2010 by providing a set of project templates for creating WCF services for an specific scenario and a configuration wizard for generating the binding configuration.
ProjectTemplates
As you can see in the image above, two new project templates are automatically registered under the "WCF" category that you can use to create a new service configured with one of the provided interop bindings. You can use the "WCF Interoperable Service Library" template for creating a new WCF service as part of the service library, or "WCF Interoperable Service Application" for creating a new WCF service as part of a Web Application. The templates will automatically launch a configuration wizard for selecting the desired interop scenario as it is shown in the images bellow.
Wizard1
Wizard2
In the wizard you can pick one of the existing interop scenarios, and specific settings for those scenarios like Security or Reliable Messaging to give an example. At the end of wizard, the configuration file associated to the WCF project will be automatically updated with the chosen binding and settings.
Enjoy!!