Dynamic Access WSDL
for Developers

Dear Friends,

I think you might familiar with WSDLs(webServices).Here I am going to discuss with you how we can Access the WSDLs in Dynamically.

The Following code will explain that concept in very clearly,

Coding, (C#.net)

Step:1- Create the seperate Class as the following manner.

First of all you need to use the following namespaces in the class

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;

class DynamicWSDL

{

[

SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]

internal static object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args)

{

try

{

System.Net.

WebClient client = new System.Net.WebClient();

// Connect To the web service

System.IO.

Stream stream = client.OpenRead(webServiceAsmxUrl);

// Now read the WSDL file describing a service.

ServiceDescription description = ServiceDescription.Read(stream);

///// LOAD THE DOM /////////

// Initialize a service description importer.

ServiceDescriptionImporter importer = new ServiceDescriptionImporter();

importer.ProtocolName =

"Soap12"; // Use SOAP 1.2.

importer.AddServiceDescription(description,

null, null);

// Generate a proxy client.

importer.Style =

ServiceDescriptionImportStyle.Client;

// Generate properties to represent primitive values.

importer.CodeGenerationOptions = System.Xml.Serialization.

CodeGenerationOptions.GenerateProperties;

// Initialize a Code-DOM tree into which we will import the service.

CodeNamespace nmspace = new CodeNamespace();

CodeCompileUnit unit1 = new CodeCompileUnit();

unit1.Namespaces.Add(nmspace);

// Import the service into the Code-DOM tree. This creates proxy code that uses the service.

ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);

if (warning == 0) // If zero then we are good to go

{

// Generate the proxy code

CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp");

// Compile the assembly proxy with the appropriate references

string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" };

CompilerParameters parms = new CompilerParameters(assemblyReferences);

CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);

// Check For Errors

if (results.Errors.Count > 0)

{

foreach (CompilerError oops in results.Errors)

{

System.Diagnostics.

Debug.WriteLine("========Compiler error============");

System.Diagnostics.

Debug.WriteLine(oops.ErrorText);

}

throw new System.Exception("Compile Error Occured calling webservice. Check Debug ouput window.");

}

// Finally, Invoke the web service method

object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName);

MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);

return mi.Invoke(wsvcClass, args);

}

else

{

return null;

}

}

catch

{

return null;

}

}

}

Step:2

In your application you need to call that class(My class name is DynamicWSDL) to access the CallWebService method then you need to pass the WSDL address,WebServicename,Method name and finally the parameters collection for that method.

DynamicWSDL

.CallWebService("WSDL URL","WebServiceName", "MethodName", param);