IWsdlExportExtension インターフェイス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
カスタム メタデータをエクスポートできるエンドポイントまたはコントラクトの動作を定義します。
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) を変更および拡張するには、エンドポイント、コントラクト、または操作の動作 (IWsdlExportExtension、IContractBehavior または IEndpointBehavior を実装するオブジェクト) に IOperationBehavior インターフェイスを実装し、その動作を Behaviors プロパティ、Behaviors プロパティ、または Behaviors プロパティに追加します。 また、IWsdlExportExtension に BindingElement を実装することもできます。
注意
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 要素を書き込みます。 |
適用対象
.NET