【问题标题】:How to go from wsdl SOAP request envelope in C#如何从 C# 中的 wsdl SOAP 请求信封出发
【发布时间】:2014-02-08 09:17:03
【问题描述】:

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

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

<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>

有人知道怎么做吗?

【问题讨论】:

  • RE:服务是用户在运行时添加的……你希望自动调用函数吗?例如这是某种类型的测试工具/接口吗?假设服务 1 接受纬度/经度并返回天气信息。现在有人添加了一个也接受纬度/经度的 Service2。您要继续调用它吗? (事实证明,Service2 在该位置转储了一桶油漆。)我的观点是,除了测试场景之外,您可能不想自动调用某些新服务。如果是这种情况,您可能不需要动态生成代理。

标签: c# soap wsdl


【解决方案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. 浏览端点、元数据、合约等。

    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. 关闭动态代理
    proxy.Close();
    

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

  • There is a Java example here 也是。

【讨论】:

  • 非常感谢!这很有帮助。
【解决方案2】:

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

生成代理类有几种方法

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多