2011-05-05 67 views
4

我花了幾個小時嘗試在wsdl代中進行一些自定義設置,結果沒有。 我被卡住了,主要是因爲我找不到我想要做的清晰樣本(我可能錯過了一些東西)。我想要定製生成的WSDL。 我找到的最相關的文章是關於添加屬性到現有的服務添加行爲,like this articleWCF - 自定義的WDSL代

我想要做的就是能夠分析OperationContract並根據需要生成並添加xsd。

我的問題是:

  • 你怎麼可以添加或攔截現有的WSDL生成無需添加屬性
  • 如何在配置文件中配置此組件?

我不想改變的元數據被svcutil.exe的消耗的方式,只需添加「上即時」生成的WSDL一些的ComplexType。

感謝您的建議!

回答

5

你需要的是實現IWsdlExportExtension.ExportContractthe documentation明確什麼規定:

的ExportContract方法被調用 當元數據輸出系統是 出口合同。僅合同 和執行操作行爲 IWsdlExportExtension獲取 ExportContract調用。執行IWsdlExportExtension的所有行爲 都獲得 的ExportEndpoint調用。

對我來說,這意味着當它通常是由自定義屬性定義的合同或操作行爲實現的,但你應該也能夠在定製的初始化分配這些行爲,這種方法只調用。用於從配置文件配置的端點的WSDL擴展的Here is the example(配置僅提供整個服務和端點的行爲)。我相信,(但沒有測試它),你可以做類似的擴展,將包括:

  • 操作或合同行爲實施IWsdlExportExtensionExportContract
  • 端點的行爲將實施IEndpointBehaviorApplyDispatchBehavior。在ApplyDispatchBehavior中,您將使用serviceEndpoint.Contract.Behaviors添加合同行爲或serviceEndpoint.Contract.Operations[x].Behaviors以添加操作行爲。
  • 您將創建類似BehaviorExtensionElement以從配置文件中定義新的端點行爲。
+0

感謝這個完整的答案,我會盡快發佈評論,只要我可以測試它 – Mose 2011-05-06 11:01:56