IWsdlExportExtension Gränssnitt

Definition

Definierar slutpunkts- eller kontraktsbeteenden som kan exportera anpassade metadata.

public interface class IWsdlExportExtension
public interface IWsdlExportExtension
type IWsdlExportExtension = interface
Public Interface IWsdlExportExtension
Härledda

Exempel

I följande kodexempel visas ett IWsdlExportExtension som lägger till anpassade dokumentationsattribut i WSDL-filen som WSDL-anteckningar.

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

Kommentarer

Om du vill ändra och utöka det webbtjänstbeskrivningsspråk (WSDL) som exporteras av WsdlExporter objekt implementerar IWsdlExportExtension du gränssnittet på en slutpunkt, ett kontrakt eller åtgärdsbeteende (ett objekt som implementerar antingen IContractBehavior, IEndpointBehavioreller IOperationBehavior) och lägger till beteendet i Behaviorsegenskapen , Behaviorseller Behaviors . Dessutom kan du även implementera IWsdlExportExtension på en BindingElement.

Anmärkning

IWsdlExportExtension implementeringar anropas aldrig om de implementeras som en IServiceBehavior.

IWsdlExportExtension exporterar inte anpassade principkontroller trots att Windows Communication Foundation (WCF) exporterar anpassade bindningsprincipkontroller till lämpligt element i WSDL. Om du vill exportera anpassade principkontroller implementerar du IPolicyExportExtension gränssnittet.

Processen för metadatapublicering börjar med att anropa WsdlExporter.ExportEndpoints som i sin tur anropar WsdlExporter.ExportEndpoint för varje slutpunkt.

Slutpunkten exporteras genom att först exportera kontraktet. När du exporterar ett kontrakt System.ServiceModel.Description.WsdlExporter anropas IWsdlExportExtension.ExportContract metoden för alla IWsdlExportExtension implementeringar i kontraktet och driftbeteenden för det kontraktet. Åtgärder som använder jokerteckenåtgärder exporteras inte i metadata, så IWsdlExportExtension implementeringar av åtgärdsbeteenden för dessa åtgärder exporteras inte.

När kontraktet har exporterats exporteras porten och bindningen och exporterade principuttryck kopplas.

ExportContract Både metoderna och ExportEndpoint ger åtkomst till WsdlExporter så att IWsdlExportExtension implementeringar kan rapportera återställningsbara fel och varningar via egenskapenErrors. Kontextobjekten som skickas till båda metoderna ger praktiska mappningar från exporterade WSDL-element till egenskaper ContractDescription för och ServiceEndpoint objekt.

Om en IWsdlExportExtension implementering utlöser ett undantag vid export är de genererade metadata i ett inkonsekvent tillstånd och objektet WsdlExporter bör ignoreras.

Anmärkning

Det anpassade exporttillägget måste köras när den inbyggda serialiseraren fyller i tjänstbeskrivningen.

Metoder

Name Description
ExportContract(WsdlExporter, WsdlContractConversionContext)

Skriver anpassade WSDL-element (Web Services Description Language) till den genererade WSDL:n för ett kontrakt.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

Skriver anpassade WSDL-element (Web Services Description Language) till den genererade WSDL:n för en slutpunkt.

Gäller för