다음을 통해 공유


IWsdlExportExtension 인터페이스

정의

사용자 지정 메타데이터를 내보낼 수 있는 엔드포인트 또는 계약 동작을 정의합니다.

public interface class IWsdlExportExtension
public interface IWsdlExportExtension
type IWsdlExportExtension = interface
Public Interface IWsdlExportExtension
파생

예제

다음 코드 예제에서는 WSDL 파일에 사용자 지정 설명서 특성을 WSDL 주석으로 추가하는 를 보여 IWsdlExportExtension 줍니다.

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

설명

개체에서 내보낸 WsdlExporter WSDL(Web Services Description Language)을 수정하고 확장하려면 엔드포인트, 계약 또는 작업 동작(, IEndpointBehavior또는 IOperationBehavior를 구현하는 개체)에서 인터페이스를 구현 IContractBehaviorIWsdlExportExtension 하고 , Behaviors또는 Behaviors 속성에 동작을 Behaviors추가합니다. 또한 에서 BindingElement를 구현 IWsdlExportExtension 할 수도 있습니다.

참고

IWsdlExportExtension 구현은 로 IServiceBehavior구현된 경우 호출되지 않습니다.

IWsdlExportExtension 는 WCF(Windows Communication Foundation)가 사용자 지정 바인딩 정책 어설션을 WSDL 내의 적절한 요소로 내보내더라도 사용자 지정 정책 어설션을 내보내지 않습니다. 사용자 지정 정책 어설션을 내보내려면 인터페이스를 구현합니다 IPolicyExportExtension .

메타데이터 게시 프로세스는 를 호출 WsdlExporter.ExportEndpoints 하여 시작하여 각 엔드포인트에 대해 를 호출 WsdlExporter.ExportEndpoint 합니다.

엔드포인트는 먼저 계약을 내보내서 내보냅니다. 계약을 내보낼 때 는 System.ServiceModel.Description.WsdlExporter 계약의 모든 IWsdlExportExtension 구현 및 해당 계약의 작업 동작에 대해 메서드를 호출 IWsdlExportExtension.ExportContract 합니다. 와일드카드 작업을 사용하는 작업은 메타데이터에서 내보내지지 않으므로 IWsdlExportExtension 이러한 작업에 대한 작업 동작에 대한 구현은 내보내지지 않습니다.

계약을 내보낸 후 포트 및 바인딩이 내보내지고 내보낸 정책 식이 연결됩니다.

ExportContractExportEndpoint 메서드는 모두 에 대한 액세스를 WsdlExporter 제공하므로 구현에서 IWsdlExportExtension 속성을 통해 Errors 복구 가능한 오류 및 경고를 보고할 수 있습니다. 두 메서드에 전달된 컨텍스트 개체는 내보낸 WSDL 요소에서 및 ServiceEndpoint 개체의 ContractDescription 속성으로 편리한 매핑을 제공합니다.

구현이 IWsdlExportExtension 내보내기 시 예외를 throw하는 경우 생성된 메타데이터가 일관되지 않은 상태이며 개체를 WsdlExporter 삭제해야 합니다.

참고

기본 제공 serializer가 서비스 설명을 채웁니다.

메서드

ExportContract(WsdlExporter, WsdlContractConversionContext)

계약에 대해 생성된 WSDL(웹 서비스 설명 언어)에 사용자 지정 WSDL 요소를 씁니다.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

엔드포인트에 대해 생성된 WSDL(웹 서비스 설명 언어)에 사용자 지정 WSDL 요소를 씁니다.

적용 대상