4

wsdl 生成でいくつかのカスタマイズをしようと何時間も費やしましたが、結果はありませんでした。主に、やりたいことの明確なサンプルが見つからなかったため、行き詰まりました(何かを見逃している可能性があります)。

要点を説明しましょう:生成された WSDLをカスタマイズしたいと思います。私が見つけた最も関連性の高い記事は、この記事のように、既存のサービスに属性を追加して動作を追加することに関するものです。

私がやりたいことは、OperationContractを分析し、必要に応じて追加の xsd を生成できるようにすることです。

私の質問は次のとおりです。

  • 属性を追加せずに、既存の WSDL 生成をどのように追加または傍受できますか?
  • 構成ファイルでこのコンポーネントを構成するにはどうすればよいですか?

メタデータがsvcutil.exeによって消費される方法を変更したくありません。生成された wsdl に「オンザフライ」で ComplexType を追加するだけです。

あなたの提案をありがとう!

4

1 に答える 1

5

必要なのは実装ですIWsdlExportExtension.ExportContract、ドキュメントには次のように明確に記載されています。

ExportContractメソッドは、メタデータエクスポートシステムがコントラクトをエクスポートしているときに呼び出されます。IWsdlExportExtensionを実装するコントラクトおよび操作動作のみがExportContract呼び出しを取得します。IWsdlExportExtensionを実装するすべての動作は、ExportEndpoint呼び出しを取得します。

私にとって、このメソッドは、通常はカスタム属性によって定義されるコントラクトまたは操作動作によって実装された場合にのみ呼び出されることを意味しますが、カスタム初期化でこれらの動作を割り当てることもできるはずです。これは、構成ファイルから構成されたエンドポイントのWSDL拡張の例です(構成は、サービス全体とエンドポイントの動作のみを提供します)。私はあなたが以下からなる同様の拡張を行うことができると信じています(しかしそれをテストしませんでした):

  • 運用または契約行動の実装IWsdlExportExtensionExportContract
  • IEndpointBehaviorおよびを実装するエンドポイントの動作ApplyDispatchBehavior。で、コントラクト動作を追加したりApplyDispatchBehavior、操作動作を追加したりします。serviceEndpoint.Contract.BehaviorsserviceEndpoint.Contract.Operations[x].Behaviors
  • BehaviorExtensionElement構成ファイルから新しいエンドポイントの動作を定義するために同様のものを作成します。
于 2011-05-05T08:36:52.553 に答える