WCF - 定制化WSDL生成

4
我花了几个小时尝试在wsdl生成中进行一些自定义,但没有结果。我陷入了困境,主要是因为我找不到想要做的清晰示例(可能我错过了什么)。
言归正传:我想自定义生成的WSDL。我发现最相关的文章是关于向现有服务添加属性以添加行为,就像这篇文章
我想做的是能够分析OperationContract并在需要时生成附加xsd。
我的问题是:
  • 如何添加或拦截现有的WSDL生成而不添加属性?
  • 我该如何在配置文件中配置此组件?
我不想改变元数据被svcutil.exe消耗的方式,只是在生成的wsdl中“即兴”添加一些复杂类型。
感谢您的建议!
1个回答

5
你需要实现 IWsdlExportExtension.ExportContract,但是文档明确说明:

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

对我来说,这意味着只有在由自定义属性定义的合同或操作行为实现时才会调用此方法,但您还应该能够在自定义初始化中分配这些行为。这里提供了一个从配置文件配置端点的WSDL扩展示例(配置仅为整个服务和端点提供行为)。我相信(但没有测试过)您可以执行类似的扩展,其中包括:
  • 操作或合同行为实现IWsdlExportExtensionExportContract
  • 端点行为将实现IEndpointBehaviorApplyDispatchBehavior。在ApplyDispatchBehavior中,您将使用serviceEndpoint.Contract.Behaviors添加合同行为或serviceEndpoint.Contract.Operations[x].Behaviors添加操作行为。
  • 您将创建类似的BehaviorExtensionElement,以从配置文件定义新的端点行为。

感谢您提供这个完整的答案,我会尽快测试并发布评论。 - Mose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接