IWsdlExportExtension Interface

Definição

Define comportamentos de endpoint ou contratos que podem exportar metadados personalizados.

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

Exemplos

O exemplo de código seguinte mostra um IWsdlExportExtension que adiciona atributos de documentação personalizados ao ficheiro WSDL como anotações 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);
                }
            }
        }
    }
}

Observações

Para modificar e estender a Web Services Description Language (WSDL) exportada por WsdlExporter objetos, implemente a IWsdlExportExtension interface num endpoint, contrato ou comportamento operacional (um objeto que implemente , IContractBehaviorIEndpointBehavior, ou IOperationBehavior) e adicione o comportamento à Behaviorspropriedade , Behaviors, ou Behaviors . Além disso, também pode implementar IWsdlExportExtension num BindingElement.

Note

IWsdlExportExtension implementações nunca são invocadas se forem implementadas como um IServiceBehavior.

IWsdlExportExtension não exporta asserções de política aduaneira, embora Windows Communication Foundation (WCF) exporte asserções de política vinculativa personalizada para o elemento apropriado dentro da WSDL. Se quiseres exportar asserções de políticas personalizadas, implementa a IPolicyExportExtension interface.

O processo de publicação de metadados começa por chamar WsdlExporter.ExportEndpoints que, por sua vez, chama WsdlExporter.ExportEndpoint cada endpoint.

O endpoint é exportado primeiro exportando o seu contrato. Ao exportar um contrato, chama System.ServiceModel.Description.WsdlExporter o IWsdlExportExtension.ExportContract método em todas IWsdlExportExtension as implementações do contrato e os comportamentos operacionais desse contrato. Operações que utilizam ações curinga não são exportadas nos metadados, pelo que IWsdlExportExtension implementações sobre comportamentos operacionais para estas operações não são exportadas.

Após a exportação do contrato, o port e a vinculação são exportados e as expressões de política exportadas são anexadas.

Tanto os ExportContract métodos como ExportEndpoint os fornecem acesso ao WsdlExporter para que IWsdlExportExtension as implementações possam reportar erros e avisos recuperáveis através da Errors propriedade. Os objetos de contexto passados em ambos os métodos fornecem mapeamentos convenientes dos elementos WSDL exportados para propriedades de ContractDescription e ServiceEndpoint objetos.

Se uma IWsdlExportExtension implementação lançar uma exceção na exportação, os metadados gerados estão num estado inconsistente e o WsdlExporter objeto deve ser descartado.

Note

A extensão de exportação personalizada deve ser executada depois de o serializador incorporado preencher a descrição do serviço.

Métodos

Name Description
ExportContract(WsdlExporter, WsdlContractConversionContext)

Escreve elementos personalizados da Web Services Description Language (WSDL) no WSDL gerado para um contrato.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

Escreve elementos personalizados da Web Services Description Language (WSDL) no WSDL gerado para um endpoint.

Aplica-se a