IWsdlExportExtension Interfejs

Definicja

Definiuje zachowania punktu końcowego lub kontraktu, które mogą eksportować niestandardowe metadane.

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

Przykłady

Poniższy przykład kodu przedstawia element IWsdlExportExtension , który dodaje niestandardowe atrybuty dokumentacji do pliku WSDL jako adnotacje 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);
                }
            }
        }
    }
}

Uwagi

Aby zmodyfikować i rozszerzyć język opisu usług sieci Web (WSDL) wyeksportowany przez WsdlExporter obiekty, zaimplementuj IWsdlExportExtension interfejs w punkcie końcowym, kontrakcie lub zachowaniu operacji (obiekt, który implementuje IContractBehavior, IEndpointBehaviorlub IOperationBehavior) i dodaj zachowanie do Behaviorswłaściwości , Behaviorslub Behaviors . Ponadto można również zaimplementować IWsdlExportExtension element w elemecie BindingElement.

Uwaga

IWsdlExportExtension implementacje nigdy nie są wywoływane, jeśli są implementowane jako IServiceBehavior.

IWsdlExportExtension nie eksportuje niestandardowych asercji zasad, mimo że program Windows Communication Foundation (WCF) eksportuje niestandardowe asercji zasad powiązania do odpowiedniego elementu w języku WSDL. Jeśli chcesz wyeksportować niestandardowe asercji zasad, zaimplementuj IPolicyExportExtension interfejs.

Proces publikacji metadanych rozpoczyna się od wywołania WsdlExporter.ExportEndpoints , które z kolei wywołuje WsdlExporter.ExportEndpoint każdy punkt końcowy.

Punkt końcowy jest eksportowany przez najpierw wyeksportowanie kontraktu. Podczas eksportowania kontraktu System.ServiceModel.Description.WsdlExporter metoda wywołuje IWsdlExportExtension.ExportContract metodę dla wszystkich IWsdlExportExtension implementacji kontraktu i zachowania operacji dla tego kontraktu. Operacje korzystające z akcji z symbolami wieloznacznymi nie są eksportowane w metadanych, więc IWsdlExportExtension implementacje dotyczące zachowań operacji dla tych operacji nie są eksportowane.

Po wyeksportowaniu kontraktu port i powiązanie są eksportowane i eksportowane wyrażenia zasad są dołączane.

Zarówno metody , ExportContract jak i ExportEndpoint zapewniają dostęp do elementu , dzięki IWsdlExportExtension czemu implementacje mogą zgłaszać błędy i ostrzeżenia możliwe do WsdlExporter odzyskania Errors za pośrednictwem właściwości . Obiekty kontekstu przekazywane do obu metod zapewniają wygodne mapowania z wyeksportowanych elementów WSDL do właściwości ContractDescription obiektów i ServiceEndpoint .

Jeśli implementacja IWsdlExportExtension zgłasza wyjątek podczas eksportowania, wygenerowane metadane są w stanie niespójnym i WsdlExporter obiekt powinien zostać odrzucony.

Uwaga

Rozszerzenie eksportu niestandardowego musi zostać uruchomione po wypełnieniu wbudowanego serializatora opisu usługi.

Metody

ExportContract(WsdlExporter, WsdlContractConversionContext)

Zapisuje niestandardowe elementy języka opisu usług sieci Web (WSDL) w wygenerowanym języku WSDL dla kontraktu.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

Zapisuje niestandardowe elementy języka opisu usług sieci Web (WSDL) w wygenerowanym języku WSDL dla punktu końcowego.

Dotyczy