【问题标题】:custom wsdl based on a condiction?基于条件的自定义wsdl?
【发布时间】:2013-11-12 20:24:11
【问题描述】:

嗯,我想根据条件生成不同的 WSDL,我的意思是隐藏一些方法,保留所有复杂类型,只显示或隐藏一些方法。

我的问题

有什么方法可以获取 URL 上的一些参数以获取 wsdl,然后评估参数并渲染自定义 WSDL?

示例 host.dev/myservice.wsdl?param=role1 并通过反射删除一些属性,这些方法在执行时隐藏。

问题 我的服务有很多客户端,他们用来获取 wsdl 以使客户端不用于消费,他们只是让 wsdl 指向原点,并不是所有的都需要所有方法,这只是为了给他们一个干净的解决方案。

提前致谢。

【问题讨论】:

  • 你真的想这样做吗?基本上 WSDL 是一个接口定义,一个应该尽可能静态和不可变的契约。也许应用某种安全性(访问票的额外参数?)是使方法可访问或不可访问的更好方法。
  • 如果你能解释你原来的问题 X 真的很有帮助,所以我们可以帮助评估你的 solution Y 是否真的是解决 X 的最佳方法。例如,如果你认为你的服务暴露了太多方法,它可能会这样做,您可以更好地将其拆分为多个服务,每个业务领域一个。
  • “并不是所有的都需要所有方法” - 所以,就像说的那样,创建单独的服务。

标签: .net web-services soap


【解决方案1】:

不,我认为没有办法做到这一点。在您不使用的 WSDL 中包含一些东西通常不会有什么坏处,您为什么需要它呢?如果你这样做了,那么将它拆分为其他服务可能是有意义的,这样你就有了单独的 WSDL。如果您的客户需要所有 WSDL,他们可以全部引用。

【讨论】:

  • 其实我的想法和你一样,但如果可以做到就好了。
【解决方案2】:

是的,这是可能的。实际上 .net 的 WSDL 生成器通过处理类型的方法来工作。我曾经为 Web 服务包装器编写了一个对象,它将任何对象发布为完整的 Web 服务(动态 Web 服务是该功能的名称)。由于代码属于我以前的雇主,我不能在这里展示代码示例,但我可以根据我的记忆给你一些指导。

  1. WSDL 生成器实际上是一个可以通过传递类型来调用的类。
  2. 由于Type类本身不是密封的,你可以继承它。您的自定义 Type 类为 WSDL 生成器提供名称和参数。

在那之后,您将提供哪些方法取决于您的想象。我实际上实现了更多,我编写了另一段代码,通过将字典键公开为属性名称来动态创建类型,将类字典对象转换为 Web 服务数据协定。正如我之前所说,这完全取决于您的想象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-02
    • 2017-08-20
    • 2021-07-10
    • 1970-01-01
    • 2022-08-16
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多