IWsdlExportExtension インターフェイス

定義

カスタム メタデータをエクスポートできるエンドポイントまたはコントラクトの動作を定義します。

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

カスタム ドキュメント属性を WSDL ファイルに WSDL 注釈として追加する IWsdlExportExtension を次のコード例に示します。

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 プロパティに追加します。 また、IWsdlExportExtensionBindingElement を実装することもできます。

注意

IWsdlExportExtension 実装が として IServiceBehavior実装されている場合、実装は呼び出されません。

IWsdlExportExtension は、Windows Communication Foundation (WCF) がカスタム バインディング ポリシー アサーションを WSDL 内の適切な要素にエクスポートする場合でも、カスタム ポリシー アサーションをエクスポートしません。 カスタム ポリシー アサーションをエクスポートする場合は、IPolicyExportExtension インターフェイスを実装します。

メタデータの公開プロセスは、WsdlExporter.ExportEndpoints の呼び出しによって開始されます。これにより、エンドポイントごとに WsdlExporter.ExportEndpoint が呼び出されます。

エンドポイントのエクスポートでは、最初にエンドポイントのコントラクトをエクスポートします。コントラクトをエクスポートするときに、System.ServiceModel.Description.WsdlExporter は、コントラクトのすべての IWsdlExportExtension.ExportContract 実装とコントラクトの操作の動作で IWsdlExportExtension メソッドを呼び出します。 ワイルドカード アクションを使用する操作はメタデータでエクスポートされないため、このような操作に対する操作の動作の IWsdlExportExtension 実装はエクスポートされません。

コントラクトのエクスポート後に、ポートとバインディングがエクスポートされ、エクスポートされたポリシー式が結び付けられます。

ExportContract および ExportEndpoint メソッドは、いずれも WsdlExporter へのアクセスを提供します。これにより、IWsdlExportExtension 実装は、回復可能なエラーおよび警告を Errors プロパティを通じてレポートできます。 両方のメソッドに渡されるコンテキスト オブジェクトは、エクスポートされた WSDL 要素から ContractDescription および ServiceEndpoint オブジェクトのプロパティへの便利なマッピングを提供します。

IWsdlExportExtension 実装がエクスポートで例外をスローした場合、生成されたメタデータには不整合があるので、WsdlExporter オブジェクトを破棄する必要があります。

注意

カスタム エクスポート拡張は、組み込みのシリアライザーによってサービスの説明が設定された後に実行する必要があります。

メソッド

ExportContract(WsdlExporter, WsdlContractConversionContext)

コントラクトに対して生成される Web サービス記述言語 (WSDL) に、カスタム WSDL 要素を書き込みます。

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

エンドポイントに対して生成される Web サービス記述言語 (WSDL) に、カスタム WSDL 要素を書き込みます。

適用対象