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 usługi Windows SDK, w szczególności w folderze %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 /mergeConfig przełącznika .

Ponadto przełączniki i dla typów odwołujących się /r są do /ct 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 zsvcutil.exe , użyjsvcutil.exe z 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 ma odwołanie do usługi tokenu zabezpieczającego (STS), 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 ujmuje 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 WS-MetadataExchange, jak i 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 do tworzenia plików.

Ustawienie domyślne: bieżący katalog.

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

Krótka forma: /?
/noLogo Pomiń informacje o prawach autorskich i banerze.
/svcutilConfig:<configFile> Określa niestandardowy plik konfiguracji do użycia zamiast App.config pliku. Może to służyć do rejestrowania rozszerzeń system.serviceModel bez zmiany pliku konfiguracji narzędzia.
/target:<output type> 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 jest WS-Metadata protokołu exchange lub protokołu TCP (aby uzyskać szczegółowe informacje, zobacz sekcję Pobieranie metadanych).

Można użyć narzędzia SvcUtil.exe do 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 wdrożenia usługi skargi. Aby uzyskać więcej informacji, zobacz How to: Retrieve Metadata and Implement a Compliant Service (Jak pobrać metadane i zaimplementować zgodną usługę).

W przypadku usługi z punktem końcowym BasicHttpContextBindingSvcutil.exeobiekt BasicHttpBinding z allowCookies 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 ujedno jej nazwę użytkownika " i w pełni kwalifikowaną nazwę 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 błąd podczas 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).

Program Svcutil śledzi importy i uwzględnia elementy podczas określania zdalnego adresu URL metadanych. 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 metod synchronicznych i asynchronicznych.

Ustawienie domyślne: wygeneruj tylko sygnatury metod synchronicznych.

Formularz krótki: /a
/collectionType:<type> Określa typ kolekcji listy dla klienta programu WCF.

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

Formularz krótki: /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 INotifyPropertyChanged we 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 oddzielnymi bibliotekami DLL przywołyowana jest pełna nazwa /r 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: generuj 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 pliku Machine.config lub w pełni kwalifikowaną nazwę klasy, która dziedziczy 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, a nie nadpisuje 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 Uwaga: podczas generowania typów do użycia z obiektem XmlSerializer obsługiwane jest tylko jedno mapowanie przestrzeni 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: pochodzące z 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 XmlSerializer typów przy użyciu tego przełącznika.

Jeśli DateTimeOffset istnieje odwołanie, ten typ jest używany zamiast generowania nowego typu. Jeśli aplikacja jest napisana przy użyciu .NET Framework 3.5, SvcUtil.exe automatycznie DateTimeOffset się odwołań.

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

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ć serializator kontraktu danych i używa XmlSerializer, jeśli się nie powiedzie.

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 wersję aplikacji .NET Framework docelowej aplikacji. 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 z przełącznikiem generowane są zarówno metody asynchroniczne oparte na zdarzeniach, jak i wywołania /tcv:Version35 /async zwrotne/delegaty. Ponadto włączono obsługę dla zestawów danych z obsługą LINQ DateTimeOffset 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 (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),a właściwość jest ustawiona na wartość ProtectionLevel lub , None Sign svcutil generuje plik konfiguracji przy użyciu elementu zamiast oczekiwanego elementu dostarczonego przez <customBinding> system. Jeśli na przykład usługa używa elementu z ustawionym na wartość , wygenerowana konfiguracja ma wartość w sekcji <wsHttpBinding> ProtectionLevel Sign <customBinding> 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, należy użyć opcji , aby określić usługę, /serviceName 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. Symbole wieloznaczne w standardowych wierszach 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 wyszuka 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:<file path> 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 gaju GAC.

Formularz krótki: /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.

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

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.

Formularz krótki: /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.

Formularz krótki: /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:<file path> 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 gaju GAC.

Formularz krótki: /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.

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

Formularz krótki: /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ć /t:metadata opcję . 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 ICHASC. 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 do podanego adresu z dołączonym plikiem /mex

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

Domyślnie program Svcutil.exe powiązania zdefiniowane w klasie do żądania MetadataExchangeBindings MEX. Aby skonfigurować powiązanie używane dla programu 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 konfiguracyjnym 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 przy użyciu generowania i kompilowania kodu serializacji dla tych typów danych w czasie wykonywania, co może spowodować XmlSerializer 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, co poprawia 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 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 Serializable w każdym kontrakcie.
Opcja Opis
/reference:<file path> Dodaje określony zestaw do zestawu zestawów używanych do rozpoznawania odwołań do typu.

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

Formularz krótki: /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.

Formularz krótki: /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 XmlSerializer typów używanych przez wszelkie kontrakty usług w zestawie.

svcutil /t:xmlserializer myContractLibrary.exe

Maksymalny limit przydziału liczby znaków w nazwach

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 z maksymalnego limitu przydziału liczby znaków w tabeli nazw http://localhost:8000/somesservice/mex (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, nazwy atrybutów i wartości atrybutów mogą 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) do ochrony folderu Svcutil.exe, plików Svcutil.config i plików wskazywanych 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ż