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

时间:2011-06-09 12:35:14

标签: c# soap wsdl

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

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

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:webservice.contentinn.com">
    <soapenv:Header>
        <urn:AuthHeaderElement>
            <token></company>
        </urn:AuthHeaderElement>
    </soapenv:Header>
    <soapenv:Body>
      <urn:TestMethod>
         <id></id>
      </urn:TestMethod>
    </soapenv:Body>
</soapenv:Envelope>

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

2 个答案:

答案 0 :(得分:1)

Answers to this question提出了几种方法:

  • SoapUI:这不是一种程序化方法。
  • Castle Dynamic Proxy:这听起来比你需要的更接近,但仍然没有。
  • The example here可能就是你所追求的:

      

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

         

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

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

           

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

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

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

    OR

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

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

  • There is a Java example here也是。

答案 1 :(得分:1)

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

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

  1. 您可以为项目添加服务参考
  2. 运行SVCUTIL:svcutil http://someurl?wsdl
  3. 生成代理类后,它会将服务的操作公开为方法。只需调用所需的方法,就会为您生成SOAP信封。