不同子命名空间中的类都出现在 WSDL 的顶层

2024-01-04

我正在创建一个包含各种类的 Web 服务,其中许多类可以包含对其他类的引用。有时这些“子类”具有相同的名称(例如 Customer 和 Customer),但实际上不同,因此我将它们放置在不同的命名空间中(例如 MyRoot.Sub1、MyRoot.Sub2 等)

当我构建服务时,生成的 WSDL 将所有这些类放置在顶层,而不指定子命名空间的任何描述。因此,它会定义两个版本的“Customer”。奇怪的是,它在构建过程中并没有抱怨。

当我托管该服务并尝试使用浏览器引用它时,出现以下错误:

顶部 XML 元素“Customer”来自 命名空间“RE: http://...”引用 不同类型 MyRoot.Sub1.Customer 和 MyRoot.Sub2.Customer。使用XML 用于指定另一个 XML 名称的属性 或元素或类型的命名空间。

我看起来可以使用 XmlTypeAttribute TypeName 来提供唯一的类名,但这使文档变得相当麻烦,因为所有内容都会有两个名称。考虑到命名空间已经指定了差异,有什么方法可以利用该信息吗?我没有尝试过使用 TypeName="Sub1.Customer" 等,但我见过的示例都没有使用此表示法,所以我对此表示怀疑。

我还缺少其他明显的东西吗?


SOAP不支持分层命名空间,因此我确定只有两种解决方案:

  • 确保 Web 服务中的所有方法中不同的类具有唯一的命名
  • 将单个 Web 服务分解为多个服务,以便每个服务都有自己隐式不同的服务名称空间.

由于后一个选项需要更多的管理(在代码中和 IIS 中),因此我决定为这些类指定唯一的名称。我最终可能仍然会将服务分成多个(用于组织或负载处理),但如果类名是唯一的,那么这是可选的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不同子命名空间中的类都出现在 WSDL 的顶层 的相关文章

随机推荐