Funktionskompatibilität für teilweise VertrauenswürdigkeitPartial Trust Feature Compatibility

Windows Communication Foundation (WCF) unterstützt eine eingeschränkte Teilmenge seiner Funktionalität, wenn in einer teilweise vertrauenswürdigen Umgebung ausgeführt wird.Windows Communication Foundation (WCF) supports a limited subset of functionality when running in a partially-trusted environment. Die in einer teilweise vertrauenswürdigen Umgebung unterstützten Funktionen sind, wie im Thema Supported Deployment Scenarios beschrieben, für einen speziellen Satz von Szenarios konzipiert.The features supported in partial trust are designed around a specific set of scenarios as described in the Supported Deployment Scenarios topic.

Minimal erforderliche BerechtigungenMinimum Permission Requirements

WCF unterstützt eine Teilmenge der Funktionen in Anwendungen, die unter einem der folgenden benannten Standardberechtigungssätze ausgeführt:WCF supports a subset of features in applications running under either of the following standard named permission sets:

  • Berechtigungen für mittlere VertrauenswürdigkeitMedium Trust permissions

  • InternetzonenberechtigungenInternet Zone permissions

Versuch WCF in teilweise vertrauenswürdigen Anwendungen mit strikteren Berechtigungen zu verwenden, kann zur Laufzeit zu Sicherheitsausnahmen führen.Attempting to use WCF in partially-trusted applications with more restrictive permissions may result in security exceptions at runtime.

VerträgeContracts

Beim Ausführen in teilweise vertrauenswürdigen Umgebungen unterliegen Verträge den folgenden Einschränkungen:Contracts are subject to the following restrictions when running under partial trust:

  • Die Dienstklasse, durch die die [ServiceContract] -Schnittstelle implementiert wird, muss public sein und über einen public -Konstruktor verfügen.The service class that implements the [ServiceContract] interface must be public and have a public constructor. Werden [OperationContract] -Methoden definiert, müssen diese publicsein.If it defines [OperationContract] methods, these must be public. Wird stattdessen eine [ServiceContract] -Schnittstelle implementiert, können diese Methodenimplementierungen explizit oder privatesein, vorausgesetzt, die [ServiceContract] -Schnittstelle ist public.If it instead implements a [ServiceContract] interface, those method implementations can be explicit or private, provided that the [ServiceContract] interface is public.

  • Bei Verwendung des [ServiceKnownType] -Attributs muss die angegebene Methode publicsein.When using the [ServiceKnownType] attribute, the method specified must be public.

  • [MessageContract] -Klassen und ihre Member können publicsein.[MessageContract] classes and their members can be public. Ist in der Anwendungsassembly die [MessageContract] -Klasse definiert, kann diese internal sein und Member vom Typ internal besitzen.If the [MessageContract] class is defined in the application assembly it can be internal and have internal members.

Vom System bereitgestellte BindungenSystem-Provided Bindings

Sowohl BasicHttpBinding als auch WebHttpBinding werden in einer teilweise vertrauenswürdigen Umgebung vollständig unterstützt.The BasicHttpBinding and WebHttpBinding are fully supported in a partial trust environment. WSHttpBinding wird nur für den Transportsicherheitsmodus unterstützt.The WSHttpBinding is supported for Transport security mode only.

Bindungen, die andere Transportoptionen als HTTP verwenden, etwa NetTcpBinding, NetNamedPipeBindingoder NetMsmqBinding, werden in einer teilweise vertrauenswürdigen Umgebung nicht unterstützt.Bindings that use transports other than HTTP, such as the NetTcpBinding, the NetNamedPipeBinding, or the NetMsmqBinding, are not supported when running in a partial trust environment.

Benutzerdefinierte BindungenCustom Bindings

Benutzerdefinierte Bindungen können in einer teilweise vertrauenswürdigen Umgebung erstellt und verwendet werden. Für sie gelten jedoch die in diesem Abschnitt genannten Einschränkungen.Custom bindings can be created and used in a partial trust environment, but must follow the restrictions specified in this section.

TransportprotokolleTransports

Die einzigen zulässigen Transportbindungselemente sind HttpTransportBindingElement und HttpsTransportBindingElement.The only allowed transport binding elements are HttpTransportBindingElement and HttpsTransportBindingElement.

EncoderEncoders

Folgende Encoder sind zulässig:The following encoders are allowed:

MTOM (Message Transmission Optimization Mechanism)-Encoder werden nicht unterstützt.The Message Transmission Optimization Mechanism (MTOM) encoders are not supported.

SicherheitSecurity

Teilweise vertrauenswürdige Anwendungen können WCF Sicherheit auf Transportebene Funktionen zum Schutz ihrer Kommunikation verwenden.Partially-trusted applications can use WCF's transport-level security features for securing their communication. Sicherheit auf Nachrichtenebene wird nicht unterstützt.Message-level security is not supported. Wird eine Bindung für die Verwendung von Sicherheit auf Nachrichtenebene konfiguriert, löst dies zur Laufzeit eine Ausnahme aus.Configuring a binding to use message-level security results in an exception at runtime.

Nicht unterstützte BindungenUnsupported Bindings

Bindungen, die zuverlässiges Messaging, Transaktionen oder Sicherheit auf Nachrichtenebene verwenden, werden nicht unterstützt.Bindings that use reliable messaging, transactions, or message-level security are not supported.

SerialisierungSerialization

Sowohl DataContractSerializer als auch XmlSerializer werden in einer teilweise vertrauenswürdigen Umgebung unterstützt.Both the DataContractSerializer and the XmlSerializer are supported in a partial trust environment. Allerdings unterliegt die Verwendung von DataContractSerializer den folgenden Bedingungen:However, use of the DataContractSerializer is subject to the following conditions:

  • Alle serialisierbaren [DataContract] -Typen müssen als publicdeklariert sein.All serializable [DataContract] types must be public.

  • Alle serialisierbaren [DataMember] -Felder oder -Eigenschaften in einem [DataContract] -Typ müssen öffentlich sein und Schreib-/Lesezugriff besitzen.All serializable [DataMember] fields or properties in a [DataContract] type must be public and read/write. Die Serialisierung und Deserialisierung von Readonly -Feldern wird nicht unterstützt, wenn WCF in einer teilweise vertrauenswürdigen Anwendung ausgeführt wird.The serialization and deserialization of readonly fields is not supported when running WCF in a partially-trusted application.

  • Das [Serializable]/ISerializable- Programmiermodell wird in einer teilweise vertrauenswürdigen Umgebung nicht unterstützt.The [Serializable]/ISerializable programming model is not supported in a partial trust environment.

  • Bekannte Typen müssen im Code oder in einer Konfiguration auf Computerebene (machine.config) angegeben werden.Known types must be specified in code or machine-level configuration (machine.config). Bekannte Typen können aus Sicherheitsgründen nicht in einer Konfiguration auf Anwendungsebene angegeben werden.Known types cannot be specified in application-level configuration for security reasons.

  • Typen, die IObjectReference implementieren, lösen in einer teilweise-vertrauenswürdigen Umgebung eine Ausnahme aus.Types that implement IObjectReference throw an exception in a partially-trusted environment.

Im Abschnitt zur Serialisierung finden Sie unter Partial Trust Best Practices weitere Informationen zur Sicherheit bei der Verwendung von DataContractSerializer in einer teilweise vertrauenswürdigen Umgebung.See the Serialization section in Partial Trust Best Practices for more information about security when using DataContractSerializer safely in a partially-trusted application.

AuflistungstypenCollection Types

Einige Auflistungstypen implementieren sowohl IEnumerable<T> als auch IEnumerable.Some collection types implement both IEnumerable<T> and IEnumerable. Beispiele dafür sind Typen, die ICollection<T>implementieren.Examples include types that implement ICollection<T>. Solche Typen können eine public -Implementierung von GetEnumerator()und eine explizite Implementierung von GetEnumerator()enthalten.Such types can implement a public implementation of GetEnumerator(), and an explicit implementation of GetEnumerator(). In diesem Fall ruft DataContractSerializer die public -Implementierung von GetEnumerator()auf, und nicht die explizite Implementierung von GetEnumerator().In this case, DataContractSerializer invokes the public implementation of GetEnumerator(), and not the explicit implementation of GetEnumerator(). Wenn keine der GetEnumerator() -Implementierungen public ist, sondern es sich bei allen um explizite Implementierungen handelt, ruft DataContractSerializer IEnumerable.GetEnumerator()auf.If none of the GetEnumerator() implementations are public and all are explicit implementations, then DataContractSerializer invokes IEnumerable.GetEnumerator().

Für Auflistungstypen, wenn WCF in einer teilweise vertrauenswürdigen Umgebung ausgeführt wird, wenn keines der GetEnumerator() Implementierungen sind public, oder keine der beiden Optionen werden explizite schnittstellenimplementierungen, und klicken Sie dann eine Sicherheitsausnahme ausgelöst.For collection types when WCF is running in a partial trust environment, if none of the GetEnumerator() implementations are public, or none of them are explicit interface implementations, then a security exception is thrown.

NetDataContractSerializerNetDataContractSerializer

Viele .NET Framework-Auflistungstypen (wie List<T>, ArrayList, Dictionary<TKey,TValue> und Hashtable ) werden vom NetDataContractSerializer in teilweise vertrauenswürdigen Umgebungen nicht unterstützt.Many .NET Framework collection types such as List<T>, ArrayList, Dictionary<TKey,TValue> and Hashtable are not supported by the NetDataContractSerializer in partial trust. Für diese Typen ist das [Serializable] -Attribut festgelegt. Wie bereits im Abschnitt zur Serialisierung erwähnt, wird dieses Attribut in teilweise vertrauenswürdigen Umgebungen nicht unterstützt.These types have the [Serializable] attribute set, and as stated previously in the Serialization section, this attribute is not supported in partial trust. Der DataContractSerializer behandelt Auflistungen auf besondere Weise, weshalb diese Einschränkung von ihm umgangen werden kann, NetDataContractSerializer verfügt jedoch über keine Möglichkeit zum Umgehen dieser Einschränkung.The DataContractSerializer treats collections in a special way and is thus able to get around this restriction, but the NetDataContractSerializer has no such mechanism to circumvent this restriction.

Der DateTimeOffset -Typ wird vom NetDataContractSerializer in teilweiser vertrauenswürdigen Umgebungen nicht unterstützt.The DateTimeOffset type is not supported by the NetDataContractSerializer in partial trust.

Beim Ausführen in teilweise vertrauenswürdigen Umgebungen kann mit dem NetDataContractSerializer (unter Verwendung des SurrogateSelector -Mechanismus) kein Ersatzzeichen verwendet werden.A surrogate cannot be used with the NetDataContractSerializer (using the SurrogateSelector mechanism) when running in partial trust. Beachten Sie, dass diese Einschränkung für die Verwendung (und nicht für die Serialisierung) eines Ersatzzeichens gilt.Note that this restriction applies to using a surrogate, not to serializing it.

Aktivieren von gemeinsamem Verhalten für die AusführungEnabling Common Behaviors to Run

Dienst- oder Endpunktverhaltensweisen nicht gekennzeichnet werden, mit der AllowPartiallyTrustedCallersAttribute -Attribut (APTCA), die hinzugefügt werden, die <CommonBehaviors > Abschnitt einer Konfigurationsdatei werden nicht ausgeführt, wenn in einer teilweise vertrauenswürdigen Anwendung ausgeführt wird Umgebung und keine Ausnahme wird ausgelöst, wenn in diesem Fall.Service or endpoint behaviors not marked with the AllowPartiallyTrustedCallersAttribute attribute (APTCA) that are added to the <commonBehaviors> section of a configuration file are not run when the application runs in a partial trust environment and no exception is thrown when this occurs. Um die Ausführung gemeinsamer Verhalten zu erzwingen, müssen Sie einen der beiden folgenden Schritte ausführen:To enforce the running of common behaviors, you must do one of the following options:

  • Markieren Sie das gemeinsame Verhalten mit dem AllowPartiallyTrustedCallersAttribute -Attribut, damit es ausgeführt werden kann, wenn es als teilweise vertrauenswürdige Anwendung bereitgestellt wird.Mark your common behavior with the AllowPartiallyTrustedCallersAttribute attribute so that it can run when deployed as a partial trust application. Beachten Sie, dass auf dem Computer ein Registrierungseintrag festgelegt werden kann, um die Ausführung von mit APTCA markierten Assemblys zu verhindern.Note that a registry entry can be set on the computer to prevent APTCA-marked assemblies from running. sein..

  • Wenn die Anwendung als voll vertrauenswürdige Anwendung bereitgestellt wird, stellen Sie sicher, dass die Benutzer die Sicherheitseinstellungen für den Codezugriff nicht dahingehend ändern können, dass die Anwendung in einer teilweise vertrauenswürdigen Umgebung ausgeführt werden kann.Ensure that if the application is deployed as a fully-trusted application that users cannot modify the code-access security settings to run the application in a partial trust environment. Wenn sie dies können, dann wird das Verhalten nicht ausgeführt, und es wird keine Ausnahme ausgelöst.If they can do so, the behavior does not run and no exception is thrown. Um dies sicherzustellen, finden Sie unter der Levelfinal -Option Caspol.exe (Code Access Security Policy-Tool).To ensure this, see the levelfinal option using Caspol.exe (Code Access Security Policy Tool).

Ein Beispiel für ein gemeinsames Verhalten, finden Sie unter Vorgehensweise: Sperren Sie die Endpunkte im Unternehmen.For an example of a common behavior, see How to: Lock Down Endpoints in the Enterprise.

KonfigurationConfiguration

Mit einer Ausnahme kann teilweise vertrauenswürdiger Code nur WCF Konfigurationsabschnitte in der lokalen laden app.config Datei.With one exception, partially-trusted code can only load WCF configuration sections in the local app.config file. Um WCF-Konfigurationsabschnitte zu laden, die WCF-Abschnitte in "Machine.config" oder in einen Stamm verweisen erfordert die Datei "Web.config" Berechtigung ConfigurationPermission(Unrestricted) erforderlich.To load WCF configuration sections that reference WCF sections in machine.config or in a root web.config file requires ConfigurationPermission(Unrestricted). Ohne diese Berechtigung verweist auf WCF-Konfigurationsabschnitte (Verhalten, Bindungen) außerhalb der lokalen Konfigurationsdatei zu einer Ausnahme auf, wenn die Konfiguration geladen wird.Without this permission, references to WCF configuration sections (behaviors, bindings) outside of the local configuration file results in an exception when the configuration is loaded.

Die Ausnahme ist die Konfiguration für die Serialisierung mit bekannten Typen, wie im Serialisierungsabschnitt dieses Themas beschrieben.The one exception is known-type configuration for serialization, as described in the Serialization section of this topic.

Wichtig

Konfigurationserweiterungen werden nur bei der Ausführung im Modus "Voll vertrauenswürdig" unterstützt.Configuration extensions are only supported when running under Full Trust.

DiagnoseDiagnostics

EreignisprotokollierungEvent Logging

In teilweise vertrauenswürdigen Umgebungen wird eine eingeschränkte Ereignisprotokollierung unterstützt.Limited event logging is supported under partial trust. Nur Dienstaktivierungsfehler und Fehler bei der Ablaufverfolgung/Nachrichtenprotokollierung werden im Ereignisprotokoll protokolliert.Only service activation faults and tracing/message logging failures are logged to the Event Log. Pro Prozess können maximal fünf Ereignisse protokolliert werden. Dadurch soll vermieden werden, dass zu viele Meldungen in das Ereignisprotokoll geschrieben werden.The maximum number of events that can be logged by a process is 5, to avoid writing excessive messages to the Event Log.

NachrichtenprotokollierungMessage Logging

Die nachrichtenprotokollierung funktioniert nicht, wenn WCF in einer teilweise vertrauenswürdigen Umgebung ausgeführt wird.Message logging does not work when WCF is run in a partial trust environment. Wird sie in einer teilweise vertrauenswürdigen Umgebung aktiviert, schlägt zwar die Dienstaktivierung nicht fehl, jedoch wird keine Nachricht protokolliert.If enabled under partial trust, it does not fail service activation, but no message is logged.

AblaufverfolgungTracing

In einer teilweise vertrauenswürdigen Umgebung ist nur eine eingeschränkte Funktionalität der Ablaufverfolgung verfügbar.Restricted tracing functionality is available when running in a partial trust environment. Dem <listeners>-Element der Konfigurationsdatei können Sie nur den TextWriterTraceListener-Typ und den neuen EventSchemaTraceListener-Typ hinzufügen.In the <listeners> element in the configuration file, the only types that you can add are TextWriterTraceListener and the new EventSchemaTraceListener. Die Verwendung des Standardtyps XmlWriterTraceListener führt möglicherweise zu unvollständigen oder falschen Protokollen.Use of the standard XmlWriterTraceListener may result in incomplete or incorrect logs.

Unterstützte Ablaufverfolgungsquellen sind:Supported trace sources are:

Folgende Ablaufverfolgungsquellen werden nicht unterstützt:The following trace sources are not supported:

Die folgenden Member der TraceOptions -Enumeration sollten nicht angegeben werden.The following members of the TraceOptions enumeration should not be specified:

Wenn Sie die Ablaufverfolgung in einer teilweise vertrauenswürdigen Umgebung verwenden, dann stellen Sie sicher, dass die Anwendung über ausreichende Berechtigungen verfügt, um die Ausgabe des Ablaufverfolgungslisteners speichern zu können.When using tracing in a partial trust environment, ensure that the application has sufficient permissions to store the output of the trace listener. Wenn Sie z.&#160;B. den TextWriterTraceListener verwenden, um die Ablaufverfolgungsausgabe in eine Textdatei zu schreiben, müssen Sie sicherstellen, dass die Anwendung über die notwendigen FileIOPermission-Berechtigungen verfügt, die für das Schreiben in die Ablaufverfolgungsdatei erforderlich sind.For example, when using the TextWriterTraceListener to write trace output to a text file, ensure that the application has the necessary FileIOPermission required to successfully write to the trace file.

Hinweis

Um die Ablaufverfolgungsdatei überflutet mit doppelten Fehlermeldungen, deaktiviert WCF Ablaufverfolgung der Ressource oder der Aktion nach dem ersten Sicherheitsfehler.To avoid flooding the trace files with duplicate errors, WCF disables tracing of the resource or action after the first security failure. Es gibt eine Ausnahmeablaufverfolgung für jeden fehlgeschlagenen Ressourcenzugriff, und zwar für den ersten Versuch, auf eine Ressource zuzugreifen oder eine Aktion auszuführen.There is one exception trace for each failed resource access, the first time an attempt is made to access the resource or perform the action.

WCF-DiensthostWCF Service Host

WCF-Diensthost unterstützt teilweiser Vertrauenswürdigkeit nicht.WCF service host does not support partial trust. Wenn Sie einen WCF-Dienst unter teilweiser Vertrauenswürdigkeit verwenden möchten, verwenden Sie nicht die WCF-Dienstbibliotheksprojekt-Vorlage in Visual Studio zur Erstellung des Diensts.If you want to use a WCF service in partial trust, do not use the WCF Service Library Project template in Visual Studio to build your service. Erstellen Sie stattdessen eine neue Website in Visual Studio durch Auswählen der WCF-Dienst-Websitevorlage, die der Dienst auf einem Webserver hosten kann auf denen WCF teilweiser Vertrauenswürdigkeit unterstützt wird.Instead, create a new Web site in Visual Studio by choosing the WCF service Web site template, which can host the service in a Web server on which WCF partial trust is supported.

Weitere EinschränkungenOther Limitations

WCF ist im Allgemeinen auf die Sicherheitsaspekte, die von der Hostinganwendung auferlegt beschränkt.WCF is generally limited to the security considerations imposed upon it by the hosting application. Z. B. wenn WCF in einer XAML-Browseranwendung (XBAP) gehostet wird, wird XBAP-Einschränkungen, wie in beschrieben Windows Presentation Foundation-Sicherheit für die teilweise Vertrauenswürdigkeit.For example, if WCF is hosted in a XAML Browser Application (XBAP), it is subject to XBAP limitations, as described in Windows Presentation Foundation Partial Trust Security.

Die folgenden Zusatzfunktionen stehen nicht zur Verfügung, wenn indigo2 in einer teilweise vertrauenswürdigen Umgebung ausgeführt wird:The following additional features are not enabled when running indigo2 in a partial trust environment:

  • Windows Management Instrumentation (WMI)Windows Management Instrumentation (WMI)

  • Die Ereignisprotokollierung ist nur teilweise aktiviert (siehe Diskussion im Abschnitt Diagnose ).Event logging is only partially enabled (see discussion in Diagnostics section).

  • LeistungsindikatorenPerformance counters

Verwenden von WCF-Funktionen, die in einer teilweise vertrauenswürdigen Umgebung nicht unterstützt werden möglicherweise zur Laufzeit Ausnahmen ausgelöst.Use of WCF features that are not supported in a partial trust environment may result in exceptions at runtime.

Nicht aufgeführte FunktionenUnlisted Features

Die beste Möglichkeit festzustellen, ob in einer teilweise vertrauenswürdigen Umgebung auf eine bestimmte Ressource zugegriffen oder eine Aktion ausgeführt werden kann, besteht darin, innerhalb eines try -Blocks auf die Ressource zuzugreifen oder die Aktion auszuführen, und dann einen möglichen Fehlschlag mit catch abzufangen.The best way to discover that a piece of information or action is unavailable when running in a partial trust environment is to try to access the resource or do the action inside of a try block, and then catch the failure. Um die Ablaufverfolgungsdatei überflutet mit doppelten Fehlermeldungen, deaktiviert WCF Ablaufverfolgung der Ressource oder der Aktion nach dem ersten Sicherheitsfehler.To avoid flooding the trace files with duplicate errors, WCF disables tracing of the resource or action after the first security failure. Es gibt eine Ausnahmeablaufverfolgung für jeden fehlgeschlagenen Ressourcenzugriff, und zwar für den ersten Versuch, auf eine Ressource zuzugreifen oder eine Aktion auszuführen.There is one exception trace for each failed resource access, the first time an attempt is made to access the resource or perform the action.

Siehe auchSee Also

HttpTransportBindingElement
HttpsTransportBindingElement
TextMessageEncodingBindingElement
WebMessageEncodingBindingElement
Unterstützte BereitstellungsszenarienSupported Deployment Scenarios
Bewährte Methoden für teilweise VertrauenswürdigkeitPartial Trust Best Practices