IWsdlExportExtension Interface

Définition

Définit un point de terminaison ou des comportements de contrat qui peuvent exporter des métadonnées personnalisés.

public interface class IWsdlExportExtension
public interface IWsdlExportExtension
type IWsdlExportExtension = interface
Public Interface IWsdlExportExtension
Dérivé

Exemples

L'exemple de code suivant illustre un IWsdlExportExtension qui ajoute des attributs de documentation personnalisés au fichier WSDL sous forme d'annotations WSDL.

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

Remarques

Pour modifier et étendre les extension WSDL (Web Services Description Language) exportées par les objets WsdlExporter, implémentez l'interface IWsdlExportExtension sur un point de terminaison, un contrat ou un comportement d'opération (objet qui implémente IContractBehavior, IEndpointBehavior ou IOperationBehavior) et ajoutez le comportement à la propriété Behaviors, Behaviorsou Behaviors. De plus, vous pouvez implémenter IWsdlExportExtension sur un BindingElement.

Notes

IWsdlExportExtension les implémentations ne sont jamais appelées si elles sont implémentées en tant que IServiceBehavior.

IWsdlExportExtension n’exporte pas les assertions de stratégie personnalisées même si Windows Communication Foundation (WCF) exporte les assertions de stratégie de liaison personnalisées vers l’élément approprié dans WSDL. Si vous souhaitez exporter des assertions de stratégie personnalisées, implémentez l'interface IPolicyExportExtension.

Le processus de la publication des métadonnées commence en appelant WsdlExporter.ExportEndpoints qui ensuite appelle WsdlExporter.ExportEndpoint pour chaque point de terminaison.

Le point de terminaison est exporté en exportant en premier lieu son contrat. Lors de l'exportation d'un contrat, l'System.ServiceModel.Description.WsdlExporter appelle la méthode IWsdlExportExtension.ExportContract sur toutes les implémentations IWsdlExportExtension du contrat et sur les comportements d'opération associés à ce contrat. Les opérations qui utilisent des actions génériques ne sont pas exportées dans les métadonnées ; par conséquent, les implémentations IWsdlExportExtension sur les comportements d'opération associés à ces opérations ne sont pas exportées.

Après l’exportation du contrat, le port et la liaison sont exportés et les expressions de stratégie exportées sont jointes.

Les méthodes ExportContract et ExportEndpoint fournissent toutes deux l'accès à l'WsdlExporter afin que des implémentations IWsdlExportExtension puissent signaler des erreurs récupérables et des avertissements via la propriété Errors. Les objets de contexte passés aux deux méthodes fournissent des mappages appropriés entre des éléments WSDL exportés et des propriétés d’objets ContractDescription et ServiceEndpoint.

Si une implémentation IWsdlExportExtension lève une exception au niveau de l'exportation, les métadonnées générées portent un état incohérent et l'objet WsdlExporter doit dans ce cas être ignoré.

Notes

L’extension de l’exportation personnalisée doit s’exécuter après que le sérialiseur intégré a rempli la description du service.

Méthodes

ExportContract(WsdlExporter, WsdlContractConversionContext)

Écrit des éléments WSDM (Web Services Description Language) personnalisés dans le service WSDL généré pour un contrat.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

Écrit des éléments WSDM (Web Services Description Language) personnalisés dans le service WSDL généré pour un point de terminaison.

S’applique à