IWsdlExportExtension Interface

Definição

Define os comportamentos de ponto de extremidade ou de contrato 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 a seguir mostra um IWsdlExportExtension que adiciona atributos de documentação personalizados ao arquivo 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);
                }
            }
        }
    }
}

Comentários

Para modificar e estender a linguagem WSDL exportada por WsdlExporter objetos, implemente a IWsdlExportExtension interface em um ponto de extremidade, contrato ou comportamento de operação (um objeto que implementa IContractBehavior, IEndpointBehaviorou IOperationBehavior) e adicione o comportamento à Behaviorspropriedade , Behaviorsou Behaviors . Além disso, você também pode implementar IWsdlExportExtension em um BindingElement.

Observação

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

IWsdlExportExtension não exporta declarações de política personalizadas, embora o WCF (Windows Communication Foundation) exporte declarações de política de associação personalizadas para o elemento apropriado dentro do WSDL. Se você quiser exportar declarações de política personalizadas, implemente a IPolicyExportExtension interface .

O processo de publicação de metadados começa chamando WsdlExporter.ExportEndpoints que, por sua vez, chama WsdlExporter.ExportEndpoint para cada ponto de extremidade.

O ponto de extremidade é exportado pela primeira vez exportando seu contrato. Ao exportar um contrato, o System.ServiceModel.Description.WsdlExporter chama o IWsdlExportExtension.ExportContract método em todas as IWsdlExportExtension implementações no contrato e comportamentos de operação para esse contrato. As operações que usam ações curinga não são exportadas em metadados, portanto IWsdlExportExtension , as implementações em comportamentos de operação para essas operações não são exportadas.

Depois de exportar o contrato, a porta e a associação são exportadas e as expressões de política exportadas são anexadas.

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

Se uma IWsdlExportExtension implementação gerar uma exceção na exportação, os metadados gerados estarão em um estado inconsistente e o WsdlExporter objeto deverá ser descartado.

Observação

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

Métodos

ExportContract(WsdlExporter, WsdlContractConversionContext)

Grava elementos de WSDL (linguagem WSDL) personalizados na WSDL gerada para um contrato.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

Grava elementos WSDL (linguagem WSDL) personalizados no WSDL gerado para um ponto de extremidade.

Aplica-se a