Consumir e invocar servicios web SOAP en tiempo de ejecución: cliente de servicio web dinámico desde archivo WSDL

Requisito:

El cliente debe proporcionar el WSDL del servicio web SOAP en tiempo de ejecución, es decir, elegir el archivo WSDL de una ubicación para compartir archivos.Consuma el WSDL y llame al Método elegido por el Cliente en la IU y maneje la respuesta.

No puedo usar MetadataExchangeClient ya que WSDL no estará alojado.

Implementación:

var serviceDescription = ServiceDescription.Read(@"C:\Contacts.WSDL");
var metadataSection = new MetadataSection
{
Dialect = MetadataSection.ServiceDescriptionDialect,
Identifier = serviceDescription.TargetNamespace,
Metadata = serviceDescription
};

var metadataSections = new List<MetadataSection> {metadataSection};
var metadatSet = new MetadataSet(metadataSections);
var wsdlImporter = new WsdlImporter(metadatSet);
var services = wsdlImporter.ImportAllEndpoints();

Bloqueos de carreteras:

El código anterior no pudo extraer los puntos finales del servicio en absoluto. Entonces, tuve que crear manualmente un punto final de servicio.No pude enumerar todos los métodos contenidos en el WSDL anterior y sus entradas / salidas asociadas en el paso (para usar en la variable operationName y operationParameters a continuación)
object retVal = instance.GetType().GetMethod(operationName)
                        .Invoke(instance, operationParameters);   // Invoke

Lo intenté codificando el nombre de la operación, analizado manualmente desde el WSDL, pero luego falló en los parámetros. Se espera un tipo complejo que contenga la jerarquía como se muestra a continuación:

ContactInput -> ListOfContacts -> Contact -> FirstName, LastName

Próximos pasos:

Si alguien me puede ayudar a solucionar los obstáculos, entonces puedo proceder con el enfoque anterior.

De lo contrario, tengo que comenzar a investigar sobre el uso de svcutil.exe en tiempo de ejecución

Gracias dev

Respuestas a la pregunta(1)

Su respuesta a la pregunta