Mengimpor Metadata Kustom untuk Ekstensi WCF
Dalam Windows Communication Foundation (WCF), impor metadata adalah proses menghasilkan representasi abstrak layanan atau bagian komponennya dari metadatanya. Misalnya, WCF dapat mengimpor instans ServiceEndpoint, instans Binding, atau instans ContractDescription dari dokumen WSDL untuk layanan. Untuk mengimpor metadata layanan di WCF, gunakan implementasi kelas abstrak System.ServiceModel.Description.MetadataImporter. Jenis yang berasal dari kelas MetadataImporter menerapkan dukungan untuk mengimpor format metadata yang memanfaatkan logika impor WS-Policy di WCF.
Metadata kustom terdiri dari elemen XML yang tidak dapat diimpor oleh pengimpor metadata yang disediakan sistem. Biasanya, ini termasuk ekstensi WSDL kustom dan pernyataan kebijakan kustom.
Bagian ini menjelaskan cara mengimpor ekstensi WSDL kustom dan pernyataan kebijakan. Ini tidak berfokus pada proses impor itu sendiri. Untuk informasi selengkapnya tentang cara menggunakan jenis yang mengekspor dan mengimpor metadata terlepas dari apakah metadata tersebut kustom atau didukung sistem, lihat Mengekspor dan Mengimpor Metadata.
Gambaran Umum
Jenis System.ServiceModel.Description.WsdlImporter adalah implementasi dari kelas abstrak MetadataImporter yang disertakan dengan WCF. Jenis WsdlImporter mengimpor metadata WSDL dengan kebijakan terlampir yang dibundel dalam objek System.ServiceModel.Description.MetadataSet. Pernyataan Azure Policy dan ekstensi WSDL yang tidak dikenali oleh importir default diteruskan ke kebijakan kustom terdaftar dan importir WSDL untuk diimpor. Biasanya, importir diimplementasikan untuk mendukung elemen pengikatan yang ditentukan pengguna atau untuk memodifikasi kontrak yang diimpor.
Bagian ini menjelaskan:
Cara mengimplementasikan dan menggunakan antarmuka System.ServiceModel.Description.IWsdlImportExtension, yang mengekspos data WSDL ke importir kustom sebelum pembuatan deskripsi dan pembuatan kode. Anda dapat menggunakan antarmuka ini untuk memeriksa atau memodifikasi jenis deskripsi dan kompilasi kode yang dilakukan menggunakan sekumpulan metadata tertentu.
Cara mengimplementasikan dan menggunakan antarmuka System.ServiceModel.Description.IPolicyImportExtension, yang memaparkan pernyataan kebijakan kepada importir sebelum pembuatan objek deskripsi. Anda dapat menggunakan antarmuka ini untuk memeriksa atau memodifikasi pengikatan atau kontrak berdasarkan kebijakan yang diunduh.
Untuk informasi selengkapnya tentang mengekspor WSDL kustom dan pernyataan kebijakan, lihat Mengekspor Metadata Kustom untuk Ekstensi WCF.
Mengimpor Ekstensi WSDL Kustom
Untuk menambahkan dukungan untuk mengimpor ekstensi WSDL, terapkan antarmuka IWsdlImportExtension lalu tambahkan implementasi Anda ke properti WsdlImportExtensions. WsdlImporter juga dapat memuat implementasi antarmuka IWsdlImportExtension yang terdaftar dalam file konfigurasi aplikasi Anda. Perhatikan bahwa sejumlah importir WSDL terdaftar secara default dan urutan importir WSDL terdaftar signifikan.
Ketika pengimpor WSDL kustom dimuat dan digunakan oleh WsdlImporter, pertama metode dipanggil BeforeImport untuk mengaktifkan modifikasi metadata sebelum proses impor. Selanjutnya, kontrak diimpor setelah metode dipanggil ImportContract untuk mengaktifkan modifikasi kontrak yang diimpor dari metadata. Terakhir, metode ImportEndpoint ini dipanggil untuk mengaktifkan modifikasi titik akhir yang diimpor.
Untuk informasi selengkapnya, lihat Cara: Mengimpor WSDL Kustom.
Mengimpor Pernyataan Azure Policy Kustom
Jenis WsdlImporter dan Alat Utilitas Metadata ServiceModel (Svcutil.exe) secara otomatis menangani pemrosesan berbagai jenis pernyataan kebijakan dalam ekspresi kebijakan yang melekat pada dokumen WSDL. Alat-alat ini mengumpulkan, menormalkan, dan menggabungkan ekspresi kebijakan yang melekat pada pengikatan WSDL dan port WSDL.
Untuk menambahkan dukungan untuk mengimpor pernyataan kebijakan kustom, terapkan antarmuka IPolicyImportExtension lalu tambahkan implementasi Anda ke properti PolicyImportExtensions. MetadataImporter juga dapat memuat implementasi antarmuka IPolicyImportExtension yang terdaftar dalam file konfigurasi aplikasi Anda. Perhatikan bahwa sejumlah importir kebijakan terdaftar secara default dan urutan importir kebijakan terdaftar signifikan.
Sistem metadata berulang kali memanggil metode IPolicyImportExtension.ImportPolicy pada semua ekstensi impor kebijakan terdaftar untuk setiap kombinasi alternatif kebijakan yang dilampirkan ke subjek kebijakan pesan, operasi, dan titik akhir. Saat mengimpor port WSDL, kebijakan yang dilampirkan ke port dan pengikatan WSDL yang sesuai digabungkan sebelum memanggil ekstensi impor kebijakan. Alternatif kebijakan disediakan melalui PolicyConversionContext sebagai objek PolicyAssertionCollection. Masing-masing PolicyAssertionCollection adalah kumpulan pernyataan kebijakan yang diwakili oleh objek XmlElement.
Properti Contract dan BindingElements pada objek PolicyConversionContext mengekspos objek ContractDescription dan BindingElement yang diimpor dari WSDL. Ekstensi impor Azure Policy memproses pernyataan kebijakan dengan menemukan instans jenis pernyataan kebijakan tertentu, membuat perubahan yang sesuai pada objek ContractDescription atau BindingElement lalu menghapus pernyataan kebijakan dari instans PolicyAssertionCollection yang sesuai.
Atribut wsp:Optional
dan ekspresi kebijakan berlapis tidak dinormalisasi, sehingga ekstensi impor kebijakan harus menangani konstruksi kebijakan ini. Selain itu, ekstensi impor kebijakan dapat dipanggil beberapa kali dengan objek ContractDescription dan BindingElement yang sama, sehingga ekstensi impor kebijakan harus kuat untuk perilaku ini.
Penting
Metadata yang tidak valid atau tidak tepat dapat diteruskan ke importir. Pastikan bahwa pengimpor kustom kuat untuk semua bentuk XML.