ServiceModel Metadata Utility Tool (Svcutil.exe)

Alat Utilitas Metadata ServiceModel digunakan untuk menghasilkan kode model layanan dari dokumen metadata, dan dokumen metadata dari kode model layanan.

SvcUtil.exe

Alat Utilitas Metadata ServiceModel dapat ditemukan di lokasi penginstalan SDK Windows, khususnya %ProgramFiles%\Microsoft SDKs\Windows\v6.0\Bin.

Fungsionalitas

Tabel berikut ini merangkum berbagai fungsionalitas yang disediakan oleh alat ini, dan topik yang sesuai yang membahas cara penggunaannya:

Tugas Topik
Hasilkan kode dari layanan yang berjalan atau dokumen metadata statik. Menghasilkan Klien WCF dari Metadata Layanan
Ekspor dokumen metadata dari kode yang dikompilasi. Cara: Menggunakan Svcutil.exe untuk Mengekspor Metadata dari Kode Layanan yang Dikompilasi
Validasi kode layanan yang dikompilasi. Cara: Menggunakan Svcutil.exe untuk Memvalidasi Kode Layanan yang Dikompilasi
Unduh dokumen metadata dari layanan yang sedang berjalan. Cara: Menggunakan Svcutil.exe untuk Mengunduh Dokumen Metadata
Buat kode serialisasi. Cara: Meningkatkan Waktu Startup dari Aplikasi Klien WCF menggunakan XmlSerializer

Perhatian

Svcutil akan menimpa file yang ada pada disk jika nama yang disediakan sebagai parameter adalah identik. Hal ini dapat mencakup file kode, konfigurasi, atau file metadata. Untuk menghindari terjadinya hal ini pada saat membuat kode dan file konfigurasi, gunakan sakelar /mergeConfig.

Selain itu, sakelar /r dan /ct untuk jenis referensi adalah untuk menghasilkan kontrak data. Sakelar ini tidak berfungsi saat menggunakan XmlSerializer.

Waktu habis

Batas waktu yang dimiliki alat ini saat mengambil metadata adalah lima menit. Batas waktu ini hanya berlaku untuk mengambil metadata melalui jaringan. Batas waktu ini tidak berlaku pada pemrosesan metadata tersebut.

Multi-penargetan

Alat ini tidak mendukung multi-penargetan. Jika Anda ingin menghasilkan artefak .NET Framework 4 dari svcutil.exe, gunakan svcutil.exe dari SDK .NET Framework 4. Untuk menghasilkan artefak .NET Framework 3.5, gunakan yang dapat dijalankan dari SDK .NET Framework 3.5.

Mengakses Dokumen WSDL

Saat Anda menggunakan Svcutil untuk mengakses dokumen WSDL yang memiliki referensi ke layanan token keamanan (STS), Svcutil melakukan panggilan WS-MetadataExchange ke STS. Namun, layanan ini dapat mengekspos dokumen WSDL menggunakan WS-MetadataExchange atau HTTP GET. Oleh karena itu, jika STS hanya mengekspos dokumen WSDL menggunakan HTTP GET, klien yang ditulis di WinFX akan gagal. Untuk klien yang ditulis dalam .NET Framework 3.5, Svcutil berupaya menggunakan WS-MetadataExchange dan HTTP GET untuk mendapatkan STS WSDL.

Menggunakan SvcUtil.exe

Penggunaan Umum

Tabel berikut ini menunjukkan beberapa opsi yang umum digunakan untuk alat ini:

Opsi Deskripsi
/directory:<directory> Direktori tempat membuat file.

Default: Direktori saat ini.

Formulir pendek: /d
/help Menampilkan sintaks perintah dan opsi untuk alat.

Formulir pendek: /?
/noLogo Sembunyikan hak cipta dan pesan spanduk.
/svcutilConfig:<configFile> Tentukan file konfigurasi kustom yang akan digunakan sebagai pengganti file App.config. Hal ini dapat digunakan untuk mendaftarkan ekstensi system.serviceModel tanpa mengubah file konfigurasi alat tersebut.
/target:<jenis output> Tentukan output yang akan dihasilkan oleh alat.

Nilai yang valid adalah kode, metadata, atau xmlSerializer.

Formulir pendek: /t

Pembuatan Kode

Svcutil.exe dapat menghasilkan kode untuk kontrak layanan, klien, dan jenis data dari dokumen metadata. Dokumen metadata ini dapat berada pada penyimpanan yang tahan lama, atau diambil secara online. Pengambilan online mengikuti salah satu dari protokol WS-MetadataExchange ataupun protokol DISCO (untuk detailnya lihat bagian Unduhan Metadata).

Anda dapat menggunakan alat SvcUtil.exe untuk menghasilkan layanan dan kontrak data berdasarkan pada dokumen WSDL yang telah ditentukan sebelumnya. Gunakan sakelar /serviceContract dan tentukan URL atau lokasi file tempat dokumen WSDL dapat diunduh atau ditemukan. Hal ini menghasilkan layanan dan kontrak data yang ditentukan dalam dokumen WSDL yang kemudian dapat digunakan untuk menerapkan layanan pengaduan. Untuk informasi selengkapnya, lihat Cara: Mengambil Metadata dan Menerapkan Layanan yang Sesuai.

Untuk layanan dengan titik akhir BasicHttpContextBinding, Svcutil.exe menghasilkan BasicHttpBinding dengan atribut allowCookies yang diatur ke true sebagai gantinya. Cookie digunakan untuk konteks pada server. Jika Anda ingin mengelola konteks pada klien saat layanan menggunakan cookie, Anda dapat memodifikasi konfigurasi secara manual untuk menggunakan pengikatan konteks.

Perhatian

Svcutil.exe menghasilkan klien berdasarkan pada WSDL atau file kebijakan yang diterima dari layanan. Nama prinsipal pengguna (UPN) dihasilkan dengan menggabungkan nama pengguna, "@" dan nama domain yang sepenuhnya memenuhi syarat (FQDN). Namun, bagi pengguna yang terdaftar pada Active Directory Domain Service, format ini tidak valid dan UPN yang dihasilkan oleh alat menyebabkan kegagalan dalam autentikasi Kerberos dengan pesan kesalahan "Upaya masuk gagal". Untuk mengatasi masalah ini, Anda harus memperbaiki file klien yang dihasilkan oleh alat ini secara manual.

svcutil.exe [/t:code] <metadataDocumentPath>* | <url>* | <epr>

Argumen Deskripsi
epr Jalur ke file XML yang berisi WS-Addressing EndpointReference untuk titik akhir layanan yang mendukung WS-MetadataExchange. Untuk informasi selengkapnya, lihat bagian Unduhan Metadata.
metadataDocumentPath Jalur ke dokumen metadata (wsdl atau xsd) yang berisi kontrak untuk mengimpor ke dalam kode (.wsdl, .xsd, .wspolicy, atau .wsmex).

Svcutil mengikuti impor termasuk saat Anda menentukan URL jarak jauh untuk metadata. Namun, jika Anda ingin memproses file metadata pada sistem file lokal, Anda harus menentukan semua file dalam argumen ini. Dengan cara ini, Anda dapat menggunakan Svcutil dalam lingkungan bangunan tempat Anda tidak dapat memiliki ketergantungan jaringan. Anda dapat menggunakan wildcard (*.xsd, *.wsdl) untuk argumen ini.
url URL ke titik akhir layanan yang menyediakan metadata atau ke dokumen metadata yang di-hosting secara online. Untuk informasi selengkapnya tentang cara dokumen ini diambil, lihat bagian Unduhan Metadata.
Opsi Deskripsi
/async Menghasilkan tanda tangan metode sinkron dan asinkron.

Default: hanya menghasilkan tanda tangan metode sinkron.

Formulir Singkat: /a
/collectionType:<type> Menentukan jenis koleksi daftar untuk klien WCF.

Default: jenis koleksi adalah System.Array.

Formulir Singkat: /ct
/config:<configFile> Menentukan nama file untuk file konfigurasi yang dihasilkan.

Default: output.config
/dataContractOnly Buat kode hanya untuk jenis kontrak data. Jenis Kontrak Layanan tidak dihasilkan.

Anda hanya akan menentukan file metadata lokal untuk opsi ini.

Formulir Singkat: /dconly
/enableDataBinding Menerapkan antarmuka INotifyPropertyChanged pada semua jenis Kontrak Data untuk mengaktifkan pengikatan data.

Formulir Singkat: /edb
/excludeType:<type> Menentukan nama jenis yang memenuhi syarat sepenuhnya atau memenuhi syarat perakitan yang tidak akan disertakan dalam jenis kontrak yang direferensikan.

Saat menggunakan sakelar bersama dengan /r dari DLL terpisah, nama lengkap direferensikan dari kelas XSD.

Formulir Singkat: /et
/importXmlTypes Mengonfigurasi pembuat serialisasi Kontrak Data untuk mengimpor jenis Kontrak non-Data sebagai jenis IXmlSerializable.
/internal Menghasilkan kelas yang ditandai sebagai internal. Default: hanya menghasilkan kelas publik.

Formulir Singkat: /i
/language:<language> Menentukan bahasa pemrograman yang akan digunakan untuk pembuatan kode. Anda harus menyediakan nama bahasa pemrogram yang terdaftar dalam file Machine.config, atau nama kelas yang sepenuhnya memenuhi syarat yang diwarisi dari CodeDomProvider.

Nilai: c#, cs, csharp, vb, visualbasic, c++, cpp

Default: csharp

Formulir pendek: /l
/mergeConfig Menyebabkan konfigurasi yang dihasilkan digabungkan menjadi file yang ada alih-alih menimpa file yang ada.
/messageContract Menghasilkan jenis Kontrak Pesan.

Formulir Singkat: /mc
/namespace:<string,string> Menentukan pemetaan dari targetNamespace skema WSDL atau XML ke namespace layanan runtime bahasa umum. Menggunakan '*' targetNamespace akan memetakan semua targetNamespace tanpa pemetaan eksplisit untuk namespace layanan runtime bahasa umum tersebut.

Untuk memastikan bahwa nama kontrak pesan tidak berbenturan dengan nama operasi, Anda harus memenuhi syarat referensi jenis dengan ::, atau memastikan nama tersebut unik.

Default: Berasal dari namespace layanan target dari dokumen skema untuk Kontrak Data. Namespace layanan default digunakan untuk semua jenis lain yang dihasilkan.

Formulir Singkat: /nCatatan: Saat menghasilkan jenis untuk digunakan dengan XmlSerializer, yang didukung hanyalah pemetaan namespace layanan tunggal. Semua jenis yang dihasilkan akan berada di namespace layanan default atau namespace layanan yang ditentukan oleh '*'.
/noConfig Jangan buat file konfigurasi.
/noStdLib Jangan mereferensikan pustaka standar.

Default: Mscorlib.dll dan System.servicemodel.dll direferensikan.
/out:<file> Menentukan nama file untuk kode yang dihasilkan.

Default: Berasal dari nama definisi WSDL, nama layanan WSDL, atau dari namespace layanan target salah satu skema.

Formulir pendek: /o
/reference:<jalur file> Jenis referensi dalam rakitan yang telah ditentukan. Saat menghasilkan klien, gunakan opsi ini untuk menentukan rakitan yang mungkin berisi jenis yang mewakili metadata yang sedang diimpor.

Anda tidak dapat menentukan kontrak dan jenis XmlSerializer pesan menggunakan sakelar ini.

Jika DateTimeOffset direferensikan, jenis ini akan lebih digunakan daripada membuat jenis baru. Jika aplikasi ditulis menggunakan .NET Framework 3.5, SvcUtil.exe akan mereferensikanDateTimeOffset secara otomatis.

Formulir Singkat: /r
/serializable Buat kelas yang ditandai dengan Atribut yang Dapat Diserialisasi.

Formulir Singkat: /s
/serviceContract Hasilkan kode hanya untuk kontrak layanan. Kelas dan konfigurasi klien tidak akan dihasilkan

Formulir Singkat: /sc
/serializer:Auto Pilih pembuat serialisasi secara otomatis. Langkah tersebut mencoba menggunakan pembuat serialisasi Kontrak Data dan menggunakan XmlSerializer jika gagal.

Formulir Singkat: /ser
/serializer:DataContractSerializer Menghasilkan jenis data yang menggunakan Pembuat Serialisasi Kontrak Data untuk serialisasi dan deserialisasi.

Formulir Singkat: /ser:DataContractSerializer
/serializer:XmlSerializer Membuat jenis data yang menggunakan XmlSerializer untuk serialisasi dan deserialisasi.

Formulir Singkat: /ser:XmlSerializer
/targetClientVersion Tentukan versi mana dari .NET Framework yang akan menjadi target aplikasi. Nilai yang berlaku adalah Version30 atau Version35. Nilai defaultnya adalah Version30.

Formulir Singkat: /tcv

Version30: Gunakan /tcv:Version30 jika Anda membuat kode untuk klien yang menggunakan WinFX.

Version35: Gunakan /tcv:Version35 jika Anda membuat kode untuk klien yang menggunakan .NET Framework 3.5. Ketika menggunakan /tcv:Version35 dengan sakelar /async, akan dihasilkan metode asinkron yang berbasis peristiwa dan yang berbasis panggilan balik/delegasi. Selain itu, dukungan untuk Himpunan Data LINQ-diaktifkan dan DateTimeOffset diaktifkan.
/wrapped Mengontrol apakah casing khusus digunakan untuk dokumen bergaya harfiah dengan parameter terbungkus. Gunakan sakelar /wrapped dengan Alat Utilitas Metadata Model Layanan (Svcutil.exe) alat untuk menentukan casing normal.

Catatan

Ketika pengikatan layanan adalah salah satu dari pengikatan yang disediakan sistem (lihat Pengikatan yang Disediakan Sistem), dan properti ProtectionLevel diatur ke None atau Sign, Svcutil membuat file konfigurasi menggunakan elemen <customBinding> bukan elemen yang diharapkan akan disediakan sistem. Misalnya, jika layanan menggunakan elemen <wsHttpBinding> dengan ProtectionLevel diatur ke Sign, konfigurasi yang dihasilkan memiliki <customBinding> pada bagian pengikatan alih-alih <wsHttpBinding>. Untuk informasi selengkapnya tentang tingkat perlindungan, lihat Memahami Tingkat Perlindungan.

Ekspor Metadata

Svcutil.exe dapat mengekspor metadata untuk layanan, kontrak, dan jenis data dalam rakitan yang dikompilasi. Untuk mengekspor metadata bagi suatu layanan, Anda harus menggunakan opsi /serviceName untuk menentukan layanan yang ingin Anda ekspor. Untuk mengekspor semua jenis kontrak data dalam rakitan, Anda harus menggunakan opsi /dataContractOnly. Secara default, metadata diekspor untuk semua kontrak layanan dalam rakitan input.

svcutil.exe [/t:metadata] [/serviceName:<serviceConfigName>] [/dataContractOnly] <assemblyPath>*

Argumen Deskripsi
assemblyPath Menentukan jalur ke rakitan yang berisi layanan, kontrak, atau jenis kontrak data yang akan diekspor. Wildcard baris perintah standar dapat digunakan untuk menyediakan beberapa file sebagai input.
Opsi Deskripsi
/serviceName:<serviceConfigName> Menentukan nama konfigurasi layanan yang akan diekspor. Jika opsi ini digunakan, rakitan yang dapat dieksekusi dengan file konfigurasi terkait harus diteruskan sebagai input. Svcutil.exe mencari semua file konfigurasi terkait untuk konfigurasi layanan. Jika file konfigurasi berisi jenis ekstensi apa pun, rakitan yang berisi jenis ini harus berada di GAC atau disediakan secara eksplisit menggunakan opsi /reference.
/reference:<jalur file> Menambahkan rakitan yang telah ditentukan untuk set rakitan yang digunakan untuk menyelesaikan referensi jenis. Jika Anda mengekspor atau memvalidasi layanan yang menggunakan ekstensi pihak ke-3 (Perilaku, Pengikatan, dan BindingElements) yang terdaftar dalam konfigurasi, gunakan opsi ini untuk menemukan rakitan ekstensi yang tidak ada di dalam GAC.

Formulir Singkat: /r
/dataContractOnly Hanya beroperasi pada jenis kontrak data. Kontrak Layanan tidak dapat diproses.

Anda hanya akan menentukan file metadata lokal untuk opsi ini.

Formulir Singkat: /dconly
/excludeType:<type> Menentukan nama dari jenis yang memenuhi syarat sepenuhnya atau memenuhi syarat rakitan yang tidak akan disertakan dalam ekspor. Opsi ini dapat digunakan saat mengekspor metadata untuk layanan, atau mengatur kontrak layanan untuk mengecualikan jenis agar tidak diekspor. Opsi ini tidak dapat digunakan bersama dengan opsi /dconly.

Ketika Anda memiliki rakitan tunggal berisikan beberapa layanan, dan masing-masing menggunakan kelas terpisah dengan nama XSD yang sama, Anda harus menentukan nama layanan sebagai ganti nama kelas XSD untuk peralihan ini.

XSD atau jenis kontrak data tidak didukung.

Formulir Singkat: /et

Validasi Layanan

Validasi dapat digunakan untuk mendeteksi kesalahan dalam implementasi layanan tanpa hosting layanan. Anda harus menggunakan opsi /serviceName untuk menunjukkan layanan yang ingin Anda validasi.

svcutil.exe /validate /serviceName:<serviceConfigName> <assemblyPath>*

Argumen Deskripsi
assemblyPath Menentukan jalur untuk rakitan yang berisi jenis layanan yang akan divalidasi. Rakitan harus memiliki file konfigurasi terkait untuk menyediakan konfigurasi layanan. Wildcard baris perintah standar dapat digunakan untuk menyediakan beberapa rakitan.
Opsi Deskripsi
/validate Validasi implementasi layanan yang ditentukan oleh opsi /serviceName. Jika opsi ini digunakan, rakitan yang dapat dieksekusi dengan file konfigurasi terkait harus diteruskan sebagai input.

Formulir Singkat: /v
/serviceName:<serviceConfigName> Menentukan nama konfigurasi layanan yang akan divalidasi. Svcutil.exe mencari semua file konfigurasi terkait dari semua rakitan input untuk konfigurasi layanan. Jika file konfigurasi berisi sesuatu jenis ekstensi nama file, rakitan yang berisi jenis ini harus berada di GAC atau disediakan secara eksplisit menggunakan opsi /reference.
/reference:<jalur file> Menambahkan rakitan yang telah ditentukan untuk set rakitan yang digunakan untuk menyelesaikan referensi jenis. Jika Anda mengekspor atau memvalidasi layanan yang menggunakan ekstensi pihak ke-3 (Perilaku, Pengikatan, dan BindingElements) yang terdaftar dalam konfigurasi, gunakan opsi ini untuk menemukan rakitan ekstensi yang tidak ada di dalam GAC.

Formulir Singkat: /r
/dataContractOnly Hanya beroperasi pada jenis kontrak data. Kontrak Layanan tidak dapat diproses.

Anda hanya akan menentukan file metadata lokal untuk opsi ini.

Formulir Singkat: /dconly
/excludeType:<type> Menentukan nama dari jenis yang memenuhi syarat sepenuhnya atau memenuhi syarat rakitan yang tidak akan disertakan dalam validasi.

Formulir Singkat: /et

Unduhan Metadata

Svcutil.exe dapat digunakan untuk mengunduh metadata dari layanan yang sedang berjalan, dan menyimpan metadata ke file lokal. Untuk mengunduh metadata, Anda harus menentukan opsi /t:metadata. Jika tidak, kode klien akan dihasilkan. Untuk skema URL HTTP dan HTTPS, Svcutil.exe mencoba mengambil metadata menggunakan WS-MetadataExchange dan DISCO. Untuk semua skema URL lainnya, Svcutil.exe hanya menggunakan WS-MetadataExchange.

Svcutil mengeluarkan permintaan metadata berikut secara serentak untuk mengambil metadata.

  • Permintaan MEX (WS-Transfer) ke alamat yang telah disediakan

  • Permintaan MEX ke alamat yang telah disediakan dengan /mex yang ditambahkan

  • Permintaan DISCO (menggunakan DiscoveryClientProtocol dari ASMX) ke alamat yang telah disediakan.

Secara default, Svcutil.exe menggunakan pengikatan yang ditentukan dalam kelas MetadataExchangeBindings untuk membuat permintaan MEX. Untuk mengonfigurasi pengikatan yang digunakan untuk WS-MetadataExchange, Anda harus menentukan titik akhir klien dalam konfigurasi yang menggunakan kontrak IMetadataExchange. Hal ini dapat ditentukan baik dalam file konfigurasi Svcutil.exe, atau dalam file konfigurasi lainnya yang ditentukan menggunakan opsi /svcutilConfig.

svcutil.exe /t:metadata <url>* | <epr>

Argumen Deskripsi
url URL ke titik akhir layanan yang menyediakan metadata atau ke dokumen metadata yang di-hosting secara online.
epr Jalur ke file XML yang berisi WS-Addressing EndpointReference untuk titik akhir layanan yang mendukung WS-MetadataExchange.

XmlSerializer Type Generation

Aplikasi layanan dan klien yang menggunakan jenis data yang dapat diserialisasikan menggunakan XmlSerializer membuat dan mengompilasi kode serialisasi untuk jenis data tersebut pada durasi, yang dapat menghasilkan performa start-up yang lambat.

Catatan

Kode serialisasi yang dibuat sebelumnya hanya dapat digunakan dalam aplikasi klien dan tidak dapat digunakan dalam layanan.

Svcutil.exe dapat menghasilkan kode serialisasi C# yang diperlukan dari rakitan yang dikompilasi untuk aplikasi, sehingga meningkatkan performa start-up untuk aplikasi ini. Untuk informasi selengkapnya, lihat Cara: Meningkatkan Waktu Startup dari Aplikasi Klien WCF yang menggunakan XmlSerializer.

Catatan

Svcutil.exe hanya menghasilkan kode untuk jenis yang digunakan oleh Kontrak Layanan yang ditemukan dalam rakitan input.

svcutil.exe /t:xmlSerializer <assemblyPath>*

Argumen Deskripsi
assemblyPath Menentukan jalur untuk rakitan yang berisi jenis kontrak layanan. Jenis serialisasi dihasilkan untuk semua jenis Xml yang dapat diseriialisasikan dalam setiap kontrak.
Opsi Deskripsi
/reference:<jalur file> Menambahkan rakitan yang telah ditentukan untuk set rakitan yang digunakan untuk menyelesaikan referensi jenis.

Formulir Singkat: /r
/excludeType:<type> Menentukan nama dari jenis yang memenuhi syarat sepenuhnya atau memenuhi syarat rakitan yang tidak akan disertakan dalam ekspor atau validasi.

Formulir Singkat: /et
/out:<file> Menentukan nama file untuk kode yang dihasilkan. Opsi ini diabaikan ketika beberapa rakitan diteruskan sebagai input ke alat.

Default: Berasal dari nama rakitan.

Formulir Singkat: /o
/UseSerializerForFaults Menentukan bahwa XmlSerializer harus digunakan untuk membaca dan menulis kesalahan, sebagai ganti DataContractSerializer default.

Contoh

Perintah berikut menghasilkan kode klien dari layanan yang sedang berjalan atau dokumen metadata online.

svcutil http://service/metadataEndpoint

Perintah berikut menghasilkan kode klien dari dokumen metadata lokal.

svcutil *.wsdl *.xsd /language:C#

Perintah berikut menghasilkan jenis kontrak data dalam Visual Basic dari dokumen skema lokal.

svcutil /dconly *.xsd /language:VB

Perintah berikut mengunduh dokumen metadata dari layanan yang sedang berjalan.

svcutil /t:metadata http://service/metadataEndpoint

Perintah berikut menghasilkan dokumen metadata untuk kontrak layanan dan jenis terkait dalam rakitan.

svcutil myAssembly.dll

Perintah berikut menghasilkan dokumen metadata untuk layanan, dan semua kontrak layanan dan jenis data terkait dalam rakitan.

svcutil myServiceHost.exe /serviceName:myServiceName

Perintah berikut menghasilkan dokumen metadata untuk jenis data dalam rakitan.

svcutil myServiceHost.exe /dconly

Perintah berikut memverifikasi hosting layanan.

svcutil /validate /serviceName:myServiceName myServiceHost.exe

Perintah berikut menghasilkan jenis serialisasi untuk jenis XmlSerializer yang digunakan oleh suatu kontrak layanan dalam rakitan.

svcutil /t:xmlserializer myContractLibrary.exe

Kuota Jumlah Karakter Nametable Maksimum

Ketika menggunakan svcutil untuk menghasilkan metadata untuk layanan, Anda mungkin mendapat pesan berikut:

Kesalahan: Tidak mendapatkan Metadata dari Kuota jumlah nametable http://localhost:8000/somesservice/mex maksimum (16384) telah dilampaui selagi membaca data XML. Nametable adalah struktur data yang digunakan untuk menyimpan string yang ditemui selama pemrosesan XML - dokumen XML panjang dengan nama elemen yang tidak berulang, nama atribut, dan nilai atribut yang memicu kuota ini. Kuota ini dapat ditingkatkan dengan mengubah properti MaxNameTableCharCount pada objek XmlDictionaryReaderQuotas yang digunakan saat membuat pembaca XML.

Kesalahan ini dapat disebabkan oleh layanan yang mengembalikan file WSDL yang besar ketika Anda meminta metadatanya. Masalahnya adalah bahwa kuota karakter untuk alat svcutil.exe telah dilampaui. Nilai ini diatur untuk membantu mencegah penolakan serangan layanan (dos). Anda dapat meningkatkan kuota ini dengan menentukan file konfigurasi berikut untuk svcutil.

File konfigurasi berikut menunjukkan cara mengatur kuota pembaca untuk svcutil

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <customBinding>
                <binding name="MyBinding">
                    <textMessageEncoding>
                        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                    </textMessageEncoding>
                    <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
                </binding>
            </customBinding>
        </bindings>
        <client>
            <endpoint binding="customBinding" bindingConfiguration="MyBinding"
                contract="IMetadataExchange"
                name="http" />
        </client>
    </system.serviceModel>
</configuration>

Buat file baru bernama svcutil.exe.config dan salin kode contoh XML ke dalamnya. Kemudian letakkan file pada direktori yang sama dengan svcutil.exe. Ketika svcutil.exe dijalankan pada lain waktu, maka file akan mengambil pengaturan baru.

Masalah keamanan

Anda harus menggunakan Daftar Access Control (ACL) yang tepat untuk melindungi folder penginstalan, Svcutil.config, dan file Svcutil.exe yang ditunjuk oleh /svcutilConfig. Proses ini dapat mencegah terdaftarnya dan berjalannya ekstensi berbahaya.

Selain itu, untuk memperkecil peluang keamanan untuk disusupi, Anda jangan menambahkan ekstensi yang tidak tepercaya untuk menjadi bagian dari sistem atau menggunakan penyedia kode yang tidak tepercaya dengan Svcutil.exe.

Akhirnya, Anda jangan menggunakan alat pada tingkat menengah dari aplikasi Anda, karena dapat menyebabkan penolakan layanan untuk proses saat ini.

Lihat juga