Welcome to MSDN Blogs Sign in | Join | Help

How to invoke the Metadata Resolver and resolve metadata without using Visual Studio Plug-Ins?

Scenario:  You want to get an adapter generated WSDL / XML Schema for a subset of operations.

The following code snippets show how to retrieve a ServiceDescription (WSDL) for a given set of operation identifiers.

Method 1 – Using WCF provided MetadataExchangeClient

 

Ensure you have the metadata exchange client endpoint defined in the WCF configuration.

  <system.serviceModel>

    <client>

      <endpoint binding="sampleAdapterBinding" contract="IMetadataExchange" name="sample" />

    </client>

  </system.serviceModel>

Create a sample console application and use MetadataExchangeClient to retrieve metadata.

    class Program

    {

        static void Main(string[] args)

        {

            // Get the WSDL one operation at a time

            string op1 = "{OperationIdentifier1}";

            string op2 = "{OperationIdentifier2}";

 

            // Retrieve WSDL using MEX

            EndpointAddress mexAddress = new EndpointAddress("sample://localhost:10000/DB2OLEDB/MyDB?wsdl" + "&op=" + op1 + "&op=" + op2);

 

            // Create a metadata exchange client to retrieve metadata as per WS-MEX standard

            MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);

 

            // Obtain the metadata

            MetadataSet metadataSet = mexClient.GetMetadata(mexAddress);

 

            // Retrieve the first service description found

            System.Web.Services.Description.ServiceDescription wsdl =

                (System.Web.Services.Description.ServiceDescription) metadataSet.MetadataSections[0].Metadata;

 

            // Write the WSDL to a file

            String fileName = @"c:\temp\sample.wsdl";

            Console.WriteLine("Writing WSDL to " + fileName);

            wsdl.Write(fileName);

        }

    }

Method 2 – Using Adapter SDK provided MetadataRetrievalClient

 

WCF LOB Adapter SDK provides a WCF pre-defined proxy class called MetadataRetrievalClient (that implements interface IMetadataRetrievalContract).  This class has three key methods –

·          public MetadataRetrievalNode[] Browse(string nodeId, int childStartIndex, int maxChildNodes)

·          public MetadataRetrievalNode[] Search(string nodeId, string searchCriteria, int maxChildNodes)

·          public ServiceDescription GetMetadata(MetadataRetrievalNode[] nodes)

We will use the GetMetadata() method to retrieve the metadata as shown below.

    class Program

    {

        static void Main(string[] args)

        {

            // create the binding

            SampleAdapterBinding binding = new SampleAdapterBinding();

            // create the endpoint address

            EndpointAddress address = new EndpointAddress("sample://host:100/DB2OLEDB/MyDB?Protocol=TCPIP&Driver=Test");

            // create metadata retrieval client

            MetadataRetrievalClient metadataProxy = new MetadataRetrievalClient(binding, address);

            // Show the nodes on the console

            MetadataRetrievalNode op1 = new MetadataRetrievalNode();

            op1.NodeId = "{OperationIdentifier1}";

            op1.IsOperation = true;

            MetadataRetrievalNode op2 = new MetadataRetrievalNode();

            op2.NodeId = "{OperationIdentifier2}";

            op2.IsOperation = true;

            List<MetadataRetrievalNode> nodes = new List<MetadataRetrievalNode>();

            nodes.Add(op1);

            nodes.Add(op2);

            // Get the WSDL

            ServiceDescription wsdl = metadataProxy.GetMetadata(nodes.ToArray());

            // Write the WSDL to a file

            wsdl.Write(@"c:\temp\sampleadapter.wsdl");

            // close the client

            metadataProxy.Close();

        }

    }

These methods can come in quite handy while troubleshooting/debugging issues with the adapter metadata generation without using the Add Adapter Service Reference Visual Studio Plug-In/Consume Adapter Service BizTalk Project Add-In.

Published Wednesday, June 13, 2007 7:00 PM by sonua

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# 'WCF LOB Adapter SDK' metadata object model

WCF LOB Adapter SDK provides Metadata Object Model to define a contract for an operation. This object

Wednesday, June 20, 2007 12:21 PM by Developing adapters using WCF

# Metadata object model extensibility using ExportXmlSchema

Scenario: Adapter Developer needs to define an operation signature using XML Schema types not directly

Wednesday, June 20, 2007 1:45 PM by Developing adapters using WCF

Leave a Comment

(required) 
required 
(required) 
 
Page view tracker