Narzędzie do obsługi metadanych elementu ServiceModel (Svcutil.exe)

Narzędzie ServiceModel Metadata Utility służy do generowania kodu modelu usługi na podstawie dokumentów metadanych i dokumentów metadanych z kodu modelu usługi.

SvcUtil.exe

Narzędzie ServiceModel Metadata Utility można znaleźć w lokalizacji instalacji zestawu WINDOWS SDK, w szczególności %ProgramFiles%\Microsoft SDKs\Windows\v6.0\Bin.

Funkcje

W poniższej tabeli podsumowano różne funkcje udostępniane przez to narzędzie oraz odpowiedni temat, w których omówiono sposób jego działania:

Zadanie Temat
Generuje kod na podstawie uruchomionych usług lub statycznych dokumentów metadanych. Generowanie klienta programu WCF na podstawie metadanych usługi
Eksportuje dokumenty metadanych ze skompilowanego kodu. Instrukcje: eksportowanie metadanych ze skompilowanego kodu usługi za pomocą programu Svcutil.exe
Weryfikuje skompilowany kod usługi. Instrukcje: weryfikacja skompilowanego kodu usługi za pomocą programu Svcutil.exe
Pobiera dokumenty metadanych z uruchomionych usług. Instrukcje: używanie programu Svcutil.exe do pobierania dokumentów metadanych
Generuje kod serializacji. Instrukcje: skracanie czasu uruchamiania aplikacji klienckich programu WCF za pomocą elementu XmlSerializer

Przestroga

Svcutil zastępuje istniejące pliki na dysku, jeśli nazwy podane jako parametry są identyczne. Może to obejmować pliki kodu, konfigurację lub pliki metadanych. Aby tego uniknąć podczas generowania kodu i plików konfiguracji, użyj przełącznika /mergeConfig .

Ponadto przełączniki /r i /ct dla typów odwołujących się są do generowania kontraktów danych. Te przełączniki nie działają w przypadku korzystania z elementu XmlSerializer.

Limit czasu

Narzędzie ma limit czasu pięciu minut podczas pobierania metadanych. Ten limit czasu dotyczy tylko pobierania metadanych za pośrednictwem sieci. Nie dotyczy przetwarzania tych metadanych.

Wieloadyscyjna obsługa

Narzędzie nie obsługuje wielowątkowego określania wartości docelowej. Jeśli chcesz wygenerować artefakt o .NET Framework 4 z svcutil.exe, użyj svcutil.exez zestawu SDK .NET Framework 4. Aby wygenerować artefakt .NET Framework 3.5, użyj pliku wykonywalnego z zestawu SDK .NET Framework 3.5.

Uzyskiwanie dostępu do dokumentów WSDL

Gdy używasz programu Svcutil do uzyskiwania dostępu do dokumentu WSDL, który zawiera odwołanie do usługi tokenu zabezpieczającego (STS), program Svcutil wykonuje WS-MetadataExchange do usługi STS. Jednak usługa może uwidocznić swoje dokumenty WSDL przy użyciu WS-MetadataExchange LUB HTTP GET. W związku z tym, jeśli usługi STS tylko ujawniono dokument WSDL przy użyciu żądania HTTP GET, klient napisany w winFX nie powiedzie się. W przypadku klientów napisanych w .NET Framework 3.5 program Svcutil próbuje użyć zarówno usługi WS-MetadataExchange, jak i żądania HTTP GET w celu uzyskania usługi STS WSDL.

Korzystanie z SvcUtil.exe

Typowe zastosowania

W poniższej tabeli przedstawiono niektóre często używane opcje dla tego narzędzia:

Opcja Opis
/directory:<directory> Katalog, w którym mają być tworzyć pliki.

Ustawienie domyślne: bieżący katalog.

Krótka forma: /d
/help Wyświetla składnię polecenia i opcje narzędzia.

Krótka forma: /?
/noLogo Pomijanie komunikatu o prawach autorskich i banerze.
/svcutilConfig:<configFile> Określa niestandardowy plik konfiguracji do użycia zamiast App.config pliku. Może służyć do rejestrowania rozszerzeń system.serviceModel bez zmiany pliku konfiguracji narzędzia.
/target:<output, typ> Określa dane wyjściowe, które mają być generowane przez narzędzie.

Prawidłowe wartości to kod, metadane lub xmlSerializer.

Krótka forma: /t

Generowanie kodu

Svcutil.exe generować kod dla kontraktów usług, klientów i typów danych na podstawie dokumentów metadanych. Te dokumenty metadanych mogą być w trwałym magazynie lub pobierane w trybie online. Pobieranie w trybie online następuje po WS-Metadata Exchange zabezpieczeń lub protokołu TCP (aby uzyskać szczegółowe informacje, zobacz sekcję Pobieranie metadanych).

Można użyć narzędziaSvcUtil.exedo generowania kontraktów usług i danych na podstawie wstępnie zdefiniowanego dokumentu WSDL. Użyj przełącznika /serviceContract i określ adres URL lub lokalizację pliku, w którym można pobrać lub znaleźć dokument WSDL. W ten sposób są generowane kontrakty usług i danych zdefiniowane w dokumencie WSDL, których można następnie użyć do zaimplementowania usługi skargi. Aby uzyskać więcej informacji, zobacz How to: Retrieve Metadata (Jak pobrać metadane) i Implement a Compliant Service (Implementowanie zgodnej usługi).

W przypadku usługi z punktem końcowym BasicHttpContextBinding Svcutil.exebasicHttpBinding z atrybutem ustawionym na .true Pliki cookie są używane jako kontekst na serwerze. Jeśli chcesz zarządzać kontekstem na kliencie, gdy usługa używa plików cookie, możesz ręcznie zmodyfikować konfigurację, aby użyć powiązania kontekstowego.

Przestroga

Svcutil.exe generuje klienta na podstawie pliku WSDL lub pliku zasad odebranego z usługi. Główna nazwa użytkownika (UPN) jest generowana przez podsieć nazwy użytkownika "@" i w pełni kwalifikowanej nazwy domeny (FQDN). Jednak w przypadku użytkowników, którzy zarejestrowali się w usłudze Active Directory, ten format jest nieprawidłowy, a wartość UPN wygenerowana przez narzędzie powoduje niepowodzenie uwierzytelniania Kerberos z komunikatem o błędzie "Próba logowania nie powiodła się". Aby rozwiązać ten problem, należy ręcznie naprawić plik klienta wygenerowany przez to narzędzie.

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

Argument Opis
epr Ścieżka do pliku XML, który zawiera WS-Addressing EndpointReference dla punktu końcowego usługi obsługującego WS-Metadata Exchange. Aby uzyskać więcej informacji, zobacz sekcję Pobieranie metadanych.
metadataDocumentPath Ścieżka do dokumentu metadanych (wsdl lub xsd), który zawiera kontrakt do zaimportowania do kodu (.wsdl, .xsd, .wspolicy lub .wsmex).

Po określeniu zdalnego adresu URL metadanych program Svcutil śledzi importy i uwzględnia elementy. Jeśli jednak chcesz przetwarzać pliki metadanych w lokalnym systemie plików, musisz określić wszystkie pliki w tym argumentze. W ten sposób można użyć środowiska Svcutil w środowisku kompilacji, w którym nie można mieć zależności sieciowych. Dla tego argumentu można używać symboli wieloznacznych (*.xsd, *.wsdl).
url Adres URL punktu końcowego usługi, który dostarcza metadane lub dokument metadanych hostowany w trybie online. Aby uzyskać więcej informacji na temat sposobu pobierania tych dokumentów, zobacz sekcję Pobieranie metadanych.
Opcja Opis
/async Generuje sygnatury metody synchronicznej i asynchronicznej.

Ustawienie domyślne: wygeneruj tylko sygnatury metod synchronicznych.

Skrócona forma: /a
/collectionType:<type> Określa typ kolekcji listy dla klienta programu WCF.

Ustawienie domyślne: typ kolekcji to System.Array.

Skrócona forma: /ct
/config:<configFile> Określa nazwę pliku dla wygenerowanego pliku konfiguracji.

Ustawienie domyślne: output.config
/dataContractOnly Generuje kod tylko dla typów kontraktów danych. Typy kontraktów usług nie są generowane.

Dla tej opcji należy określić tylko lokalne pliki metadanych.

Formularz krótki: /dconly
/enableDataBinding Implementuje interfejs we INotifyPropertyChanged wszystkich typach kontraktów danych, aby włączyć powiązanie danych.

Formularz krótki: /edb
/excludeType:<type> Określa w pełni kwalifikowaną lub kwalifikowaną nazwę typu zestawu, która ma zostać wykluczona z przywołynych typów kontraktów.

W przypadku używania tego przełącznika razem z /r oddzielnymi bibliotekami DLL przywołyowana jest pełna nazwa klasy XSD.

Formularz krótki: /et
/importXmlTypes Konfiguruje serializator kontraktu danych do importowania typów innych niż typy kontraktów danych jako typy IXmlSerializable.
/internal Generuje klasy, które są oznaczone jako wewnętrzne. Ustawienie domyślne: wygeneruj tylko klasy publiczne.

Formularz krótki: /i
/language:<language> Określa język programowania używany do generowania kodu. Należy podać nazwę języka zarejestrowaną w Machine.config lub w pełni kwalifikowaną nazwę klasy dziedziczącej z klasy CodeDomProvider.

Wartości: c#, cs, csharp, vb, visualbasic, c++, cpp

Ustawienie domyślne: csharp

Krótka forma: /l
/mergeConfig Scala wygenerowaną konfigurację z istniejącym plikiem zamiast nadpisywać istniejący plik.
/messageContract Generuje typy kontraktów komunikatów.

Formularz krótki: /mc
/namespace:<string,string> Określa mapowanie z WSDL lub targetNamespace schematu XML do przestrzeni nazw CLR. Użycie "*" dla targetNamespace mapuje wszystkie targetNamespaces bez jawnego mapowania do tej przestrzeni nazw CLR.

Aby upewnić się, że nazwa kontraktu komunikatu nie koliduje z nazwą operacji, ::należy zakwalifikować odwołanie do typu za pomocą lub upewnić się, że nazwy są unikatowe.

Domyślne: pochodzi z docelowej przestrzeni nazw dokumentu schematu dla kontraktów danych. Domyślna przestrzeń nazw jest używana dla wszystkich innych wygenerowanych typów.

Formularz krótki: /n/n generowania typów do użycia z obiektem XmlSerializer obsługiwane jest tylko mapowanie pojedynczego obszaru nazw. Wszystkie wygenerowane typy będą w domyślnej przestrzeni nazw lub przestrzeni nazw określonej przez "*".
/noConfig Nie należy generować plików konfiguracji.
/noStdLib Nie należy odwoływać się do bibliotek standardowych.

Ustawienie domyślne: Mscorlib.dll i System.servicemodel.dll odwołania.
/out:<file> Określa nazwę pliku dla wygenerowanego kodu.

Ustawienie domyślne: pochodzi od nazwy definicji WSDL, nazwy usługi WSDL lub docelowej przestrzeni nazw jednego ze schematów.

Krótka forma: /o
/reference:<file path> Odwołuje się do typów w określonym zestawie. Podczas generowania klientów użyj tej opcji, aby określić zestawy, które mogą zawierać typy reprezentujące importowane metadane.

Nie można określić kontraktów komunikatów i typów XmlSerializer przy użyciu tego przełącznika.

W DateTimeOffset przypadku odwołania ten typ jest używany zamiast generowania nowego typu. Jeśli aplikacja jest napisana przy użyciu .NET Framework 3.5, SvcUtil.exe się automatycznieDateTimeOffset.

Formularz krótki: /r
/serializable Generuje klasy oznaczone atrybutem serializable.

Formularz krótki: /s
/serviceContract Generuj kod tylko dla kontraktów usług. Klasa i konfiguracja klienta nie zostaną wygenerowane

Formularz krótki: /sc
/serializer:Auto Automatycznie wybierz serializator. To próbuje użyć serializatora kontraktu danych i używa XmlSerializer, jeśli zakończy się niepowodzeniem.

Formularz krótki: /ser
/serializer:DataContractSerializer Generuje typy danych, które używają serializatora kontraktu danych do serializacji i deserializacji.

Formularz krótki: /ser:DataContractSerializer
/serializer:XmlSerializer Generuje typy danych, które używają do XmlSerializer serializacji i deserializacji.

Formularz krótki: /ser:XmlSerializer
/targetClientVersion Określ, która wersja .NET Framework dla aplikacji docelowej. Prawidłowe wartości to Version30 i Version35. Wartość domyślna to Version30.

Formularz krótki: /tcv

Version30: użyj , /tcv:Version30 jeśli generujesz kod dla klientów, którzy korzystają z winFX.

Version35: użyj /tcv:Version35 , jeśli generujesz kod dla klientów, którzy używają .NET Framework 3.5. W przypadku używania /tcv:Version35 z przełącznikiem /async generowane są zarówno metody asynchroniczne oparte na zdarzeniach, jak i wywołania zwrotne/delegaty. Ponadto włączono obsługę dla zestawów danych z obsługą DateTimeOffset LINQ i .
/wrapped Określa, czy w dokumentach w stylu literału dokumentu z zawiniętymi parametrami jest używana specjalna literał. Użyj przełącznika /wrapped za pomocą narzędzia Service Model Metadata Utility Tool (Svcutil.exe), aby określić normalną obudowę.

Uwaga

Gdy powiązanie usługi jest jednym z powiązań dostarczanych przez system (zobacz Powiązania dostarczane przez system),None a None zamiast oczekiwanego elementu dostarczonego przez system.Sign Jeśli na przykład usługa używa <wsHttpBinding> elementu z SignProtectionLevel ustawioną na wartość , <customBinding> wygenerowana konfiguracja znajduje się w sekcji powiązań zamiast <wsHttpBinding>. Aby uzyskać więcej informacji na temat poziomu ochrony, zobacz Understanding Protection Level (Opis poziomu ochrony).

Eksportowanie metadanych

Svcutil.exe można eksportować metadane dla usług, kontraktów i typów danych w skompilowanych zestawach. Aby wyeksportować metadane dla usługi, /serviceName należy użyć opcji , aby określić usługę, która ma zostać wyeksportowana. Aby wyeksportować wszystkie typy kontraktów danych w zestawie, należy użyć /dataContractOnly opcji . Domyślnie metadane są eksportowane dla wszystkich kontraktów usług w zestawach wejściowych.

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

Argument Opis
assemblyPath Określa ścieżkę do zestawu, który zawiera usługi, kontrakty lub typy kontraktów danych do wyeksportowania. Standardowe symbole wieloznaczne wiersza polecenia mogą służyć do zapewnienia wielu plików jako danych wejściowych.
Opcja Opis
/serviceName:<serviceConfigName> Określa nazwę konfiguracji usługi do wyeksportowania. Jeśli ta opcja jest używana, zestaw wykonywalny ze skojarzonym plikiem konfiguracji musi zostać przekazany jako dane wejściowe. Svcutil.exe wyszukuje konfigurację usługi we wszystkich skojarzonych plikach konfiguracji. Jeśli pliki konfiguracji zawierają jakiekolwiek typy rozszerzeń, zestawy zawierające te typy muszą znajdować się w gaju GAC lub jawnie dostarczone przy użyciu /reference opcji .
/reference:<ścieżka pliku> Dodaje określony zestaw do zestawu zestawów używanych do rozpoznawania odwołań do typu. W przypadku eksportowania lub sprawdzania poprawności usługi, która używa rozszerzeń innych firm (zachowań, powiązań i elementów bindingElements) zarejestrowanych w konfiguracji, użyj tej opcji, aby zlokalizować zestawy rozszerzeń, które nie znajdują się w gaceniu GAC.

Skrócona forma: /r
/dataContractOnly Działa tylko na typach kontraktów danych. Kontrakty usług nie są przetwarzane.

Dla tej opcji należy określić tylko lokalne pliki metadanych.

Skrócona forma: /dconly
/excludeType:<type> Określa w pełni kwalifikowaną lub kwalifikowaną nazwę zestawu typu, który ma zostać wykluczony z eksportu. Tej opcji można użyć podczas eksportowania metadanych dla usługi lub zestawu kontraktów usług w celu wykluczenia typów z eksportowania. Tej opcji nie można używać razem z opcją /dconly .

Jeśli masz pojedynczy zestaw zawierający wiele usług, a każda z nich używa oddzielnych klas o tej samej nazwie XSD, należy określić nazwę usługi zamiast nazwy klasy XSD dla tego przełącznika.

XSD lub typy kontraktów danych nie są obsługiwane.

Skrócona forma: /et

Walidacja usługi

Walidacja może służyć do wykrywania błędów w implementacjach usługi bez hostowania usługi. Należy użyć opcji , /serviceName aby wskazać usługę, którą chcesz zweryfikować.

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

Argument Opis
assemblyPath Określa ścieżkę do zestawu, który zawiera typy usług do weryfikacji. Zestaw musi mieć skojarzony plik konfiguracji, aby zapewnić konfigurację usługi. Standardowe symbole wieloznaczne wiersza polecenia mogą służyć do zapewnienia wielu zestawów.
Opcja Opis
/Validate Weryfikuje implementację usługi określoną przez /serviceName opcję . Jeśli ta opcja jest używana, zestaw wykonywalny ze skojarzonym plikiem konfiguracji musi zostać przekazany jako dane wejściowe.

Skrócona forma: /v
/serviceName:<serviceConfigName> Określa nazwę konfiguracji usługi do weryfikacji. Svcutil.exe wyszukuje konfigurację usługi we wszystkich skojarzonych plikach konfiguracji wszystkich zestawów wejściowych. Jeśli pliki konfiguracji zawierają jakiekolwiek typy rozszerzeń, zestawy zawierające te typy muszą znajdować się w gaju GAC lub jawnie dostarczone przy użyciu /reference opcji .
/reference:<ścieżka pliku> Dodaje określony zestaw do zestawu zestawów używanych do rozpoznawania odwołań do typu. W przypadku eksportowania lub sprawdzania poprawności usługi, która używa rozszerzeń innych firm (zachowań, powiązań i elementów bindingElements) zarejestrowanych w konfiguracji, użyj tej opcji, aby zlokalizować zestawy rozszerzeń, które nie znajdują się w gaceniu GAC.

Skrócona forma: /r
/dataContractOnly Działa tylko na typach kontraktów danych. Kontrakty usług nie są przetwarzane.

Dla tej opcji należy określić tylko lokalne pliki metadanych.

Skrócona forma: /dconly
/excludeType:<type> Określa w pełni kwalifikowaną lub kwalifikowaną nazwę zestawu typu, który ma zostać wykluczony z walidacji.

Skrócona forma: /et

Pobieranie metadanych

Svcutil.exe można użyć do pobrania metadanych z uruchomionych usług i zapisania metadanych w plikach lokalnych. Aby pobrać metadane, należy określić opcję /t:metadata . W przeciwnym razie generowany jest kod klienta. W przypadku schematów adresów URL protokołów HTTP i HTTPS Svcutil.exe pobierać metadane przy użyciu WS-Metadata Exchange i URZĄDZENIA DOC. W przypadku wszystkich innych schematów adresów URL Svcutil.exe tylko WS-Metadata Exchange.

Program Svcutil jednocześnie wydaje następujące żądania metadanych w celu pobrania metadanych.

  • Żądanie MEX (WS-Transfer) do podanego adresu

  • Żądanie MEX na podany adres z dołączonym /mex

  • ŻądanieDES (przy użyciu funkcji DiscoveryClientProtocol z ASMX) do podanego adresu.

Domyślnie program Svcutil.exe powiązania zdefiniowane w klasie MetadataExchangeBindings do żądania MEX. Aby skonfigurować powiązanie używane na WS-Metadata Exchange, należy zdefiniować punkt końcowy klienta w konfiguracji, która używa kontraktu IMetadataExchange. Można to zdefiniować w pliku konfiguracyjnym programu Svcutil.exe lub w innym pliku konfiguracji określonym przy użyciu /svcutilConfig opcji .

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

Argument Opis
url Adres URL punktu końcowego usługi, który dostarcza metadane lub dokument metadanych hostowany w trybie online.
epr Ścieżka do pliku XML, który zawiera WS-Addressing EndpointReference dla punktu końcowego usługi obsługującego WS-Metadata Exchange.

Generowanie typu elementu XmlSerializer

Usługi i aplikacje klienckie korzystające z typów danych, które można serializuje XmlSerializer przy użyciu generowania i kompilowania kodu serializacji dla tych typów danych w czasie wykonywania, co może spowodować spowolnienie uruchamiania.

Uwaga

Wstępnie wygenerowany kod serializacji może być używany tylko w aplikacjach klienckich, a nie w usługach.

Svcutil.exe może wygenerować niezbędny kod serializacji języka C# ze skompilowanych zestawów dla aplikacji, zwiększając w ten sposób wydajność uruchamiania dla tych aplikacji. Aby uzyskać więcej informacji, zobacz How to: Improve the Startup Time of WCF Client Applications using the XmlSerializer (Jak poprawić czas uruchamiania aplikacji klienckich programu WCF przy użyciu elementu XmlSerializer).

Uwaga

Svcutil.exe generuje kod tylko dla typów używanych przez kontrakty usług znalezione w zestawach wejściowych.

svcutil.exe /t:xmlSerializer <assemblyPath>*

Argument Opis
assemblyPath Określa ścieżkę do zestawu, który zawiera typy kontraktów usług. Typy serializacji są generowane dla wszystkich typów Xml serializacji w każdym kontrakcie.
Opcja Opis
/reference:<ścieżka pliku> Dodaje określony zestaw do zestawu zestawów używanych do rozpoznawania odwołań do typu.

Skrócona forma: /r
/excludeType:<type> Określa w pełni kwalifikowaną lub kwalifikowaną nazwę zestawu typu, który ma zostać wykluczony z eksportu lub weryfikacji.

Skrócona forma: /et
/out:<file> Określa nazwę pliku dla wygenerowanego kodu. Ta opcja jest ignorowana, gdy wiele zestawów jest przekazywanych jako dane wejściowe do narzędzia.

Ustawienie domyślne: pochodzi od nazwy zestawu.

Skrócona forma: /o
/UseSerializerForFaults Określa, że XmlSerializer ma być używany do odczytywania i zapisywania błędów, zamiast domyślnego DataContractSerializer.

Przykłady

Następujące polecenie generuje kod klienta z uruchomionej usługi lub dokumentów metadanych online.

svcutil http://service/metadataEndpoint

Następujące polecenie generuje kod klienta z lokalnych dokumentów metadanych.

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

Następujące polecenie generuje typy kontraktów danych w Visual Basic z dokumentów schematu lokalnego.

svcutil /dconly *.xsd /language:VB

Następujące polecenie pobiera dokumenty metadanych z uruchomionych usług.

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

Następujące polecenie generuje dokumenty metadanych dla kontraktów usług i skojarzonych typów w zestawie.

svcutil myAssembly.dll

Następujące polecenie generuje dokumenty metadanych dla usługi oraz wszystkie skojarzone kontrakty usług i typy danych w zestawie.

svcutil myServiceHost.exe /serviceName:myServiceName

Następujące polecenie generuje dokumenty metadanych dla typów danych w zestawie.

svcutil myServiceHost.exe /dconly

Następujące polecenie weryfikuje hosting usług.

svcutil /validate /serviceName:myServiceName myServiceHost.exe

Następujące polecenie generuje typy serializacji dla typów XmlSerializer używanych przez wszelkie kontrakty usług w zestawie.

svcutil /t:xmlserializer myContractLibrary.exe

Maksymalny limit przydziału liczby znaków w tabeli nazw

Podczas generowania metadanych dla usługi przy użyciu narzędzia svcutil może zostać wyświetlony następujący komunikat:

Błąd: Nie można uzyskać metadanych http://localhost:8000/somesservice/mex z maksymalnego limitu przydziału liczby znaków w tabeli nazw (16384) został przekroczony podczas odczytywania danych XML. Tabela nazw to struktura danych używana do przechowywania ciągów napotkanych podczas przetwarzania XML — długi dokument XML z nie powtarzalnymi nazwami elementów, nazwami atrybutów i wartościami atrybutów może wyzwolić ten limit przydziału. Ten limit przydziału można zwiększyć, zmieniając właściwość MaxNameTableCharCount obiektu XmlDictionaryReaderQuotas używanego podczas tworzenia czytnika XML.

Ten błąd może być spowodowany przez usługę, która zwraca duży plik WSDL podczas żądania jego metadanych. Problem polega na tym, że limit przydziału znaków dla svcutil.exe został przekroczony. Ta wartość jest ustawiana w celu zapobiegania atakom typu "odmowa usługi" (dos). Ten limit przydziału można zwiększyć, określając następujący plik konfiguracji dla programu svcutil.

W poniższym pliku konfiguracji pokazano, jak ustawić limity przydziału czytnika dla programu 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>

Utwórz nowy plik o nazwie svcutil.exe.config i skopiuj do niego przykładowy kod XML. Następnie umieść plik w tym samym katalogu, w którym svcutil.exe. Przy następnym svcutil.exe zostaną uruchomione nowe ustawienia.

Kwestie związane z zabezpieczeniami

Należy użyć odpowiedniej listy Access Control (ACL), aby chronić folder Svcutil.exe, pliki Svcutil.config i pliki wskazywane przez program /svcutilConfig. Może to uniemożliwić rejestrowanie i uruchamianie złośliwych rozszerzeń.

Ponadto, aby zminimalizować ryzyko naruszenia zabezpieczeń, nie należy dodawać niezaufanych rozszerzeń jako części systemu ani używać niezaufanych dostawców kodu z Svcutil.exe.

Na koniec nie należy używać narzędzia w warstwie środkowej aplikacji, ponieważ może to spowodować odmowę usługi dla bieżącego procesu.

Zobacz też