IWsdlExportExtension Schnittstelle

Definition

Definiert Endpunkt- oder Vertragsverhalten, mit dem benutzerdefinierte Metadaten exportiert werden können.

public interface class IWsdlExportExtension
public interface IWsdlExportExtension
type IWsdlExportExtension = interface
Public Interface IWsdlExportExtension
Abgeleitet

Beispiele

Im folgenden Codebeispiel wird eine IWsdlExportExtension veranschaulicht, mit der benutzerdefinierte Dokumentaitonsattribute als WSDL-Anmerkungen zur WSDL-Datei hinzugefügt werden.

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

Hinweise

Implementieren Sie zum Ändern und Erweitern der von WsdlExporter-Objekten exportierten WSDL (Web Services Description Language) die IWsdlExportExtension-Schnittstelle in einem Endpunkt-, Vertrags- oder Vorgangsverhalten (ein Objekt, das IContractBehavior, IEndpointBehavior oder IOperationBehavior), und fügen Sie das Verhalten zur Eigenschaft Behaviors, Behaviors oder Behaviors hinzu. Zusätzlich können Sie IWsdlExportExtension für ein BindingElement implementieren.

Hinweis

IWsdlExportExtension Implementierungen werden nie aufgerufen, wenn sie als IServiceBehaviorimplementiert werden.

IWsdlExportExtension exportiert keine benutzerdefinierten Richtlinienassertionen, obwohl Windows Communication Foundation (WCF) benutzerdefinierte Bindungsrichtlinienassertionen in das entsprechende Element in WSDL exportiert. Zum Export benutzerdefinierter Richtlinienaessertionen implementieren Sie die IPolicyExportExtension-Schnittstelle.

Der Metadatenveröffentlichungsprozess beginnt mit dem Aufruf von WsdlExporter.ExportEndpoints, wodurch wiederum WsdlExporter.ExportEndpoint für jeden Endpunkt aufgerufen wird.

Der Endpunkt wird zuerst durch den Export des dazugehörigen Vertrags exportiert. Beim Export eines Vertrags ruft der System.ServiceModel.Description.WsdlExporter die IWsdlExportExtension.ExportContract-Mehtode für alle IWsdlExportExtension-Implementierungen im Vertrag und Vorgangsverhalten für diesen Vertrag auf. Vorgänge, für die Plazuhalteraktionen verwendet werden, werden nicht in Metadaten exportiert, sodass IWsdlExportExtension-Implementierungen für Vorgangsverhalten für diese Vorgänge nicht exportiert werden.

Nach dem Export des Vertrags werden der Anschluss und die Bindung exportiert, und exportierte Richtlinienausdrücke werden angehängt.

Die ExportContract-Methode und die ExportEndpoint-Methode gewähren Zugriff auf den WsdlExporter, sodass IWsdlExportExtension-Implementierungen wiederherstellbare Fehler und Warnungen über die Errors-Eigenschaft berichten können. Die an beide Methoden übergebenen Kontextobjekte stellen bequeme Zuordnungen aus exportierten WSDL-Elementen zu Eigenschaften von ContractDescription-Objekten und ServiceEndpoint-Objekten bereit.

Löst eine IWsdlExportExtension-Implementierung beim Export eine Ausnahme aus, weisen die generierten Metadaten einen inkonsistenten Zustand auf, und das WsdlExporter-Objekt sollte verworfen werden.

Hinweis

Die benutzerdefinierte Exporterweiterung muss ausgeführt werden, nachdem das integrierte Serialisierungsprogramm die Dienstbeschreibung aufgefüllt hat.

Methoden

ExportContract(WsdlExporter, WsdlContractConversionContext)

Schreibt benutzerdefinierte WSDL (Web Services Description Language)-Elemente in für einen Vertrag generierte WSDL.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

Schreibt benutzerdefinierte WSDL (Web Services Description Language)-Elemente in die generierte WSDL für einen Endpunkt.

Gilt für: