【问题标题】:Multiple wsdl and xsd files... into a single wsdl多个 wsdl 和 xsd 文件...到单个 wsdl
【发布时间】:2026-01-26 10:50:01
【问题描述】:

可能是一个直截了当的问题:您知道将多个 wsdl + xsd 文件组合成一个 wsdl 的工具吗?

谢谢。

编辑1: 该服务是 WCF 服务,我想要一个用于 PHP 的 wsdl(作为客户端)。

编辑2: 太糟糕了,我需要使用 .Net 4.0 而不是 4.5,因为这是可能的。也许我可以借用其中一种新的 MS 工具?你知道是哪一个吗? svcutil.exe 是负责的工具吗?如果是,他的依赖是什么?因为我还不想跳到 .Net 4.5。

【问题讨论】:

  • 你指的是WCF自动生成的WSDL吗?还是“合同优先”,这些文件来自其他地方?
  • 是的,由 WCF 创建的 WSDL 文件。

标签: xsd wsdl


【解决方案1】:

您可以构建一个可以生成平面 wsdl 的小型应用程序。我们确实在 C# 中以编程方式生成平面 wsdl,以构建可互操作的 WCF 服务。参考link如何生成平面wsdl。

希望看到代码,您可以构建一个为您执行此操作的工具。

否则,您可以使用 Altova Xml Spy 手动执行此操作,并将 xsd 导入属性替换为 xsd 架构定义。

【讨论】:

  • 我尝试了 WCFExtras,但它不起作用,因为它只需要一个 wsdl 文件,而且我有具有不同命名空间的嵌套服务。例如:ConcreteService: IService,其中 IService: IServiceBase... IService 和 IServiceBase 有不同的命名空间。你认为这个“FlatWsdl”对我有用吗?
  • 顺便说一句,我需要这个才能从 PHP 中使用它
  • 如果您使用的是 .NET 4.5,您可以使用 WCF 框架的内置功能来生成单个 wsdl 文件。否则,您需要建立自己的定制服务工厂。关于接口的不同命名空间,如果您可以使用 .NET 客户端调用相同的命名空间,那么生成单个平面 wsdl 也应该可以工作。如果您希望非 .NET 客户端使用 WCF 服务,则需要平面 wsdls
  • “当您希望非 .NET 客户端使用 WCF 服务时,需要平面 wsdls” 不一定正确;例如,基于 Java 的工具能够使用任何有效的 WSDL,无论涉及多少 WSDL 和外部 XSD 文件。
  • @PetruGardea:是的,同意这并不总是正确的,但是使用平面 wsdl 可以让大多数客户(几乎所有)都可以使用您的服务
【解决方案2】:

当然,我可以推荐a tool,它可以将多个 XSD 文件组合成可能的最小集合(我在这里有偏见,因为我写了它)。如果您有大量文件、许多命名空间或两者兼有,这本身就是一项繁重的任务。根据您可能配置的一些参数,将多个 WSDL 合二为一的事情可能会变得更加棘手;例如,从逻辑上讲,它是在三层上编写的一个 WSDL,它保持消息的分离 - 端口类型 - 服务,还是多个 WSDL,周期?您必须确保的一件事是所有共享相同类型的子系统,操作没有冲突等。但即使这是一项可以实现的任务,我也可以轻松地放置一个插件......如果这是重构 XML 模式以及您经常看到的 WSDL,请告诉我。

【讨论】:

  • 好的,试试看(顺便说一句,你的网站很慢,需要我注册?)
  • @Cristi,是的,它确实需要注册以获得支持和自动更新;至于速度慢,可能是一个小故障,现在看起来还可以。我注意到您发布后需要从 PHP 中使用它……我的应用程序是在桌面上运行的独立应用程序。看看这个post,了解有关 XSD 重构的想法;如果您想在不注册的情况下继续,请使用网站上的支持地址给我发送电子邮件,我会在您不注册的情况下设置下载链接。
【解决方案3】:

我们想要一个 wsdl 文件来利用一些工具在 PHP 端自动生成 soap 代理。但我们最终还是手动编写了 DTO 层。

如果您在 .NET 4.5 中有 wcf 服务,您可以轻松获得一个 wsdl 文件(WCF 框架的内置功能)。

【讨论】:

    最近更新 更多