ServiceModel Metadata Utility-Tool (Svcutil.exe)
Das ServiceModel Metadata Utility-Tool dient zum Generieren von Dienstmodellcode anhand von Metadatendokumenten und von Metadatendokumenten anhand von Dienstmodellcode.
SvcUtil.exe
Das ServiceModel Metadata Utility-Tool befindet sich im Installationspfad für Windows SDKs: %ProgramFiles%\Microsoft SDKs\Windows\v6.0\Bin.
Funktionen
In der folgenden Tabelle sind die verschiedenen Funktionen dieses Tools aufgeführt sowie die Themen, in denen die entsprechenden Vorgehensweisen beschrieben werden.
Aufgabe | Thema |
---|---|
Generiert Code von ausführenden Diensten oder statischen Metadatendokumenten. | Generieren eines WCF-Clients aus Dienstmetadaten |
Exportiert Metadatendokumente aus kompiliertem Code. | Vorgehensweise: Verwenden von „Svcutil.exe“ zum Exportieren von Metadaten aus kompiliertem Dienstcode |
Überprüft kompilierten Dienstcode. | Vorgehensweise: Verwenden von „Svcutil.exe“ zum Überprüfen von kompiliertem Dienstcode |
Lädt Metadatendokumente aus Diensten herunter, die zurzeit ausgeführt werden. | Vorgehensweise: Verwenden von „Svcutil.exe“ zum Herunterladen von Metadatendokumenten |
Generiert Serialisierungscode. | Vorgehensweise: Verbessern der Startzeit von WCF-Clientanwendungen mit dem XmlSerializer |
Achtung
Svcutil überschreibt vorhandene Dateien auf einem Datenträger, wenn die als Parameter angegebenen Namen identisch sind. Dazu zählen Code-, Konfigurations- oder Metadatendateien. Um dies beim Generieren von Code- und Konfigurationsdateien zu vermeiden, verwenden Sie den Schalter /mergeConfig
.
Die Schalter /r
und /ct
für Verweistypen dienen außerdem zum Generieren von Datenverträgen. Diese Schalter funktionieren nicht, wenn Sie XmlSerializer verwenden.
Timeout
Für das Tool gilt beim Abrufen von Metadaten ein fünfminütiges Timeout. Dieses Timeout gilt nur beim Abrufen von Metadaten über das Netzwerk. Es gilt nicht für die Verarbeitung dieser Metadaten.
Festlegung von Zielversionen
Das Tool unterstützt die Festlegung von Zielversionen nicht. Wenn Sie ein .NET Framework 4-Artefakt mittels svcutil.exe generieren möchten, verwenden Sie svcutil.exe im .NET Framework 4 SDK. Verwenden Sie die ausführbare Datei im .NET 3.5 Framework SDK, um ein .NET Framework 3.5-Artefakt zu generieren.
Zugreifen auf WSDL-Dokumente
Wenn Sie mit Svcutil auf ein WSDL-Dokument zugreifen, das einen Verweis auf einen Sicherheitstokendienst (STS) enthält, führt Svcutil einen WS-MetadataExchange-Aufruf zu STS aus. Der Dienst kann jedoch seine WSDL-Dokumente entweder mithilfe von WS-MetadataExchange oder mithilfe von HTTP GET verfügbar machen. Hat der STS das WSDL-Dokument nur mithilfe von HTTP GET verfügbar gemacht, schlägt daher ein in WinFX geschriebener Client fehl. Für in .NET Framework 3.5 geschriebene Clients versucht Svcutil, den STS WSDL sowohl mithilfe von WS-MetadataExchange als auch von HTTP GET abzurufen.
Verwenden von SvcUtil.exe
Allgemeine Verwendungen
In der folgenden Tabelle sind einige der gängigen Optionen für dieses Tool aufgeführt:
Option | BESCHREIBUNG |
---|---|
/directory:<Verzeichnis> | Das Verzeichnis, in dem die Dateien erstellt werden sollen. Standard: Das aktuelle Verzeichnis. Kurzform: /d . |
/help | Zeigt die Befehlssyntax und Optionen für das Tool an. Kurzform: /? . |
/noLogo | Die Copyright- und die Bannermeldung werden unterdrückt. |
/svcutilConfig:<configFile> | Gibt eine benutzerdefinierte Konfigurationsdatei an, die statt der Datei App.config verwendet werden soll. Dies kann verwendet werden, um system.serviceModel-Erweiterungen zu registrieren, ohne die Konfigurationsdatei des Tools zu ändern. |
/target:<Ausgabetyp> | Gibt die Ausgabe an, die vom Tool generiert werden soll. Gültige Werte sind Code, Metadaten oder xmlSerializer. Kurzform: /t . |
Codeerzeugung
Svcutil.exe kann Code für Dienstverträge, Clients und Datentypen aus Metadatendokumenten generieren. Diese Metadatendokumente können sich in einem permanenten Speicher befinden oder online abgerufen werden. Der Onlineabruf erfolgt gemäß dem WS-Metadata Exchange-Protokoll oder DISCO-Protokoll (weitere Informationen finden Sie im Abschnitt Metadatendownload).
Sie können mit dem Tool SvcUtil.exe Dienst - und Datenverträge auf Grundlage eines vordefinierten WSDL-Dokuments generieren. Verwenden Sie den /serviceContract-Schalter, und geben Sie eine URL oder einen Dateipfad für den Speicherort des WSDL-Dokuments an, an dem es gefunden oder heruntergeladen werden kann. Dadurch werden die im WSDL-Dokument definierten Dienst- und Datenverträge generiert, die zum Implementieren eines kompatiblen Diensts dienen können. Weitere Informationen finden Sie unter Vorgehensweise: Abrufen von Metadaten und Implementieren eines konformen Diensts.
Für einen Dienst mit einem BasicHttpContextbinding-Endpunkt generiert Svcutil.exe stattdessen eine BasicHttpBinding, deren allowCookies
-Attribut auf true
festgelegt ist. Die Cookies werden auf dem Server für den Kontext verwendet. Möchten Sie den Kontext auf dem Client verwalten, wenn der Dienst Cookies verwendet, so können Sie die Konfiguration manuell für die Verwendung einer Kontextbindung ändern.
Achtung
Svcutil.exe generiert den Client auf der Basis der vom Dienst empfangenen WSDL- oder Richtliniendatei. Der Benutzerprinzipalname (UPN) wird generiert durch die Aneinanderreihung von Benutzername, "@" und vollqualifiziertem Domänennamen (FQDN). Für in Active Directory registrierte Benutzer ist dieses Format jedoch nicht gültig, und der vom Tool generierte UPN verursacht einen Fehler bei der Kerberos-Authentifizierung mit der Fehlermeldung "Der Anmeldeversuch ist fehlgeschlagen". Um dieses Problem zu beheben, sollten Sie die von diesem Tool generierte Clientdatei manuell reparieren.
svcutil.exe [/t:code] <metadataDocumentPath>* | <url>* | <epr>
Argument | BESCHREIBUNG |
---|---|
epr |
Der Pfad zu einer XML-Datei, die einen WS-Addressing-EndpointReference für einen Dienstendpunkt enthält, der WS-Metadata Exchange unterstützt. Weitere Informationen finden Sie im Abschnitt Metadatendownload. |
metadataDocumentPath |
Der Pfad zu einem Metadatendokument (wsdl oder xsd), der den in den Code zu importierenden Vertrag enthält (.wsdl, .xsd, .wspolicy oder .wsmex). Svcutil folgt Importen und bezieht eine Remote-URL für Metadaten ein, sofern diese angegeben wird. Wenn Metadatendateien im lokalen Dateisystem verarbeitet werden sollen, müssen Sie alle Dateien in diesem Argument angeben. Auf diese Art können Sie Svcutil in einer Buildumgebung verwenden, in der keine Netzwerkabhängigkeiten möglich sind. Sie können Platzhalter (*.xsd, *.wsdl) für dieses Argument verwenden. |
url |
Die URL zu einem Dienstendpunkt, der Metadaten bereitstellt, oder zu einem Metadatendokument, das online gehostet wird. Weitere Informationen dazu, wie diese Dokumente abgerufen werden, finden Sie im Abschnitt Metadatendownload. |
Option | BESCHREIBUNG |
---|---|
/async | Generiert sowohl synchrone als auch asynchrone Methodensignaturen. Standard: Es werden nur synchrone Methodensignaturen generiert. Kurzform: /a . |
/collectionType:<Typ> | Gibt den Listenauflistungstyp für einen WCF-Client an. Standard: Der Auflistungstyp ist System.Array. Kurzform: /ct . |
/config:<configFile> | Gibt den Dateinamen für die generierte Konfigurationsdatei an. Standard: output.config. |
/dataContractOnly | Generiert nur Code für Datenvertragstypen. Dienstvertragstypen werden nicht generiert. Sie sollten nur lokale Metadatendateien für diese Option angeben. Kurzform: /dconly . |
/enableDataBinding | Implementiert die INotifyPropertyChanged-Schnittstelle für alle Datenvertragstypen, um die Datenbindung zu ermöglichen. Kurzform: /edb . |
/excludeType:<Typ> | Gibt einen vollqualifizierten oder assemblyqualifizierten Namen an, der aus den verwiesenen Vertragstypen ausgeschlossen werden soll. Beim Verwenden dieses Schalters mit /r aus separaten DLLs wird auf den vollständigen Namen der XSD-Klasse verwiesen.Kurzform: /et . |
/importXmlTypes | Konfiguriert den Datenvertragsserialisierer, um Nicht-Datenvertragstypen als IXmlSerializable-Typen zu importieren. |
/internal | Generiert Klassen, die als intern markiert sind. Standard: Generiert nur öffentliche Klassen. Kurzform: /i . |
/language:<Sprache> | Gibt die Programmiersprache an, die zur Codegenerierung verwendet werden soll. Sie können entweder einen in der Datei Machine.config registrierten Sprachnamen oder den vollqualifizierten Namen einer Klasse angeben, der von CodeDomProvider erbt. Werte: c#, cs, csharp, vb, visualbasic, c++, cpp Standard: csharp Kurzform: /l . |
/mergeConfig | Fügt die generierte Konfiguration in eine vorhandene Datei ein, statt die vorhandene Datei zu überschreiben. |
/messageContract | Generiert Nachrichtenvertragstypen. Kurzform: /mc . |
/namespace:<string,string> | Gibt eine Zuordnung von einem WSDL- oder XML-Schema-targetNamespace zu einem CLR-Namespace an. Durch die Verwendung von '*' für den targetNamespace werden alle targetNamespaces ohne eine explizite Zuordnung diesem CLR-Namespace zugeordnet. Um zu gewährleisten, dass der Nachrichtenvertragsname nicht mit dem Vorgangsnamen in Konflikt steht, sollten Sie den Typverweis entweder mit :: angeben oder sicherstellen, dass die Namen einmalig sind.Standard: Wird vom Zielnamespace des Schemadokuments für Datenverträge abgeleitet. Der Standardnamespace wird für alle anderen generierten Typen verwendet. Kurzform: /n . Hinweis: Beim Generieren von Typen für die Verwendung mit XmlSerializer wird nur eine einzelne Namespacezuordnung unterstützt. Alle generierten Typen befinden sich entweder im Standardnamespace oder im durch „*“ angegebenen Namespace. |
/noConfig | Es werden keine Konfigurationsdateien generiert. |
/noStdLib | Verweist nicht auf Standardbibliotheken. Standard: Es wird auf Mscorlib.dll und System.servicemodel.dll verwiesen. |
/out:<Datei> | Gibt den Dateinamen für den generierten Code an. Standard: Wird vom WSDL-Definitionsnamen, WSDL-Dienstnamen oder Zielnamespace eines der Schemas abgeleitet. Kurzform: /o . |
/reference:<Dateipfad> | Verweist auf Typen in der angegebenen Assembly. Beim Generieren von Clients können Sie diese Option verwenden, um Assemblys anzugeben, die unter Umständen die Typen mit den zu importierenden Metadaten enthalten. Sie können mit diesem Schalter keine Nachrichtenverträge oder XmlSerializer-Typen angeben. Wenn auf DateTimeOffset verwiesen wird, wird dieser Typ verwendet, statt einen neuen Typ zu generieren. Wenn die Anwendung mit .NET Framework 3.5 geschrieben wird, verweist „SvcUtil.exe“ automatisch auf DateTimeOffset. Kurzform: /r . |
/serializable | Generiert mit dem Serializable-Attribut markierte Klassen. Kurzform: /s . |
/serviceContract | Generiert nur Code für Dienstverträge. Clientklasse und -konfiguration werden nicht generiert. Kurzform: /sc . |
/serializer:Auto | Wählt das Serialisierungsmodul automatisch aus. Versucht, das Serialisierungsmodul „Datenvertrag“ zu verwenden, und verwendet XmlSerializer, wenn dies fehlschlägt. Kurzform: /ser . |
/serializer:DataContractSerializer | Generiert Datentypen, die den Datenvertragsserialisierer für die Serialisierung und die Deserialisierung verwenden. Kurzform: /ser:DataContractSerializer . |
/serializer:XmlSerializer | Generiert Datentypen, die XmlSerializer für die Serialisierung und die Deserialisierung verwenden. Kurzform: /ser:XmlSerializer . |
/targetClientVersion | Geben Sie an, für welche Version von .NET Framework die Anwendung vorgesehen ist. Gültige Werte sind Version30 und Version35 . Standardwert: Version30 .Kurzform: /tcv .Version30 : Verwenden Sie /tcv:Version30 , wenn Sie Code für Clients generieren, die WinFX verwenden.Version35 : Verwenden Sie /tcv:Version35 , wenn Sie Code für Clients generieren, die .NET Framework 3.5 verwenden. Wenn Sie /tcv:Version35 mit dem Schalter /async verwenden, werden ereignisbasierte und rückruf-/delegatbasierte asynchrone Methoden generiert. Außerdem wird damit Unterstützung für LINQ-aktivierte DataSets und DateTimeOffset aktiviert. |
/wrapped | Steuert, ob besondere Bedingungen für Dokumente im Dokument-Literal-Stil mit eingeschlossenen Parametern verwendet werden. Verwenden Sie im Service Model Metadata Utility-Tool (Svcutil.exe) den Schalter /wrapped, um normale Groß-/Kleinschreibung anzugeben. |
Hinweis
Wenn es sich bei der Dienstbindung um eine vom System bereitgestellte Bindung handelt (weitere Informationen finden Sie unter Vom System bereitgestellte Bindungen) und die ProtectionLevel-Eigenschaft entweder auf None
oder Sign
festgelegt ist, generiert Svcutil eine Konfigurationsdatei mithilfe des <customBinding>-Elements anstatt des erwarteten vom System bereitgestellten Elements. Wenn der Dienst beispielsweise das <wsHttpBinding>
-Element verwendet, für das ProtectionLevel
auf Sign
festgelegt ist, wird im Bindungsabschnitt der generierten Konfiguration <customBinding>
anstatt <wsHttpBinding>
angezeigt. Weitere Informationen zur Schutzebene finden Sie unter Grundlegendes zur Schutzebene.
Metadatenexport
Svcutil.exe kann Metadaten für Dienste, Verträge und Datentypen in kompilierten Assemblys exportieren. Um Metadaten für einen Dienst zu exportieren, müssen Sie den zu exportierenden Dienst mit der /serviceName
-Option angeben. Um alle Datenvertragstypen innerhalb einer Assembly zu exportieren, verwenden Sie die /dataContractOnly
-Option. Standardmäßig werden die Metadaten für alle Dienstverträge in den Eingabeassemblys exportiert.
svcutil.exe [/t:metadata] [/serviceName:<serviceConfigName>] [/dataContractOnly] <assemblyPath>*
Argument | BESCHREIBUNG |
---|---|
assemblyPath |
Gibt den Pfad zu einer Assembly an, die zu exportierende Dienste, Verträge oder Datenvertragstypen enthält. Sie können standardmäßige Befehlszeilenplatzhalter verwenden, um mehrere Dateien anzugeben. |
Option | BESCHREIBUNG |
---|---|
/serviceName:<serviceConfigName> | Gibt den Konfigurationsnamen eines Diensts an, der exportiert werden soll. Bei Verwendung dieser Option muss eine ausführbare Assembly mit einer zugeordneten Konfigurationsdatei als Eingabe übergeben werden. Svcutil.exe durchsucht alle zugeordneten Konfigurationsdateien für die Dienstkonfiguration. Wenn die Konfigurationsdateien Erweiterungstypen enthalten, müssen die Assemblys, die diese Typen enthalten, sich entweder im GAC befinden oder ausdrücklich durch die /reference -Option angegeben werden. |
/reference:<Dateipfad> | Fügt die angegebene Assembly dem Satz von Assemblys hinzu, der zum Auflösen von Typverweisen verwendet wird. Wenn Sie einen Dienst exportieren oder überprüfen, der in der Konfiguration registrierte Drittanbietererweiterungen verwendet (Verhalten, Bindungen und Bindungselemente), können Sie diese Option zum Suchen von Erweiterungsassemblys einsetzen, die sich nicht im GAC befinden. Kurzform: /r . |
/dataContractOnly | Funktioniert nur bei Datenvertragstypen. Dienstverträge werden nicht verarbeitet. Sie sollten nur lokale Metadatendateien für diese Option angeben. Kurzform: /dconly . |
/excludeType:<Typ> | Gibt einen vollqualifizierten oder assemblyqualifizierten Namen eines Typs an, der aus dem Export ausgeschlossen werden soll. Diese Option kann beim Exportieren von Metadaten für einen Dienst oder einen Satz von Dienstverträgen verwendet werden, um Typen aus dem Export auszuschließen. Diese Option kann nicht zusammen mit der /dconly -Option verwendet werden.Wenn Sie eine einzelne Assembly mit mehreren Diensten vorliegen haben und jede Assembly separate Klassen mit dem gleichen XSD-Namen verwendet, sollten Sie den Dienstnamen anstatt des XSD-Klassennamens für diesen Schalter angeben. XSD- oder Datenvertragstypen werden nicht unterstützt. Kurzform: /et . |
Dienstvalidierung
Die Validierung kann nicht zum Erkennen von Fehlern in Dienstimplementierungen verwendet werden, ohne den Dienst zu hosten. Sie müssen die /serviceName
-Option verwenden, um den zu überprüfenden Dienst anzugeben.
svcutil.exe /validate /serviceName:<serviceConfigName> <assemblyPath>*
Argument | BESCHREIBUNG |
---|---|
assemblyPath |
Gibt den Pfad zu einer Assembly an, die zu überprüfende Diensttypen enthält. Die Assembly muss über eine zugeordnete Konfigurationsdatei verfügen, um die Dienstkonfiguration bereitzustellen. Sie können standardmäßige Befehlszeilenplatzhalter verwenden, um mehrere Assemblys anzugeben. |
Option | BESCHREIBUNG |
---|---|
/validate | Überprüft eine durch die /serviceName -Option angegebene Dienstimplementierung. Bei Verwendung dieser Option muss eine ausführbare Assembly mit einer zugeordneten Konfigurationsdatei als Eingabe übergeben werden.Kurzform: /v . |
/serviceName:<serviceConfigName> | Gibt den Konfigurationsnamen eines zu überprüfenden Diensts an. Svcutil.exe durchsucht alle zugeordneten Konfigurationsdateien aller Eingabeassemblys für die Dienstkonfiguration. Wenn die Konfigurationsdateien Erweiterungstypen enthalten, müssen die Assemblys, die diese Typen enthalten, sich entweder im GAC befinden oder ausdrücklich durch die /reference -Option angegeben werden. |
/reference:<Dateipfad> | Fügt die angegebene Assembly dem Satz von Assemblys hinzu, der zum Auflösen von Typverweisen verwendet wird. Wenn Sie einen Dienst exportieren oder überprüfen, der in der Konfiguration registrierte Drittanbietererweiterungen verwendet (Verhalten, Bindungen und Bindungselemente), können Sie diese Option zum Suchen von Erweiterungsassemblys einsetzen, die sich nicht im GAC befinden. Kurzform: /r . |
/dataContractOnly | Funktioniert nur bei Datenvertragstypen. Dienstverträge werden nicht verarbeitet. Sie sollten nur lokale Metadatendateien für diese Option angeben. Kurzform: /dconly . |
/excludeType:<Typ> | Gibt einen vollqualifizierten oder assemblyqualifizierten Namen eines Typs an, der aus der Validierung ausgeschlossen werden soll. Kurzform: /et . |
Metadatendownload
Svcutil.exe kann verwendet werden, um Metadaten aus ausführenden Diensten herunterzuladen und die Metadaten in lokalen Dateien zu speichern. Um Metadaten herunterzuladen, müssen Sie die /t:metadata
-Option angeben. Andernfalls wird Clientcode generiert. Bei HTTP- und HTTPS-URL-Schemas versucht Svcutil.exe, Metadaten mit WS-Metadata Exchange und DISCO abzurufen. Bei allen anderen URL-Schemas verwendet Svcutil.exe nur WS-Metadata Exchange.
Svcutil gibt die folgenden Metadatenanforderungen gleichzeitig aus, um Metadaten abzurufen.
MEX (WS-Transfer)-Anforderung an die angegebene Adresse
MEX-Anforderung an die angegebene Adresse mit angefügtem /mex
DISCO-Anforderung (mit DiscoveryClientProtocol von ASMX) an die angegebene Adresse
Standardmäßig verwendet „Svcutil.exe“ die in der MetadataExchangeBindings-Klasse definierten Bindungen, um MEX-Anforderungen zu stellen. Um die für WS-Metadata Exchange verwendete Bindung zu konfigurieren, müssen Sie einen Clientendpunkt in der Konfiguration definieren, der den IMetadataExchange-Vertrag verwendet. Dies kann entweder in der Konfigurationsdatei von Svcutil.exe oder in einer anderen Konfigurationsdatei, die mit der /svcutilConfig
-Option angegeben wird, definiert werden.
svcutil.exe /t:metadata <url>* | <epr>
Argument | BESCHREIBUNG |
---|---|
url |
Die URL zu einem Dienstendpunkt, der Metadaten bereitstellt, oder zu einem Metadatendokument, das online gehostet wird. |
epr |
Der Pfad zu einer XML-Datei, die einen WS-Addressing-EndpointReference für einen Dienstendpunkt enthält, der WS-Metadata Exchange unterstützt. |
XmlSerializer-Typgenerierung
Dienste und Clientanwendungen, die Datentypen verwenden, die mit dem XmlSerializer serialisiert werden können, generieren und kompilieren für diese Datentypen während der Laufzeit Code, was zu einem verlangsamten Start führen kann.
Hinweis
Vorab generierter Serialisierungscode kann nur in Clientanwendungen verwendet werden und nicht in Diensten.
Svcutil.exe kann den erforderlichen C#-Serialisierungscode aus den kompilierten Assemblys für die Anwendung generieren, um damit die Startleistung für diese Anwendungen zu verbessern. Weitere Informationen finden Sie unter Vorgehensweise: Verbessern der Startzeit von WCF-Clientanwendungen mit dem XmlSerializer.
Hinweis
Svcutil.exe generiert nur Code für Typen, die von Dienstverträgen, die in der Eingabeassemblys gefunden werden, verwendet werden.
svcutil.exe /t:xmlSerializer <assemblyPath>*
Argument | BESCHREIBUNG |
---|---|
assemblyPath |
Gibt den Pfad zu einer Assembly an, die Dienstvertragstypen enthält. Serialisierungstypen werden für alle serialisierbaren XML-Typen in jedem Vertrag generiert. |
Option | BESCHREIBUNG |
---|---|
/reference:<Dateipfad> | Fügt die angegebene Assembly dem Satz von Assemblys hinzu, der zum Auflösen von Typverweisen verwendet wird. Kurzform: /r . |
/excludeType:<Typ> | Gibt einen vollqualifizierten oder assemblyqualifizierten Namen eines Typs an, der aus dem Export oder der Validierung ausgeschlossen werden soll. Kurzform: /et . |
/out:<Datei> | Gibt den Dateinamen für den generierten Code an. Diese Option wird ignoriert, wenn mehrere Assemblys als Eingabe an das Tool übergeben werden. Standard: Wird vom Assemblynamen abgeleitet. Kurzform: /o . |
/UseSerializerForFaults | Gibt an, dass der XmlSerializer für Lektüre und das Schreiben von Fehlern, statt des Standard-DataContractSerializer, verwendet werden soll. |
Beispiele
Der folgende Befehl generiert Clientcode von einem ausgeführten Dienst oder Onlinemetadatendokumenten.
svcutil http://service/metadataEndpoint
Der folgende Befehl generiert Clientcode aus lokalen Metadatendokumenten.
svcutil *.wsdl *.xsd /language:C#
Der folgende Befehl generiert Datenvertragstypen in Visual Basic aus lokalen Schemadokumenten.
svcutil /dconly *.xsd /language:VB
Der folgende Befehl lädt Metadatendokumente aus Diensten herunter, die zurzeit ausgeführt werden.
svcutil /t:metadata http://service/metadataEndpoint
Der folgende Befehl generiert Metadatendokumente für Dienstverträge und zugeordnete Typen in einer Assembly.
svcutil myAssembly.dll
Der folgende Befehl generiert Metadatendokumente für einen Dienst und alle zugeordneten Dienstvertragstypen und Datentypen in einer Assembly.
svcutil myServiceHost.exe /serviceName:myServiceName
Der folgende Befehl generiert Metadatendokumente für Datentypen in einer Assembly.
svcutil myServiceHost.exe /dconly
Der folgende Befehl überprüft Diensthosting.
svcutil /validate /serviceName:myServiceName myServiceHost.exe
Der folgende Befehl generiert Serialisierungstypen für XmlSerializer-Typen, die von Dienstverträgen in der Assembly verwendet werden.
svcutil /t:xmlserializer myContractLibrary.exe
Maximale Anzahl von Nametable-Zeichen
Wenn Sie mithilfe von svcutil.exe" die Metadaten für einen Dienst generieren, wird ggf. folgende Meldung angezeigt:
Fehler: Aus http://localhost:8000/somesservice/mex
können keine Metadaten abgerufen werden. Die maximale Anzahl von Nametable-Zeichen (16384) wurde beim Lesen von XML-Daten überschritten. Die Nametable ist eine Datenstruktur, in der bei der XML-Verarbeitung gefundene Zeichenfolgen gespeichert werden - lange XML-Dokumente mit sich nicht wiederholenden Elementnamen, Attributnamen und Attributwerten können zum Überschreiten dieses Kontingents führen. Dieses Kontingent kann durch Ändern der MaxNameTableCharCount-Eigenschaft des beim Erstellen des XML-Readers verwendeten XmlDictionaryReaderQuotas-Objekts erhöht werden.
Dieser Fehler kann durch einen Dienst verursacht werden, der eine große WSDL-Datei zurückgibt, wenn Sie die Metadaten des Diensts anfordern. Das Problem ist, dass das Zeichenkontingent für das Tool "svcutil.exe" überschritten wurde. Dieser Wert wird festgelegt, um DoS (Denial-of-Service)-Angriffe zu verhindern. Sie können dieses Kontingent erhöhen, indem Sie die folgende Konfigurationsdatei für "svcutil.exe" angeben.
Die folgende Konfigurationsdatei veranschaulicht, wie die Readerkontingente für "svcutil.exe" festgelegt werden.
<?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>
Erstellen Sie eine neue Datei namens "svcutil.exe.config", und kopieren Sie den XML-Beispielcode in diese Datei. Fügen Sie die Datei dann in das gleiche Verzeichnis wie "svcutil.exe" ein. Bei der nächsten Ausführung von "svcutil.exe" werden die neuen Einstellungen abgerufen.
Sicherheitsaspekte
Sie sollten die entsprechende Zugriffssteuerungsliste verwenden, um den Installationsordner von "Svcutil.exe", "Svcutil.config" und Dateien, auf die /svcutilConfig
verweist, zu schützen. Dies kann verhindern, dass bösartige Erweiterungen registriert und ausgeführt werden.
Um außerdem weitere Sicherheitsrisiken auszuschließen, sollten Sie dem System nur vertrauenswürdige Erweiterungen hinzufügen und nur vertrauenswürdige Codeanbieter mit „Svcutil.exe“ verwenden.
Und schließlich sollten Sie das Tool nicht in der mittleren Ebene Ihrer Anwendung einsetzen, da dies einen Denial-of-Service beim aktuellen Vorgang zur Folge haben kann.