The issue for me was the Proxy to be used to connect to the internet. The code needs to change at the following two places for the successful operation:
1] The method BuildServiceDescriptionImporter(XmlTextReader xmlreader) was changed to
private ServiceDescriptionImporter BuildServiceDescriptionImporter( string webserviceUri )
{
ServiceDescriptionImporter descriptionImporter = null;
**WebClient client = new WebClient { Proxy = new WebProxy( string host, int port ) };**
Stream stream = client.OpenRead( webserviceUri );
XmlTextReader xmlreader = new XmlTextReader( stream );
// parse wsdl
ServiceDescription serviceDescription = ServiceDescription.Read( xmlreader );
// build an importer, that assumes the SOAP protocol, client binding, and generates properties
descriptionImporter = new ServiceDescriptionImporter();
descriptionImporter.ProtocolName = "Soap12";
descriptionImporter.AddServiceDescription( serviceDescription, null, null );
descriptionImporter.Style = ServiceDescriptionImportStyle.Client;
descriptionImporter.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;
return descriptionImporter;
}
2] The second piece of code that was to be changed was within the public T InvokeMethod<T>( string serviceName, string methodName, params object[] args )
method
add the following code snippet before Invoking the method:
PropertyInfo Proxy = type.GetProperty( "Proxy" );
WebProxy webProxy = new WebProxy( string host, int port);
Proxy.SetValue( serviceInstance, webProxy, null );
After doing those changes I was able to use the code to connect to a remote web service dynamically.
Hope this helps others facing the same issue as I did.