Bagikan melalui


IWsdlExportExtension Antarmuka

Definisi

Menentukan titik akhir atau perilaku kontrak yang dapat mengekspor metadata kustom.

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

Contoh

Contoh kode berikut menunjukkan IWsdlExportExtension yang menambahkan atribut dokumentasi kustom ke file WSDL sebagai anotasi 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);
                }
            }
        }
    }
}

Keterangan

Untuk memodifikasi dan memperluas Web Services Description Language (WSDL) yang diekspor oleh WsdlExporter objek, terapkan IWsdlExportExtension antarmuka pada titik akhir, kontrak, atau perilaku operasi (objek yang mengimplementasikan IContractBehavior, , IEndpointBehavioratau IOperationBehavior) dan menambahkan perilaku ke Behaviorsproperti , , Behaviorsatau Behaviors . Selain itu, Anda juga dapat menerapkan IWsdlExportExtension pada BindingElement.

Catatan

IWsdlExportExtension implementasi tidak pernah dipanggil jika diimplementasikan sebagai IServiceBehavior.

IWsdlExportExtension tidak mengekspor pernyataan kebijakan kustom meskipun Windows Communication Foundation (WCF) mengekspor pernyataan kebijakan pengikatan kustom ke elemen yang sesuai di dalam WSDL. Jika Anda ingin mengekspor pernyataan kebijakan kustom, terapkan IPolicyExportExtension antarmuka .

Proses publikasi metadata dimulai dengan memanggil WsdlExporter.ExportEndpoints yang pada gilirannya memanggil WsdlExporter.ExportEndpoint untuk setiap titik akhir.

Titik akhir diekspor dengan terlebih dahulu mengekspor kontraknya. Saat mengekspor kontrak System.ServiceModel.Description.WsdlExporter , memanggil IWsdlExportExtension.ExportContract metode pada semua IWsdlExportExtension implementasi pada kontrak, dan perilaku operasi untuk kontrak tersebut. Operasi yang menggunakan tindakan kartubebas tidak diekspor dalam metadata, sehingga IWsdlExportExtension implementasi pada perilaku operasi untuk operasi ini tidak diekspor.

Setelah mengekspor kontrak, port dan pengikatan diekspor dan ekspresi kebijakan yang diekspor dilampirkan.

ExportContract Baik metode dan ExportEndpoint menyediakan akses ke WsdlExporter sehingga IWsdlExportExtension implementasi dapat melaporkan kesalahan dan peringatan yang dapat dipulihkan Errors melalui properti . Objek konteks yang diteruskan ke kedua metode memberikan pemetaan yang nyaman dari elemen WSDL yang diekspor ke properti ContractDescription objek dan ServiceEndpoint .

IWsdlExportExtension Jika implementasi memberikan pengecualian pada ekspor, metadata yang dihasilkan dalam keadaan tidak konsisten dan WsdlExporter objek harus dibuang.

Catatan

Ekstensi ekspor kustom harus berjalan setelah serializer bawaan mengisi deskripsi layanan.

Metode

ExportContract(WsdlExporter, WsdlContractConversionContext)

Menulis elemen Web Services Description Language (WSDL) kustom ke dalam WSDL yang dihasilkan untuk kontrak.

ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)

Menulis elemen Web Services Description Language (WSDL) kustom ke dalam WSDL yang dihasilkan untuk titik akhir.

Berlaku untuk