4

我花了几个小时尝试在 wsdl 生成中进行一些自定义,但没有结果。我陷入困境主要是因为我找不到我想做的明确示例(我可能错过了一些东西)。

言归正传:我想自定义生成的 WSDL。我发现的最相关的文章是关于向现有服务添加属性以添加行为,例如这篇文章

我想要做的是能够分析OperationContract并在需要时生成和附加 xsd。

我的问题是:

  • 如何在不添加属性的情况下添加或拦截现有的 WSDL 生成?
  • 如何在配置文件中配置此组件?

我不想改变svcutil.exe使用元数据的方式,只需在生成的 wsdl 中添加一些 ComplexType 'on-the-fly'。

感谢您的建议!

4

1 回答 1

5

您需要的是实施IWsdlExportExtension.ExportContract,但文档明确指出:

当元数据导出系统正在导出合同时,会调用 ExportContract 方法。只有实现 IWsdlExportExtension 的合约和操作行为才能获得 ExportContract 调用。所有实现 IWsdlExportExtension 的行为都会得到 ExportEndpoint 调用。

对我来说,这意味着只有在由通常由自定义属性定义的合同或操作行为实现时才调用此方法,但您也应该能够在自定义初始化中分配这些行为。这是从配置文件配置的端点的 WSDL 扩展示例(配置仅提供整个服务和端点的行为)。我相信(但没有测试)你可以做类似的扩展,其中包括:

  • 操作或合同行为实施IWsdlExportExtensionExportContract
  • 将实现IEndpointBehavior和的端点行为ApplyDispatchBehavior。在ApplyDispatchBehavior您将使用serviceEndpoint.Contract.Behaviors添加合同行为或serviceEndpoint.Contract.Operations[x].Behaviors添加操作行为。
  • 您将创建类似BehaviorExtensionElement的用于从配置文件定义新端点行为。
于 2011-05-05T08:36:52.553 回答