Condividi tramite


IWsdlExportExtension Interfaccia

Definizione

Definisce comportamenti dell'endpoint o del contratto che possono esportare metadati personalizzati.

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

Esempio

Nell'esempio di codice seguente è mostrato un IWsdlExportExtension che aggiunge attributi della documentazione personalizzati al file WSDL come annotazioni 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);
                }
            }
        }
    }
}

Commenti

Per modificare ed estendere il WSDL (Web Services Description Language) esportato da oggetti WsdlExporter, implementare l'interfaccia IWsdlExportExtension su un endpoint, contratto o comportamento dell'operazione (un oggetto che implementa IContractBehavior, IEndpointBehavior o IOperationBehavior) e aggiungere il comportamento alla proprietà Behaviors, Behaviors o Behaviors. In aggiunta, è anche possibile implementare IWsdlExportExtension su un BindingElement.

Nota

IWsdlExportExtension le implementazioni non vengono mai richiamate se vengono implementate come IServiceBehavior.

IWsdlExportExtension non esporta asserzioni di criteri personalizzate anche se Windows Communication Foundation (WCF) esporta asserzioni di criteri di associazione personalizzate nell'elemento appropriato all'interno di WSDL. Se si desidera esportare asserzioni di criteri personalizzate, implementare l'interfaccia IPolicyExportExtension.

Il processo di pubblicazione di metadati inizia chiamando WsdlExporter.ExportEndpoints che a sua volta chiama WsdlExporter.ExportEndpoint per ciascun endpoint.

L'endpoint viene esportato esportando prima il relativo contratto. Quando si esporta un contratto System.ServiceModel.Description.WsdlExporter chiama il metodo IWsdlExportExtension.ExportContract su tutte le implementazioni IWsdlExportExtension nel contratto e sui comportamenti dell'operazione per quel contratto. Le operazioni che utilizzano azioni jolly non vengono esportate in metadati, quindi le implementazioni di IWsdlExportExtension su comportamenti dell'operazione per queste operazioni non vengono esportate.

Dopo avere esportato il contratto, la porta e l'associazione vengono esportati e vengono allegate le espressioni dei criteri esportate.

Entrambi i metodi ExportContract e ExportEndpoint forniscono l'accesso a WsdlExporter così le implementazioni di IWsdlExportExtension sono in grado di segnalare gli errori reversibili e gli avvisi per mezzo della proprietà Errors. Gli oggetti di contesto passati in entrambi i metodi forniscono mapping convenienti tra gli elementi WSDL esportati e le proprietà degli oggetti ContractDescription e ServiceEndpoint.

Se un'implementazione di IWsdlExportExtension genera un'eccezione di esportazione, i metadati generati sono in un stato incoerente e l'oggetto WsdlExporter deve essere ignorato.

Nota

L'estensione dell'esportazione personalizzata deve andare in esecuzione dopo che il serializzatore incorporato popola la descrizione del servizio.

Metodi

ExportContract(WsdlExporter, WsdlContractConversionContext)

Scrive elementi WSDL (Web Services Description Language) personalizzati nel WSDL generato per un contratto.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

Scrive elementi WSDL (Web Services Description Language) personalizzati nel WSDL generato per un endpoint.

Si applica a