如何从C#中的wsdl SOAP请求信封转到

我需要在Web服务上调用操作,但我不知道请求信封的外观(服务在运行时由用户附加)。

一般来说,我想基于wsdl链接以编程方式生成soap信封。 使用给定的链接获取操作列表以及特定结果的结果:

            

任何人都知道如何做到这一点?

这个问题的答案提出了几种方法:

  • SoapUI :这不是一个真正的程序化方法。
  • 城堡动态代理 :这更接近您所需要的声音,但仍然不太合适。
  • 这里的例子可能就是你所追求的:

    DynamicProxy允许您通过指定服务的WSDL URI在运行时创建动态WCF客户端。 DynamicProxy不依赖于预编译的代理或配置。 DynamicProxy使用MetadataResolver从服务和WsdlImporter下载元数据,以在运行时创建合同和绑定。 编译的动态代理可用于使用reflection调用服务上的操作。

    该示例显示了动态代理如何调用使用简单类型和复杂类型的操作。 使用流程如下。

    1. 创建ProxyFactory,指定服务的WSDL URI。

      DynamicProxyFactory factory = new DynamicProxyFactory(“ http:// localhost:8080 / WcfSamples / DynamicProxy?wsdl ”);

    2. 浏览端点,元数据,合同等。

     factory.Endpoints factory.Metadata factory.Contracts factory.Bindings 
    1. 通过指定端点或合同名称,为端点创建DynamicProxy。
     DynamicProxy proxy = factory.CreateProxy("ISimpleCalculator"); 

    要么

     DynamicProxy proxy = factory.CreateProxy(endpoint); 
    1. 在DynamicProxy上调用操作
     double result = (dobule)proxy.CallMethod("Add", 1d ,2d); 
    1. 关闭DynamicProxy
     proxy.Close(); 

    若要运行该示例:编译解决方案,运行CalculatorService.exe,然后运行CalculatorDynamicClient.exe

  • 这里也有一个Java示例 。

您需要生成代理类; 这将生成调用服务操作所需的一切。

有几种方法可以生成代理类

  1. 您可以为项目添加服务引用
  2. 运行SVCUTIL:svcutil http:// someurl?wsdl

生成代理类后,它会将服务的操作公开为方法。 只需调用所需的方法,就会为您生成SOAP信封。