クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
.NET 開発
.NET Framework 3.5
.NET Framework 3.5

  低帯域幅での表示をオンにする
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2008/.NET Framework 3.5

その他のバージョンについては、以下の情報を参照してください。
.NET Framework クラス ライブラリ
IWsdlExportExtension インターフェイス

更新 : 2007 年 11 月

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

名前空間 :  System.ServiceModel.Description
アセンブリ :  System.ServiceModel (System.ServiceModel.dll 内)
Visual Basic (宣言)
Public Interface IWsdlExportExtension
Visual Basic (使用法)
Dim instance As IWsdlExportExtension
C#
public interface IWsdlExportExtension
Visual C++
public interface class IWsdlExportExtension
J#
public interface IWsdlExportExtension
JScript
public interface IWsdlExportExtension

WsdlExporter オブジェクトによってエクスポートされる Web サービス記述言語 (WSDL) を変更および拡張するには、エンドポイント、コントラクト、または操作の動作 (IContractBehaviorIEndpointBehavior または IOperationBehavior を実装するオブジェクト) に IWsdlExportExtension インターフェイスを実装し、その動作を Behaviors プロパティ、Behaviors プロパティ、または Behaviors プロパティに追加します。また、BindingElementIWsdlExportExtension を実装することもできます。

ms599124.alert_note(ja-jp,VS.90).gifメモ :

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

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

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

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

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

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

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

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

C#
    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);
              }
            }
          }
        }
      }

Windows Vista, Windows XP SP2, Windows Server 2003

.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

.NET Framework

サポート対象 : 3.5、3.0
コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker