IWsdlExportExtension Rozhraní

Definice

Definuje chování koncového bodu nebo kontraktu, které může exportovat vlastní metadata.

public interface class IWsdlExportExtension
public interface IWsdlExportExtension
type IWsdlExportExtension = interface
Public Interface IWsdlExportExtension
Odvozené

Příklady

Následující příklad kódu ukazuje IWsdlExportExtension , který přidá vlastní dokumentace atributy do souboru WSDL jako WSDL poznámky.

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

Poznámky

Chcete-li upravit a rozšířit jazyk WSDL (Web Services Description Language) exportovaný WsdlExporter objekty, implementujte IWsdlExportExtension rozhraní v koncovém bodu, kontraktu nebo chování operace (objekt, který implementuje , IEndpointBehaviorIContractBehaviornebo IOperationBehavior) a přidejte chování do Behaviorsvlastnosti , Behaviorsnebo Behaviors . Kromě toho můžete implementovat IWsdlExportExtension také v .BindingElement

Poznámka

IWsdlExportExtension implementace nejsou nikdy vyvolány, pokud jsou implementovány jako IServiceBehavior.

IWsdlExportExtension neexportuje kontrolní výrazy vlastních zásad, i když windows Communication Foundation (WCF) exportuje vlastní kontrolní výrazy zásad vazby do příslušného prvku uvnitř WSDL. Pokud chcete exportovat kontrolní výrazy vlastních zásad, implementujte IPolicyExportExtension rozhraní .

Proces publikování metadat začíná voláním WsdlExporter.ExportEndpoints , které následně volá WsdlExporter.ExportEndpoint každý koncový bod.

Koncový bod se exportuje tak, že nejprve exportuje jeho kontrakt. Při exportu kontraktu System.ServiceModel.Description.WsdlExporter volá metodu ve IWsdlExportExtension.ExportContract všech IWsdlExportExtension implementacích kontraktu a chování operací pro tento kontrakt. Operace, které používají akce se zástupným znakem, se neexportují v metadatech, takže IWsdlExportExtension se neexportují implementace chování operací pro tyto operace.

Po exportu kontraktu se port a vazba exportují a exportované výrazy zásad se připojí.

ExportContract Metody a ExportEndpoint poskytují přístup k objektu WsdlExporter tak, aby IWsdlExportExtension implementace mohly hlásit obnovitelné chyby a upozornění prostřednictvím Errors vlastnosti . Kontextové objekty předané do obou metod poskytují pohodlné mapování z exportovaných elementů WSDL na vlastnosti ContractDescription objektů a ServiceEndpoint .

IWsdlExportExtension Pokud implementace vyvolá výjimku při exportu, vygenerovaná metadata jsou v nekonzistentním stavu a WsdlExporter objekt by měl být zahozen.

Poznámka

Vlastní rozšíření exportu se musí spustit poté, co integrovaný serializátor naplní popis služby.

Metody

ExportContract(WsdlExporter, WsdlContractConversionContext)

Zapíše vlastní web services Description Language (WSDL) elementy do vygenerované WSDL pro kontrakt.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

Zapisuje vlastní prvky WSDL (Web Services Description Language) do vygenerovaného WSDL pro koncový bod.

Platí pro