Для меня проблема заключалась в том, что прокси-сервер использовался для подключения к Интернету. Код должен измениться в следующих двух местах для успешной операции:
1] Метод BuildServiceDescriptionImporter (XmlTextReader xmlreader) был изменен на
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] Второй кусок кода, который должен был быть изменен, находился в методе public T InvokeMethod<T>( string serviceName, string methodName, params object[] args )
добавьте следующий фрагмент кода перед вызовом метода:
PropertyInfo Proxy = type.GetProperty( "Proxy" );
WebProxy webProxy = new WebProxy( string host, int port);
Proxy.SetValue( serviceInstance, webProxy, null );
После внесения этих изменений я смог использовать код для динамического подключения к удаленному веб-сервису.
Надеюсь, это поможет другим, столкнувшимся с той же проблемой, что и я.