Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês
Esta documentação foi arquivada e não está sendo atualizada.

Interface IWsdlExportExtension

Define os comportamentos de ponto de extremidade ou contrato que podem exportar metadados personalizados.

Namespace:  System.ServiceModel.Description
Assembly:  System.ServiceModel (em System.ServiceModel.dll)

public interface IWsdlExportExtension

O tipo IWsdlExportExtension expõe os membros a seguir.

  NomeDescrição
Método públicoExportContractGrava a elementos de linguagem de descrição de serviços da Web (WSDL) personalizados no WSDL gerado para um contrato.
Método públicoExportEndpointGrava os elementos personalizados de linguagem de descrição de serviços da Web (WSDL) para o WSDL gerado para um ponto de extremidade.
Início

Para modificar e estender o WSDL Web Services Description Language () exportados por WsdlExporter objetos, implementar a IWsdlExportExtension interface de um comportamento de ponto de extremidade, contrato ou operação (um objeto que implementa um IContractBehavior, IEndpointBehavior, ou IOperationBehavior) e adicionar o comportamento para o Behaviors, Behaviors, ou Behaviors propriedade.Além disso, você também pode implementar IWsdlExportExtension em um BindingElement.

ObservaçãoObservação

IWsdlExportExtension implementações nunca são invocadas se eles são implementados como um IServiceBehavior.

IWsdlExportExtension não exporta as declarações de diretiva personalizada embora exporta as declarações de diretiva de ligação personalizada para o elemento apropriado dentro do WSDL.Se você deseja exportar as declarações de diretiva personalizada, implementar a IPolicyExportExtension interface.

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

O ponto de extremidade é exportado pelo primeiro exportar seu contrato.Ao exportar um contrato a System.ServiceModel.Description.WsdlExporter chamadas de IWsdlExportExtension.ExportContract método em todas as IWsdlExportExtension implementações no contrato e os comportamentos de operação para o contrato.Operações de ações de curinga não são exportadas em metadados, portanto, IWsdlExportExtension implementações de comportamentos de operação para essas operações não são exportadas.

Depois de exportar o contrato, a porta e vinculação são exportados e exportados são anexadas a expressões de diretiva.

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

Se um IWsdlExportExtension implementação lança uma exceção na exportação, os metadados gerado estão em um estado inconsistente e a WsdlExporter objeto deve ser descartado.

ObservaçãoObservação

Extensão de exportação personalizada deve ser executado após o serializador interno preenche a descrição do serviço.

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


.NET Framework

Com suporte em: 4, 3.5, 3.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Windows 7, Windows Vista SP1 ou posterior, Windows XP SP3, Windows Server 2008 (Server Core não compatível), Windows Server 2008 R2 (Server Core não compatível com SP1 ou posterior), Windows Server 2003 SP2

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos de sistema do .NET Framework.
Mostrar: