Delen via


Hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe)

Het hulpprogramma ServiceModel Metadata Utility wordt gebruikt om servicemodelcode te genereren op basis van metagegevensdocumenten en metagegevensdocumenten uit servicemodelcode.

SvcUtil.exe

Het hulpprogramma hulpprogramma voor metagegevens van ServiceModel vindt u op de installatielocatie van de Windows SDK, met name %ProgramFiles%\Microsoft SDK's\Windows\v6.0\Bin.

Functies

De volgende tabel bevat een overzicht van de verschillende functies van dit hulpprogramma en het bijbehorende onderwerp waarin wordt beschreven hoe deze wordt gebruikt:

Opdracht Onderwerp
Hiermee genereert u code van actieve services of statische metagegevensdocumenten. Een WCF-client genereren op basis van servicemetagegevens
Hiermee exporteert u metagegevensdocumenten uit gecompileerde code. Procedure: Svcutil.exe gebruiken om metagegevens te exporteren uit gecompileerde servicecode
Valideert de gecompileerde servicecode. Procedure: Svcutil.exe gebruiken om gecompileerde servicecode te valideren
Hiermee downloadt u metagegevensdocumenten van actieve services. Procedure: Svcutil.exe gebruiken om metagegevensdocumenten te downloaden
Hiermee genereert u serialisatiecode. Procedure: De opstarttijd van WCF-clienttoepassingen verbeteren met behulp van xmlSerializer

Let op

Svcutil overschrijft bestaande bestanden op een schijf als de namen die als parameters zijn opgegeven identiek zijn. Dit kunnen codebestanden, configuratie- of metagegevensbestanden zijn. Gebruik de schakeloptie om dit te voorkomen bij het /mergeConfig genereren van code- en configuratiebestanden.

Daarnaast zijn de /r en /ct switches voor verwijzingstypen bedoeld voor het genereren van gegevenscontracten. Deze schakelopties werken niet wanneer u XmlSerializer gebruikt.

Timeout

Het hulpprogramma heeft een time-out van vijf minuten bij het ophalen van metagegevens. Deze time-out is alleen van toepassing op het ophalen van metagegevens via het netwerk. Deze is niet van toepassing op een verwerking van die metagegevens.

Meerdere targeting

Het hulpprogramma biedt geen ondersteuning voor meerdere targeting. Als u een .NET Framework 4-artefact wilt genereren op basis van svcutil.exe, gebruikt u de svcutil.exe van de .NET Framework 4 SDK. Als u een .NET Framework 3.5-artefact wilt genereren, gebruikt u het uitvoerbare bestand van de .NET Framework 3.5 SDK.

Toegang tot WSDL-documenten

Wanneer u Svcutil gebruikt voor toegang tot een WSDL-document met een verwijzing naar een beveiligingstokenservice (STS), maakt Svcutil een WS-MetadataExchange-aanroep naar de STS. De service kan echter WSDL-documenten beschikbaar maken met WS-MetadataExchange of HTTP GET. Als de STS het WSDL-document alleen beschikbaar heeft gemaakt met HTTP GET, mislukt een client die in WinFX is geschreven. Voor clients die zijn geschreven in .NET Framework 3.5, probeert Svcutil zowel WS-MetadataExchange als HTTP GET te gebruiken om de STS WSDL te verkrijgen.

SvcUtil.exe gebruiken

Algemene gebruiksgegevens

In de volgende tabel ziet u enkele veelgebruikte opties voor dit hulpprogramma:

Optie Omschrijving
/directory:<directory> Map waarin u bestanden wilt maken.

Standaard: de huidige map.

Korte vorm: /d
/ Help Geeft de syntaxis van de opdracht en opties voor het hulpprogramma weer.

Korte vorm: /?
/noLogo Het auteursrecht en het bannerbericht onderdrukken.
/svcutilConfig:<configFile> Hiermee geeft u een aangepast configuratiebestand te gebruiken in plaats van het App.config-bestand. Dit kan worden gebruikt om system.serviceModel-extensies te registreren zonder het configuratiebestand van het hulpprogramma te wijzigen.
/target:<output type> Hiermee geeft u de uitvoer die moet worden gegenereerd door het hulpprogramma.

Geldige waarden zijn code, metagegevens of xmlSerializer.

Korte vorm: /t

Genereren van code

Svcutil.exe kunt code genereren voor servicecontracten, clients en gegevenstypen uit metagegevensdocumenten. Deze metagegevensdocumenten kunnen zich in een duurzame opslag bevinden of online worden opgehaald. Online ophalen volgt het WS-Metadata Exchange-protocol of het DISCO-protocol (zie de sectie Metagegevens downloaden voor meer informatie).

U kunt het hulpprogramma SvcUtil.exe gebruiken om service- en gegevenscontracten te genereren op basis van een vooraf gedefinieerd WSDL-document. Gebruik de schakeloptie /serviceContract en geef een URL of bestandslocatie op waar het WSDL-document kan worden gedownload of gevonden. Hiermee worden de service- en gegevenscontracten gegenereerd die zijn gedefinieerd in het WSDL-document dat vervolgens kan worden gebruikt om een klachtservice te implementeren. Zie Voor meer informatie : Metagegevens ophalen en een compatibele service implementeren.

Voor een service met een BasicHttpContextBinding-eindpunt genereert Svcutil.exe in plaats daarvan een BasicHttpBinding met het allowCookies kenmerk ingesteld true op. De cookies worden gebruikt voor context op de server. Als u context op de client wilt beheren wanneer de service cookies gebruikt, kunt u de configuratie handmatig wijzigen om een contextbinding te gebruiken.

Let op

Svcutil.exe genereert de client op basis van het WSDL- of beleidsbestand dat is ontvangen van de service. De UPN (User Principal Name) wordt gegenereerd door de gebruikersnaam , '@' en een FQDN (Fully Qualified Domain Name) samen te stellen. Voor gebruikers die zich in Active Directory hebben geregistreerd, is deze indeling echter niet geldig en veroorzaakt de UPN die door het hulpprogramma wordt gegenereerd een fout in Kerberos-verificatie met het foutbericht 'De aanmeldingspoging is mislukt'. U kunt dit probleem oplossen door het clientbestand dat door dit hulpprogramma is gegenereerd, handmatig op te lossen.

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

Argument Beschrijving
epr Het pad naar een XML-bestand dat een WS-Addressing EndpointReference bevat voor een service-eindpunt dat WS-Metadata Exchange ondersteunt. Zie de sectie Metagegevens downloaden voor meer informatie.
metadataDocumentPath Het pad naar een metagegevensdocument (wsdl of xsd) dat het contract bevat dat moet worden geïmporteerd in code (.wsdl, .xsd, .wspolicy of .wsmex).

Svcutil volgt importbewerkingen en bevat wanneer u een externe URL voor metagegevens opgeeft. Als u echter metagegevensbestanden wilt verwerken in het lokale bestandssysteem, moet u alle bestanden in dit argument opgeven. Op deze manier kunt u Svcutil gebruiken in een build-omgeving waar u geen netwerkafhankelijkheden kunt hebben. U kunt jokertekens (*.xsd, *.wsdl) gebruiken voor dit argument.
url De URL naar een service-eindpunt dat metagegevens of een online gehost metagegevensdocument biedt. Zie de sectie Metagegevens downloaden voor meer informatie over hoe deze documenten worden opgehaald.
Optie Omschrijving
/Async Hiermee worden zowel synchrone als asynchrone methodehandtekeningen gegenereerd.

Standaard: alleen synchrone methodehandtekeningen genereren.

Korte vorm: /a
/collectionType:<type> Hiermee geeft u het type lijstverzameling voor een WCF-client.

Standaard: het verzamelingstype is System.Array.

Korte vorm: /ct
/config:<configFile> Hiermee geeft u de bestandsnaam voor het gegenereerde configuratiebestand.

Standaard: output.config
/dataContractOnly Hiermee genereert u alleen code voor gegevenscontracttypen. Servicecontracttypen worden niet gegenereerd.

U moet alleen lokale metagegevensbestanden voor deze optie opgeven.

Korte vorm: /dconly
/enableDataBinding Hiermee wordt de INotifyPropertyChanged interface op alle typen gegevenscontracten geïmplementeerd om gegevensbinding mogelijk te maken.

Korte vorm: /edb
/excludeType:<type> Hiermee geeft u een volledig gekwalificeerde of assembly-gekwalificeerde typenaam die moet worden uitgesloten van contracttypen waarnaar wordt verwezen.

Wanneer u deze switch samen met /r afzonderlijke DLL's gebruikt, wordt naar de volledige naam van de XSD-klasse verwezen.

Korte vorm: /et
/importXmlTypes Hiermee configureert u de serialisatiefunctie van het gegevenscontract om niet-gegevenscontracttypen te importeren als IXmlSerializable-typen.
/intern Hiermee worden klassen gegenereerd die zijn gemarkeerd als intern. Standaard: alleen openbare klassen genereren.

Korte vorm: /i
/language:<language> Hiermee geeft u de programmeertaal op die moet worden gebruikt voor het genereren van code. U moet een taalnaam opgeven die is geregistreerd in het bestand Machine.config, of de volledig gekwalificeerde naam van een klasse die wordt overgenomen van CodeDomProvider.

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

Standaard: csharp

Korte vorm: /l
/mergeConfig Hiermee wordt de gegenereerde configuratie samengevoegd in een bestaand bestand in plaats van het bestaande bestand te overschrijven.
/messageContract Hiermee worden berichtcontracttypen gegenereerd.

Korte vorm: /mc
/naamruimte:<tekenreeks,tekenreeks> Hiermee geeft u een toewijzing van een WSDL- of XML-schema targetNamespace naar een CLR-naamruimte. Als u *gebruikt voor de targetNamespace, worden alle targetNamespaces toegewezen zonder expliciete toewijzing aan die CLR-naamruimte.

Om ervoor te zorgen dat de naam van het berichtcontract niet in conflict komt met de naam van de bewerking, moet u de typereferentie kwalificeren met ::, of ervoor zorgen dat de namen uniek zijn.

Standaard: Afgeleid van de doelnaamruimte van het schemadocument voor Data Contracts. De standaardnaamruimte wordt gebruikt voor alle andere gegenereerde typen.

Korte vorm: Opmerking: /n bij het genereren van typen die moeten worden gebruikt met XmlSerializer, wordt slechts één naamruimtetoewijzing ondersteund. Alle gegenereerde typen bevinden zich in de standaardnaamruimte of de naamruimte die is opgegeven door *.
/noConfig Genereer geen configuratiebestanden.
/noStdLib Niet verwijzen naar standaardbibliotheken.

Standaard: er wordt naar Mscorlib.dll en System.servicemodel.dll verwezen.
/out:<file> Hiermee geeft u de bestandsnaam voor de gegenereerde code.

Standaard: afgeleid van de naam van de WSDL-definitie, de naam van de WSDL-service of de doelnaamruimte van een van de schema's.

Korte vorm: /o
/reference:<bestandspad> Verwijzingen in de opgegeven assembly. Wanneer u clients genereert, gebruikt u deze optie om assembly's op te geven die mogelijk typen bevatten die de metagegevens vertegenwoordigen die worden geïmporteerd.

U kunt geen berichtcontracten en XmlSerializer typen opgeven met deze switch.

Als DateTimeOffset ernaar wordt verwezen, wordt dit type gebruikt in plaats van een nieuw type te genereren. Als de toepassing is geschreven met .NET Framework 3.5, SvcUtil.exe verwijzingen DateTimeOffset automatisch.

Korte vorm: /r
/Serializable Hiermee worden klassen gegenereerd die zijn gemarkeerd met het serialiseerbare kenmerk.

Korte vorm: /s
/serviceContract Genereer alleen code voor servicecontracten. Clientklasse en -configuratie worden niet gegenereerd

Korte vorm: /sc
/serializer:Auto Selecteer automatisch de serialisatiefunctie. Hiermee wordt geprobeerd de Serializer van het Gegevenscontract te gebruiken en wordt de XmlSerializer gebruikt als dat mislukt.

Korte vorm: /ser
/serializer:DataContractSerializer Hiermee worden gegevenstypen gegenereerd die gebruikmaken van de Data Contract Serializer voor serialisatie en deserialisatie.

Korte vorm: /ser:DataContractSerializer
/serializer:XmlSerializer Hiermee worden gegevenstypen gegenereerd die gebruikmaken van de XmlSerializer voor serialisatie en deserialisatie.

Korte vorm: /ser:XmlSerializer
/targetClientVersion Geef op welke versie van .NET Framework de toepassing is gericht. Geldige waarden zijn Version30 en Version35. De standaardwaarde is Version30.

Korte vorm: /tcv

Version30: Gebruik /tcv:Version30 deze optie als u code genereert voor clients die WinFX gebruiken.

Version35: Gebruik /tcv:Version35 deze optie als u code genereert voor clients die gebruikmaken van .NET Framework 3.5. Bij gebruik /tcv:Version35 met de /async switch worden zowel asynchrone asynchrone methoden op basis van gebeurtenissen als callback/delegate gegenereerd. Daarnaast is ondersteuning voor gegevenssets met LINQ-functionaliteit ingeschakeld en DateTimeOffset ingeschakeld.
/Verpakt Hiermee bepaalt u of speciaal hoofdlettergebruik wordt gebruikt voor documenten met verpakte parameters. Gebruik de schakeloptie /wrapped met het hulpprogramma Service Model Metadata Utility (Svcutil.exe) om normale behuizing op te geven.

Notitie

Wanneer de servicebinding een van de door het systeem geleverde bindingen is (zie Door het systeem geleverde bindingen) en de ProtectionLevel eigenschap is ingesteld op ofSignNone, genereert Svcutil een configuratiebestand met behulp van het <customBinding-element> in plaats van het verwachte door het systeem geleverde element. Als de service bijvoorbeeld het <wsHttpBinding> element gebruikt waarop de ProtectionLevel set is ingesteld Sign, heeft <customBinding> de gegenereerde configuratie in de sectie Bindingen in plaats van <wsHttpBinding>. Zie Understanding Protection Level (Beveiligingsniveau) voor meer informatie over het beveiligingsniveau.

Metagegevens exporteren

Svcutil.exe kunt metagegevens exporteren voor services, contracten en gegevenstypen in gecompileerde assembly's. Als u metagegevens voor een service wilt exporteren, moet u de /serviceName optie gebruiken om de service op te geven die u wilt exporteren. Als u alle gegevenscontracttypen binnen een assembly wilt exporteren, moet u de /dataContractOnly optie gebruiken. Metagegevens worden standaard geëxporteerd voor alle servicecontracten in de invoerassembly's.

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

Argument Beschrijving
assemblyPath Hiermee geeft u het pad naar een assembly die services, contracten of gegevenscontracttypen bevat die moeten worden geëxporteerd. Standaard-opdrachtregel-jokertekens kunnen worden gebruikt om meerdere bestanden als invoer te leveren.
Optie Omschrijving
/serviceName:<serviceConfigName> Hiermee geeft u de configuratienaam van een service die moet worden geëxporteerd. Als deze optie wordt gebruikt, moet een uitvoerbare assembly met een gekoppeld configuratiebestand worden doorgegeven als invoer. Svcutil.exe doorzoekt alle bijbehorende configuratiebestanden voor de serviceconfiguratie. Als de configuratiebestanden extensietypen bevatten, moeten de assembly's die deze typen bevatten, zich in de GAC bevinden of expliciet worden opgegeven met behulp van de /reference optie.
/reference:<bestandspad> Hiermee voegt u de opgegeven assembly toe aan de set assembly's die worden gebruikt voor het omzetten van typeverwijzingen. Als u een service exporteert of valideert die gebruikmaakt van extensies van derden (Behaviors, Bindings en BindingElements) die zijn geregistreerd in de configuratie, gebruikt u deze optie om extensieassembly's te zoeken die zich niet in de GAC bevinden.

Korte vorm: /r
/dataContractOnly Werkt alleen op gegevenscontracttypen. Servicecontracten worden niet verwerkt.

U moet alleen lokale metagegevensbestanden voor deze optie opgeven.

Korte vorm: /dconly
/excludeType:<type> Hiermee geeft u de volledig gekwalificeerde of assembly-gekwalificeerde naam van een type dat moet worden uitgesloten van export. Deze optie kan worden gebruikt bij het exporteren van metagegevens voor een service of een set servicecontracten om typen uit te sluiten van geëxporteerde typen. Deze optie kan niet samen met de /dconly optie worden gebruikt.

Wanneer u één assembly met meerdere services hebt en elk afzonderlijke klassen met dezelfde XSD-naam gebruikt, moet u de servicenaam opgeven in plaats van de XSD-klassenaam voor deze switch.

XSD- of gegevenscontracttypen worden niet ondersteund.

Korte vorm: /et

Servicevalidatie

Validatie kan worden gebruikt om fouten in service-implementaties te detecteren zonder de service te hosten. U moet de /serviceName optie gebruiken om de service aan te geven die u wilt valideren.

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

Argument Beschrijving
assemblyPath Hiermee geeft u het pad naar een assembly die servicetypen bevat die moeten worden gevalideerd. De assembly moet een gekoppeld configuratiebestand hebben om serviceconfiguratie te bieden. Standaard-opdrachtregel-jokertekens kunnen worden gebruikt om meerdere assembly's te bieden.
Optie Omschrijving
/valideren Valideert een service-implementatie die is opgegeven door de /serviceName optie. Als deze optie wordt gebruikt, moet een uitvoerbare assembly met een gekoppeld configuratiebestand worden doorgegeven als invoer.

Korte vorm: /v
/serviceName:<serviceConfigName> Hiermee geeft u de configuratienaam van een service die moet worden gevalideerd. Svcutil.exe doorzoekt alle bijbehorende configuratiebestanden van alle invoerassembly's voor de serviceconfiguratie. Als de configuratiebestanden extensietypen bevatten, moeten de assembly's die deze typen bevatten, zich in de GAC bevinden of expliciet worden opgegeven met behulp van de /reference optie.
/reference:<bestandspad> Hiermee voegt u de opgegeven assembly toe aan de set assembly's die worden gebruikt voor het omzetten van typeverwijzingen. Als u een service exporteert of valideert die gebruikmaakt van extensies van derden (Behaviors, Bindings en BindingElements) die zijn geregistreerd in de configuratie, gebruikt u deze optie om extensieassembly's te zoeken die zich niet in de GAC bevinden.

Korte vorm: /r
/dataContractOnly Werkt alleen op gegevenscontracttypen. Servicecontracten worden niet verwerkt.

U moet alleen lokale metagegevensbestanden voor deze optie opgeven.

Korte vorm: /dconly
/excludeType:<type> Hiermee geeft u de volledig gekwalificeerde of assembly-gekwalificeerde naam van een type dat moet worden uitgesloten van validatie.

Korte vorm: /et

Metagegevens downloaden

Svcutil.exe kan worden gebruikt om metagegevens te downloaden van actieve services en de metagegevens op te slaan in lokale bestanden. Als u metagegevens wilt downloaden, moet u de /t:metadata optie opgeven. Anders wordt clientcode gegenereerd. Voor HTTP- en HTTPS-URL-schema's probeert Svcutil.exe metagegevens op te halen met WS-Metadata Exchange en DISCO. Voor alle andere URL-schema's gebruikt Svcutil.exe alleen WS-Metadata Exchange.

Svcutil problemen met de volgende metagegevensaanvragen tegelijk om metagegevens op te halen.

  • MEX-aanvraag (WS-Transfer) naar het opgegeven adres

  • MEX-aanvraag aan het opgegeven adres waaraan /mex is toegevoegd

  • DISCO-aanvraag (met behulp van DiscoveryClientProtocol van ASMX) naar het opgegeven adres.

Standaard gebruikt Svcutil.exe de bindingen die in de MetadataExchangeBindings klasse zijn gedefinieerd om MEX-aanvragen te doen. Als u de binding wilt configureren die wordt gebruikt voor WS-Metadata Exchange, moet u een clienteindpunt definiëren in de configuratie die gebruikmaakt van het IMetadataExchange-contract. Dit kan worden gedefinieerd in het configuratiebestand van Svcutil.exe of in een ander configuratiebestand dat is opgegeven met behulp van de /svcutilConfig optie.

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

Argument Beschrijving
url De URL naar een service-eindpunt dat metagegevens of een online gehost metagegevensdocument biedt.
epr Het pad naar een XML-bestand dat een WS-Addressing EndpointReference bevat voor een service-eindpunt dat WS-Metadata Exchange ondersteunt.

Type generatie xmlSerializer

Services en clienttoepassingen die gebruikmaken van gegevenstypen die serialiseren met behulp van de XmlSerializer serialisatiecode genereren en compileren voor deze gegevenstypen tijdens runtime, wat kan leiden tot trage opstartprestaties.

Notitie

Vooraf gegenereerde serialisatiecode kan alleen worden gebruikt in clienttoepassingen en niet in services.

Svcutil.exe kan de benodigde C#-serialisatiecode genereren op basis van de gecompileerde assembly's voor de toepassing, waardoor de opstartprestaties voor deze toepassingen worden verbeterd. Zie Procedures voor meer informatie: De opstarttijd van WCF-clienttoepassingen verbeteren met behulp van de XmlSerializer.

Notitie

Svcutil.exe genereert alleen code voor typen die door Service Contracts worden gebruikt in de invoerassembly's.

svcutil.exe /t:xmlSerializer <assemblyPath>*

Argument Beschrijving
assemblyPath Hiermee geeft u het pad naar een assembly die servicecontracttypen bevat. Serialisatietypen worden gegenereerd voor alle Xml Serializable-typen in elk contract.
Optie Omschrijving
/reference:<bestandspad> Hiermee voegt u de opgegeven assembly toe aan de set assembly's die worden gebruikt voor het omzetten van typeverwijzingen.

Korte vorm: /r
/excludeType:<type> Hiermee geeft u de volledig gekwalificeerde of assembly-gekwalificeerde naam van een type dat moet worden uitgesloten van export of validatie.

Korte vorm: /et
/out:<file> Hiermee geeft u de bestandsnaam voor de gegenereerde code. Deze optie wordt genegeerd wanneer meerdere assembly's worden doorgegeven als invoer voor het hulpprogramma.

Standaard: afgeleid van de assemblynaam.

Korte vorm: /o
/UseSerializerForFaults Hiermee geeft u op dat de XmlSerializer moet worden gebruikt voor lees- en schrijffouten, in plaats van de standaardinstelling DataContractSerializer.

Voorbeelden

Met de volgende opdracht wordt clientcode gegenereerd op basis van een actieve service of online metagegevensdocumenten.

svcutil http://service/metadataEndpoint

Met de volgende opdracht wordt clientcode gegenereerd op basis van lokale metagegevensdocumenten.

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

Met de volgende opdracht worden gegevenscontracttypen in Visual Basic gegenereerd op basis van lokale schemadocumenten.

svcutil /dconly *.xsd /language:VB

Met de volgende opdracht worden metagegevensdocumenten gedownload van het uitvoeren van services.

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

Met de volgende opdracht worden metagegevensdocumenten voor servicecontracten en gekoppelde typen in een assembly gegenereerd.

svcutil myAssembly.dll

Met de volgende opdracht worden metagegevensdocumenten voor een service en alle bijbehorende servicecontracten en gegevenstypen in een assembly gegenereerd.

svcutil myServiceHost.exe /serviceName:myServiceName

Met de volgende opdracht worden metagegevensdocumenten voor gegevenstypen in een assembly gegenereerd.

svcutil myServiceHost.exe /dconly

Met de volgende opdracht wordt de servicehosting gecontroleerd.

svcutil /validate /serviceName:myServiceName myServiceHost.exe

Met de volgende opdracht worden serialisatietypen gegenereerd voor XmlSerializer typen die worden gebruikt door servicecontracten in de assembly.

svcutil /t:xmlserializer myContractLibrary.exe

Maximum quotum voor het aantal naamtabeltekens

Wanneer u svcutil gebruikt om metagegevens voor een service te genereren, krijgt u mogelijk het volgende bericht:

Fout: Kan geen metagegevens verkrijgen van http://localhost:8000/somesservice/mex het maximum quotum voor het aantal naamtabeltekens (16384) is overschreden tijdens het lezen van XML-gegevens. De naamtabel is een gegevensstructuur die wordt gebruikt voor het opslaan van tekenreeksen die zijn opgetreden tijdens de XML-verwerking. Lange XML-documenten met niet-herhalende elementnamen, kenmerknamen en kenmerkwaarden kunnen dit quotum activeren. Dit quotum kan worden verhoogd door de eigenschap MaxNameTableCharCount te wijzigen in het xmlDictionaryReaderQuotas-object dat wordt gebruikt bij het maken van de XML-lezer.

Deze fout kan worden veroorzaakt door een service die een groot WSDL-bestand retourneert wanneer u de metagegevens aanvraagt. Het probleem is dat het tekenquotum voor het hulpprogramma svcutil.exe wordt overschreden. Deze waarde is ingesteld om Denial of Service-aanvallen (dos) te voorkomen. U kunt dit quotum verhogen door het volgende configuratiebestand voor svcutil op te geven.

Het volgende configuratiebestand laat zien hoe u de lezersquota voor svcutil instelt

<?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>

Maak een nieuw bestand met de naam svcutil.exe.config en kopieer de XML-voorbeeldcode ernaartoe. Plaats het bestand vervolgens in dezelfde map als svcutil.exe. De volgende keer dat svcutil.exe wordt uitgevoerd, worden de nieuwe instellingen opgehaald.

Beveiligingsproblemen

U moet de juiste toegangsbeheerlijst (ACL) gebruiken om de installatiemap van Svcutil.exe, Svcutil.config en bestanden waarnaar wordt verwezen /svcutilConfigte beveiligen. Dit kan voorkomen dat schadelijke extensies worden geregistreerd en uitgevoerd.

Als u bovendien de kans wilt minimaliseren dat de beveiliging wordt aangetast, moet u geen niet-vertrouwde extensies toevoegen om deel uit te maken van het systeem of niet-vertrouwde codeproviders gebruiken met Svcutil.exe.

Ten slotte moet u het hulpprogramma niet gebruiken in de middelste laag van uw toepassing, omdat dit denial-of-service kan veroorzaken voor het huidige proces.

Zie ook