WCF - 自定义WDSL生成

时间:2011-05-05 08:09:48

标签: c# wcf wsdl svcutil.exe operationcontract

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

让我们谈谈:我想自定义生成的WSDL。 我发现的最相关的文章是关于向现有服务添加属性以添加行为like this article

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

我的问题是:

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

我不想改变 svcutil.exe 消耗元数据的方式,只需在生成的wsdl中添加一些ComplexType'即时'。

感谢您的建议!

1 个答案:

答案 0 :(得分:5)

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

  

调用ExportContract方法   当元数据导出系统是   出口合同。只有合同   和实施的操作行为   IWsdlExportExtension得到了   ExportContract调用。所有行为   实现IWsdlExportExtension get   ExportEndpoint调用。

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

  • 操作或合同行为实施IWsdlExportExtensionExportContract
  • 将实施IEndpointBehaviorApplyDispatchBehavior的端点行为。在ApplyDispatchBehavior中,您将使用serviceEndpoint.Contract.Behaviors添加合同行为,或使用serviceEndpoint.Contract.Operations[x].Behaviors添加操作行为。
  • 您将创建类似的BehaviorExtensionElement,用于从配置文件中定义新的端点行为。