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

備註

若要修改並擴充 WsdlExporter 物件所匯出的 Web 服務描述語言 (WSDL),請在端點、合約或作業行為上實作 IWsdlExportExtension 介面 (實作 IContractBehaviorIEndpointBehaviorIOperationBehavior 的物件),並新增行為至 BehaviorsBehaviorsBehaviors 屬性。 此外,您也可以在 IWsdlExportExtension 上實作 BindingElement

注意

IWsdlExportExtension 如果實作實作為 IServiceBehavior,則永遠不會叫用實作。

IWsdlExportExtension 即使 Windows Communication Foundation (WCF) 將自定義系結原則判斷提示導出至 WSDL 內的適當元素,也不會匯出自定義原則判斷提示。 如果您要匯出自訂原則判斷提示,請實作 IPolicyExportExtension 介面。

中繼資料發行程序開始的方式是,呼叫 WsdlExporter.ExportEndpoints,它會依序呼叫每個端點的 WsdlExporter.ExportEndpoint

匯出端點時會首先匯出其合約。在匯出合約時,System.ServiceModel.Description.WsdlExporter 會在合約及其作業行為上,呼叫所有 IWsdlExportExtension.ExportContract 實作上的 IWsdlExportExtension 方法。 在中繼資料中,不會匯出使用萬用字元動作的作業,所以不會匯出這些作業其作業行為上的 IWsdlExportExtension 實作。

匯出合約後,會匯出連接埠和繫結,並附加匯出的原則運算式。

ExportContractExportEndpoint 方法都提供對 WsdlExporter 的存取,因此 IWsdlExportExtension 實作可透過 Errors 屬性報告可修復的錯誤和警告。 傳入這兩種方法的內容物件會提供從匯出的 WSDL 項目到 ContractDescriptionServiceEndpoint 物件屬性之間的方便對應。

如果 IWsdlExportExtension 實作在匯出時擲回例外狀況,則產生的中繼資料會是不一致的狀態,且應捨棄 WsdlExporter 物件。

注意

自訂匯出擴充必須在內建序列化程式填入服務描述後執行。

方法

ExportContract(WsdlExporter, WsdlContractConversionContext)

將自訂的 Web 服務描述語言 (WSDL) 項目寫入為合約產生的 WSDL。

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

將自訂的 Web 服務描述語言 (WSDL) 項目寫入為端點產生的 WSDL。

適用於