Поделиться через


IWsdlExportExtension Интерфейс

Определение

Определяет поведение конечной точки или контракта, которое может экспортировать настраиваемые метаданные.

public interface class IWsdlExportExtension
public interface IWsdlExportExtension
type IWsdlExportExtension = interface
Public Interface IWsdlExportExtension
Производный

Примеры

В следующем примере кода показан объект IWsdlExportExtension, которые добавляет настраиваемые атрибуты документации в файл WSDL как аннотации 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);
                }
            }
        }
    }
}

Комментарии

Чтобы изменить и расширить язык WSDL, экспортированный объектами WsdlExporter, реализуйте интерфейс IWsdlExportExtension в поведении конечной точки, контракта или операции (объект, реализующий IContractBehavior, IEndpointBehavior или IOperationBehavior) и добавьте поведение к свойству Behaviors, Behaviors или Behaviors. Кроме того, также можно реализовать IWsdlExportExtension в BindingElement.

Примечание

IWsdlExportExtension реализации никогда не вызываются, если они реализуются как IServiceBehavior.

IWsdlExportExtension не экспортирует утверждения настраиваемой политики, даже если Windows Communication Foundation (WCF) экспортирует утверждения настраиваемой политики привязки в соответствующий элемент внутри WSDL. При необходимости экспортировать утверждения настраиваемой политики реализуйте интерфейс IPolicyExportExtension.

Процесс публикации метаданных начинается путем вызова метода WsdlExporter.ExportEndpoints, который, в свою очередь, вызывает WsdlExporter.ExportEndpoint для каждой конечной точки.

Конечная точка экспортируется путем первоначального экспорта ее контракта. При экспорте контракта System.ServiceModel.Description.WsdlExporter вызывает метод IWsdlExportExtension.ExportContract во всех реализациях IWsdlExportExtension в контракте и поведении операции для этого контракта. Операции, использующие подстановочные действия, не экспортируются в метаданные, так что реализации IWsdlExportExtension в поведении операции для этих операций не экспортируются.

После экспорта контракта экспортируются порт и привязка, а экспортированные выражения политики прикрепляются.

Методы ExportContract и ExportEndpoint обеспечивают доступ к WsdlExporter, так что реализации IWsdlExportExtension могут отчитываться об устранимых ошибках и предупреждениях посредством свойства Errors. Объекты контекста, переданные в оба метода, предоставляют удобные сопоставления из экспортированных элементов WSDL для свойств объектов ContractDescription и ServiceEndpoint.

Если в реализации IWsdlExportExtension возникает исключение при экспорте, созданные метаданные находятся в несогласованном состоянии, а объект WsdlExporter должен быть удален.

Примечание

Пользовательское расширение экспорта должен запускаться после того, как встроенный сериализатор заполнит описание службы.

Методы

ExportContract(WsdlExporter, WsdlContractConversionContext)

Записывает пользовательские элементы языка описания служб (WSDL) в созданный WSDL для контракта.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

Записывает пользовательские элементы WSDL в созданный код WSDL для конечной точки.

Применяется к