Freigeben über


IWsdlExportExtension Schnittstelle

Definition

Definiert Endpunkt- oder Vertragsverhalten, das benutzerdefinierte Metadaten exportieren kann.

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

Beispiele

Das folgende Codebeispiel zeigt ein IWsdlExportExtension Beispiel, das der WSDL-Datei benutzerdefinierte Dokumentationsattribute als WSDL-Anmerkungen hinzufügt.

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

Um die von WsdlExporter Objekten exportierte Webdienstbeschreibungssprache (Web Services Description Language, WSDL) zu ändern und zu erweitern, implementieren Sie die IWsdlExportExtension Schnittstelle für einen Endpunkt, einen Vertrag oder ein Vorgangsverhalten (ein Objekt, das entweder IContractBehavior, oder IEndpointBehaviorIOperationBehavior) implementiert, und fügen Sie das Verhalten dem , Behaviorsoder Behaviors der BehaviorsEigenschaft hinzu. Darüber hinaus können Sie auch IWsdlExportExtension für ein BindingElement.

Hinweis

IWsdlExportExtension Implementierungen werden niemals aufgerufen, wenn sie als implementiert IServiceBehaviorwerden.

IWsdlExportExtension exportiert keine benutzerdefinierten Richtlinien assertionen, obwohl Windows Communication Foundation (WCF) benutzerdefinierte Bindungsrichtlinien assertionen in das entsprechende Element innerhalb von WSDL exportiert. Wenn Sie benutzerdefinierte Richtlinien assertionen exportieren möchten, implementieren Sie die IPolicyExportExtension Schnittstelle.

Der Metadatenveröffentlichungsprozess beginnt mit dem Aufrufen WsdlExporter.ExportEndpoints , die wiederum für jeden Endpunkt aufruft WsdlExporter.ExportEndpoint .

Der Endpunkt wird exportiert, indem er zuerst seinen Vertrag exportiert. Beim Exportieren eines Vertrags ruft die System.ServiceModel.Description.WsdlExporterIWsdlExportExtension.ExportContract Methode für alle IWsdlExportExtension Implementierungen für den Vertrag und das Betriebsverhalten für diesen Vertrag auf. Vorgänge, die Wildcardaktionen verwenden, werden nicht in Metadaten exportiert, sodass IWsdlExportExtension Implementierungen für Vorgangsverhalten für diese Vorgänge nicht exportiert werden.

Nach dem Exportieren des Vertrags werden der Port und die Bindung exportiert und Richtlinienausdrücke exportiert.

Sowohl die ExportContract Methoden als auch die ExportEndpoint Methoden bieten Zugriff auf die WsdlExporter sodass IWsdlExportExtension Implementierungen wiederherstellbare Fehler und Warnungen über die Errors Eigenschaft melden können. Die an beide Methoden übergebenen Kontextobjekte bieten praktische Zuordnungen von exportierten WSDL-Elementen zu Eigenschaften ContractDescription und ServiceEndpoint Objekten.

Wenn eine IWsdlExportExtension Implementierung eine Ausnahme beim Export auslöst, befinden sich die generierten Metadaten in einem inkonsistenten Zustand, und das WsdlExporter Objekt sollte verworfen werden.

Hinweis

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

Methoden

Name Beschreibung
ExportContract(WsdlExporter, WsdlContractConversionContext)

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

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

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

Gilt für: