IWsdlExportExtension Interface

Definitie

Definieert eindpunt- of contractgedrag waarmee aangepaste metagegevens kunnen worden geëxporteerd.

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

Voorbeelden

In het volgende codevoorbeeld ziet u een IWsdlExportExtension voorbeeld waarin aangepaste documentatiekenmerken als WSDL-aantekeningen worden toegevoegd aan het WSDL-bestand.

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);
                }
            }
        }
    }
}

Opmerkingen

Als u de WSDL (Web Services Description Language) wilt wijzigen en uitbreiden die wordt geëxporteerd door WsdlExporter objecten, implementeert u de IWsdlExportExtension interface op een eindpunt, contract of bewerkingsgedrag (een object dat implementeert IContractBehavior, IEndpointBehaviorof IOperationBehavior) en voegt u het gedrag toe aan de Behaviors, Behaviorsof Behaviors eigenschap. Daarnaast kunt u ook implementeren IWsdlExportExtension op een BindingElement.

Note

IWsdlExportExtension implementaties worden nooit aangeroepen als ze worden geïmplementeerd als een IServiceBehavior.

IWsdlExportExtension exporteert geen aangepaste beleidsverklaringen, ook al exporteert Windows Communication Foundation (WCF) aangepaste bindingsbeleidsverklaringen naar het juiste element in WSDL. Als u aangepaste beleidsverklaringen wilt exporteren, implementeert u de IPolicyExportExtension interface.

Het publicatieproces voor metagegevens begint met het aanroepen WsdlExporter.ExportEndpointsWsdlExporter.ExportEndpoint van op zijn beurt voor elk eindpunt.

Het eindpunt wordt geëxporteerd door eerst het contract te exporteren. Wanneer u een contract exporteert, roept u System.ServiceModel.Description.WsdlExporter de IWsdlExportExtension.ExportContract methode aan voor alle IWsdlExportExtension implementaties van het contract en het werkingsgedrag voor dat contract. Bewerkingen die jokertekenacties gebruiken, worden niet geëxporteerd in metagegevens, dus IWsdlExportExtension implementaties van bewerkingsgedrag voor deze bewerkingen worden niet geëxporteerd.

Na het exporteren van het contract worden de poort en binding geëxporteerd en worden de beleidsexpressies geëxporteerd.

Zowel de ExportContract als de ExportEndpoint methoden bieden toegang tot de WsdlExporter methode, zodat IWsdlExportExtension implementaties herstelbare fouten en waarschuwingen via de Errors eigenschap kunnen rapporteren. De contextobjecten die in beide methoden worden doorgegeven, bieden handige toewijzingen van geëxporteerde WSDL-elementen aan eigenschappen van ContractDescription en ServiceEndpoint objecten.

Als een IWsdlExportExtension implementatie een uitzondering genereert bij het exporteren, hebben de gegenereerde metagegevens een inconsistente status en moet het WsdlExporter object worden verwijderd.

Note

De aangepaste exportextensie moet worden uitgevoerd nadat de ingebouwde serializer de servicebeschrijving heeft ingevuld.

Methoden

Name Description
ExportContract(WsdlExporter, WsdlContractConversionContext)

Schrijft aangepaste WSDL-elementen (Web Services Description Language) naar de gegenereerde WSDL voor een contract.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

Schrijft aangepaste WSDL-elementen (Web Services Description Language) naar de gegenereerde WSDL voor een eindpunt.

Van toepassing op