IWsdlExportExtension IWsdlExportExtension IWsdlExportExtension IWsdlExportExtension Interface

定義

カスタム メタデータをエクスポートできるエンドポイントまたはコントラクトの動作を定義します。Defines endpoint or contract behaviors that can export custom metadata.

public interface class IWsdlExportExtension
public interface IWsdlExportExtension
type IWsdlExportExtension = interface
Public Interface IWsdlExportExtension
派生

カスタム ドキュメント属性を WSDL ファイルに WSDL 注釈として追加する IWsdlExportExtension を次のコード例に示します。The following code example shows an IWsdlExportExtension that adds custom documentation attributes to the WSDL file as WSDL annotations.

  public void ExportContract(WsdlExporter exporter, WsdlContractConversionContext context)
{
   Console.WriteLine("Inside ExportContract");
if (context.Contract != null)
{
     // Inside this block it is the contract-level comment attribute.
     // This.Text returns the string for the contract attribute.
     // Set the doc element; if this isn't done first, there is no XmlElement in the 
     // DocumentElement property.
     context.WsdlPortType.Documentation = string.Empty; 
     // Contract comments.
     XmlDocument owner = context.WsdlPortType.DocumentationElement.OwnerDocument;
     XmlElement summaryElement = Formatter.CreateSummaryElement(owner, this.Text); 
     context.WsdlPortType.DocumentationElement.AppendChild(summaryElement);

     foreach (OperationDescription op in context.Contract.Operations)
     {
       Operation operation = context.GetOperation(op);
       object[] opAttrs = op.SyncMethod.GetCustomAttributes(typeof(WsdlDocumentationAttribute), false);
       if (opAttrs.Length == 1)
       {
         string opComment = ((WsdlDocumentationAttribute)opAttrs[0]).Text;

         // This.Text returns the string for the operation-level attributes.
         // Set the doc element; if this isn't done first, there is no XmlElement in the 
         // DocumentElement property.
         operation.Documentation = String.Empty;

         // Operation C# triple comments.
         XmlDocument opOwner = operation.DocumentationElement.OwnerDocument;
         XmlElement newSummaryElement = Formatter.CreateSummaryElement(opOwner, opComment);
         operation.DocumentationElement.AppendChild(newSummaryElement);

         // Get returns information
         ParameterInfo returnValue = op.SyncMethod.ReturnParameter;
         object[] returnAttrs = returnValue.GetCustomAttributes(typeof(WsdlParameterDocumentationAttribute), false);
         if (returnAttrs.Length == 1)
         {
           // <returns>text.</returns>
           XmlElement returnsElement = 
             Formatter.CreateReturnsElement(
               opOwner,
               ((WsdlParameterDocumentationAttribute)returnAttrs[0]).ParamComment
             );
           operation.DocumentationElement.AppendChild(returnsElement);
         }
         
         // Get parameter information.
         ParameterInfo[] args = op.SyncMethod.GetParameters();
         for (int i = 0; i < args.Length; i++)
         {
           object[] docAttrs 
             = args[i].GetCustomAttributes(typeof(WsdlParameterDocumentationAttribute), false);
           if (docAttrs.Length != 0)
           {
             // <param name="Int1">Text.</param>
             XmlElement newParamElement = opOwner.CreateElement("param");
             XmlAttribute paramName = opOwner.CreateAttribute("name");
             paramName.Value = args[i].Name;
             newParamElement.InnerText 
               = ((WsdlParameterDocumentationAttribute)docAttrs[0]).ParamComment;
             newParamElement.Attributes.Append(paramName);
             operation.DocumentationElement.AppendChild(newParamElement);
           }
         }
       }
     }
   }

注釈

WsdlExporter オブジェクトによってエクスポートされる Web サービス記述言語 (WSDL) を変更および拡張するには、エンドポイント、コントラクト、または操作の動作 (IWsdlExportExtensionIContractBehavior または IEndpointBehavior を実装するオブジェクト) に IOperationBehavior インターフェイスを実装し、その動作を Behaviors プロパティ、Behaviors プロパティ、または Behaviors プロパティに追加します。To modify and extend the Web Services Description Language (WSDL) exported by WsdlExporter objects, implement the IWsdlExportExtension interface on an endpoint, contract, or operation behavior (an object that implements either IContractBehavior, IEndpointBehavior, or IOperationBehavior) and add the behavior to the Behaviors, Behaviors, or Behaviors property. また、IWsdlExportExtensionBindingElement を実装することもできます。In addition, you can also implement IWsdlExportExtension on a BindingElement.

注意

IWsdlExportExtension 実装は、IServiceBehavior として実装されている場合は呼び出されることはありません。IWsdlExportExtension implementations are never invoked if they are implemented as an IServiceBehavior.

IWsdlExportExtension Windows Communication Foundation (WCF) カスタム バインド ポリシー アサーションを WSDL 内の適切な要素にエクスポートする場合でも、カスタム ポリシー アサーションをエクスポートしません。IWsdlExportExtension does not export custom policy assertions even though Windows Communication Foundation (WCF) exports custom binding policy assertions to the appropriate element inside WSDL. カスタム ポリシー アサーションをエクスポートする場合は、IPolicyExportExtension インターフェイスを実装します。If you want to export custom policy assertions, implement the IPolicyExportExtension interface.

メタデータの公開プロセスは、WsdlExporter.ExportEndpoints の呼び出しによって開始されます。これにより、エンドポイントごとに WsdlExporter.ExportEndpoint が呼び出されます。The metadata publication process begins by calling WsdlExporter.ExportEndpoints which in turn calls WsdlExporter.ExportEndpoint for each endpoint.

エンドポイントのエクスポートでは、最初にエンドポイントのコントラクトをエクスポートします。コントラクトをエクスポートするときに、System.ServiceModel.Description.WsdlExporter は、コントラクトのすべての IWsdlExportExtension.ExportContract 実装とコントラクトの操作の動作で IWsdlExportExtension メソッドを呼び出します。The endpoint is exported by first exporting its contract.When exporting a contract the System.ServiceModel.Description.WsdlExporter calls the IWsdlExportExtension.ExportContract method on all IWsdlExportExtension implementations on the contract, and operation behaviors for that contract. ワイルドカード アクションを使用する操作はメタデータでエクスポートされないため、このような操作に対する操作の動作の IWsdlExportExtension 実装はエクスポートされません。Operations that use wildcard actions are not exported in metadata, so IWsdlExportExtension implementations on operation behaviors for these operations are not exported.

コントラクトのエクスポート後に、ポートとバインディングがエクスポートされ、エクスポートされたポリシー式が結び付けられます。After exporting the contract, the port and binding are exported and exported policy expressions are attached.

ExportContract および ExportEndpoint メソッドは、いずれも WsdlExporter へのアクセスを提供します。これにより、IWsdlExportExtension 実装は、回復可能なエラーおよび警告を Errors プロパティを通じてレポートできます。Both the ExportContract and the ExportEndpoint methods provide access to the WsdlExporter so that IWsdlExportExtension implementations can report recoverable errors and warnings through the Errors property. 両方のメソッドに渡されるコンテキスト オブジェクトは、エクスポートされた WSDL 要素から ContractDescription および ServiceEndpoint オブジェクトのプロパティへの便利なマッピングを提供します。The context objects passed into both methods provide convenient mappings from exported WSDL elements to properties of ContractDescription and ServiceEndpoint objects.

IWsdlExportExtension 実装がエクスポートで例外をスローした場合、生成されたメタデータには不整合があるので、WsdlExporter オブジェクトを破棄する必要があります。If an IWsdlExportExtension implementation throws an exception on export, the generated metadata is in an inconsistent state and the WsdlExporter object should be discarded.

注意

カスタム エクスポート拡張は、組み込みのシリアライザーによってサービスの説明が設定された後に実行する必要があります。Custom export extension must run after the built-in serializer populates the service description.

メソッド

ExportContract(WsdlExporter, WsdlContractConversionContext) ExportContract(WsdlExporter, WsdlContractConversionContext) ExportContract(WsdlExporter, WsdlContractConversionContext) ExportContract(WsdlExporter, WsdlContractConversionContext)

コントラクトに対して生成される Web サービス記述言語 (WSDL) に、カスタム WSDL 要素を書き込みます。Writes custom Web Services Description Language (WSDL) elements into the generated WSDL for a contract.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

エンドポイントに対して生成される Web サービス記述言語 (WSDL) に、カスタム WSDL 要素を書き込みます。Writes custom Web Services Description Language (WSDL) elements into the generated WSDL for an endpoint.

適用対象