如何从C#中的wsdl SOAP请求信封开始

本文关键字:请求 开始 SOAP wsdl 中的 | 更新日期: 2023-09-27 17:58:41

我需要调用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>

有人知道怎么做吗?

如何从C#中的wsdl SOAP请求信封开始

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

  • SoapUI:这实际上不是一种编程方法
  • Castle Dynamic Proxy:这更接近于你听起来需要的,但仍然不完全符合
  • 这里的例子可能就是你想要的:

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

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

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

      DynamicProxyFactory factory=新的DynamicProxyBactory("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,然后运行Calculator DynamicClient.exe

  • 这里还有一个Java示例。

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

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

  1. 您可以将服务引用添加到您的项目中
  2. 运行SVCUTIL:SVCUTILhttp://someurl?wsdl

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