Compatibilità con la funzionalità di trust parzialePartial Trust Feature Compatibility

Windows Communication Foundation (WCF) supporta un sottoinsieme limitato delle funzionalità durante l'esecuzione in un ambiente parzialmente attendibile.Windows Communication Foundation (WCF) supports a limited subset of functionality when running in a partially-trusted environment. Le funzionalità supportate in un contesto parzialmente attendibile sono progettate sulla base di uno specifico set di scenari, come descritto nell'argomento Supported Deployment Scenarios .The features supported in partial trust are designed around a specific set of scenarios as described in the Supported Deployment Scenarios topic.

Requisiti di autorizzazione minimiMinimum Permission Requirements

WCF supporta un sottoinsieme di funzionalità nelle applicazioni eseguite con uno dei set di autorizzazioni denominati standard seguenti:WCF supports a subset of features in applications running under either of the following standard named permission sets:

  • Autorizzazioni Attendibilità mediaMedium Trust permissions

  • Autorizzazioni Area InternetInternet Zone permissions

Tentativo di utilizzare WCF in applicazioni parzialmente attendibili con le autorizzazioni più restrittive può generare eccezioni di sicurezza in fase di esecuzione.Attempting to use WCF in partially-trusted applications with more restrictive permissions may result in security exceptions at runtime.

ContrattiContracts

Se eseguiti in ambiente parzialmente attendibile, i contratti sono soggetti alle restrizioni seguenti:Contracts are subject to the following restrictions when running under partial trust:

  • La classe del servizio che implementa l'interfaccia [ServiceContract] deve essere public e presentare un costruttore public .The service class that implements the [ServiceContract] interface must be public and have a public constructor. Se definisce metodi [OperationContract] , questi devono essere public.If it defines [OperationContract] methods, these must be public. Se invece implementa un'interfaccia [ServiceContract] , le implementazioni dei metodi possono essere esplicite o private, purché l'interfaccia [ServiceContract] sia public.If it instead implements a [ServiceContract] interface, those method implementations can be explicit or private, provided that the [ServiceContract] interface is public.

  • Quando si utilizza l'attributo [ServiceKnownType] , il metodo specificato deve essere public.When using the [ServiceKnownType] attribute, the method specified must be public.

  • Le classi[MessageContract] e i relativi membri possono essere public.[MessageContract] classes and their members can be public. Se la classe [MessageContract] viene definita nell'assembly dell'applicazione, può essere internal e disporre di membri internal .If the [MessageContract] class is defined in the application assembly it can be internal and have internal members.

Associazioni fornite dal sistemaSystem-Provided Bindings

Le classi BasicHttpBinding e WebHttpBinding sono completamente supportate in un ambiente di trust parziale.The BasicHttpBinding and WebHttpBinding are fully supported in a partial trust environment. La classe WSHttpBinding è supportata solo per la modalità di sicurezza trasporto.The WSHttpBinding is supported for Transport security mode only.

Le associazioni che utilizzano trasporti diversi da HTTP, quali NetTcpBinding, NetNamedPipeBindingo NetMsmqBinding, non sono supportate in un ambiente di trust parziale.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.

Associazioni personalizzateCustom Bindings

Le associazioni personalizzate possono essere create e utilizzate in ambiente parzialmente attendibile, ma devono rispettare le restrizioni specificate in questa sezione.Custom bindings can be created and used in a partial trust environment, but must follow the restrictions specified in this section.

TrasportiTransports

Gli unici elementi di associazione di trasporto consentiti sono HttpTransportBindingElement e HttpsTransportBindingElement.The only allowed transport binding elements are HttpTransportBindingElement and HttpsTransportBindingElement.

CodificatoriEncoders

Sono consentiti i codificatori seguenti:The following encoders are allowed:

Non sono supportati codificatori MTOM (Message Transmission Optimization Mechanism).The Message Transmission Optimization Mechanism (MTOM) encoders are not supported.

SicurezzaSecurity

Le applicazioni parzialmente attendibile possono utilizzare le funzionalità di sicurezza del trasporto WCF per proteggere la comunicazione.Partially-trusted applications can use WCF's transport-level security features for securing their communication. La sicurezza a livello di messaggio non è supportata.Message-level security is not supported. La configurazione di un'associazione per l'utilizzo della sicurezza a livello di messaggio genera un'eccezione in fase di esecuzione.Configuring a binding to use message-level security results in an exception at runtime.

Associazioni non supportateUnsupported Bindings

Le associazioni che utilizzano messaggistica affidabile, transazioni o sicurezza a livello di messaggio non sono supportate.Bindings that use reliable messaging, transactions, or message-level security are not supported.

SerializzazioneSerialization

Entrambe le classi DataContractSerializer e XmlSerializer sono supportate in un ambiente di trust parziale.Both the DataContractSerializer and the XmlSerializer are supported in a partial trust environment. Tuttavia, l'utilizzo di DataContractSerializer è soggetto alle condizioni seguenti:However, use of the DataContractSerializer is subject to the following conditions:

  • Tutti i tipi [DataContract] serializzabili devono essere public.All serializable [DataContract] types must be public.

  • Tutti i campi [DataMember] o le proprietà in un tipo [DataContract] devono essere pubblici e di lettura/scrittura.All serializable [DataMember] fields or properties in a [DataContract] type must be public and read/write. La serializzazione e deserializzazione di readonly campi non è supportato durante l'esecuzione di WCF in un'applicazione parzialmente attendibile.The serialization and deserialization of readonly fields is not supported when running WCF in a partially-trusted application.

  • Il modello di programmazione [Serializable]/ISerializable non è supportato in ambiente parzialmente attendibile.The [Serializable]/ISerializable programming model is not supported in a partial trust environment.

  • I tipi noti devono essere specificati nel codice o nella configurazione a livello di computer (machine.config).Known types must be specified in code or machine-level configuration (machine.config). I tipi noti non possono essere specificati nella configurazione a livello di applicazione per motivi di sicurezza.Known types cannot be specified in application-level configuration for security reasons.

  • I tipi che implementano IObjectReference generano un'eccezione in un ambiente parzialmente attendibile.Types that implement IObjectReference throw an exception in a partially-trusted environment.

Per altre informazioni sulla sicurezza quando si usa T:System.Runtime.Serialization.DataContractSerializer in modo sicuro in un'applicazione in ambiente parzialmente attendibile, vedere la sezione sulla serializzazione in DataContractSerializer .See the Serialization section in Partial Trust Best Practices for more information about security when using DataContractSerializer safely in a partially-trusted application.

Tipi di raccoltaCollection Types

Alcuni tipi di raccolta implementano sia IEnumerable<T> che IEnumerable.Some collection types implement both IEnumerable<T> and IEnumerable. Gli esempi includono tipi che implementano ICollection<T>.Examples include types that implement ICollection<T>. Tali tipi possono implementare un'implementazione public di GetEnumerator()e un'implementazione esplicita di GetEnumerator().Such types can implement a public implementation of GetEnumerator(), and an explicit implementation of GetEnumerator(). In questo caso, DataContractSerializer richiama l'implementazione public di GetEnumerator()e non l'implementazione esplicita di GetEnumerator().In this case, DataContractSerializer invokes the public implementation of GetEnumerator(), and not the explicit implementation of GetEnumerator(). Se nessuna delle implementazioni di GetEnumerator() è public e tutte sono implementazioni esplicite, DataContractSerializer richiama IEnumerable.GetEnumerator().If none of the GetEnumerator() implementations are public and all are explicit implementations, then DataContractSerializer invokes IEnumerable.GetEnumerator().

Per i tipi di raccolta quando WCF è in esecuzione in un ambiente parzialmente attendibile, se nessuno del GetEnumerator() sono implementazioni public, o nessuno di essi sono implementazioni esplicite dell'interfaccia, quindi viene generata un'eccezione di sicurezza.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

Molti tipi di raccolte .NET Framework come List<T>, ArrayList, Dictionary<TKey,TValue> e Hashtable non sono supportati da NetDataContractSerializer in ambiente parzialmente attendibile.Many .NET Framework collection types such as List<T>, ArrayList, Dictionary<TKey,TValue> and Hashtable are not supported by the NetDataContractSerializer in partial trust. Per questi tipi è impostato l'attributo [Serializable] e, come indicato in precedenza nella sezione sulla serializzazione, questo attributo non è supportato in ambiente parzialmente attendibile.These types have the [Serializable] attribute set, and as stated previously in the Serialization section, this attribute is not supported in partial trust. DataContractSerializer considera le raccolte in modo particolare ed è pertanto in grado di ignorare questa restrizione, al contrario di NetDataContractSerializer che non dispone di un meccanismo di questo tipo.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.

Il tipo DateTimeOffset non è supportato da NetDataContractSerializer in ambiente parzialmente attendibile.The DateTimeOffset type is not supported by the NetDataContractSerializer in partial trust.

Se l'esecuzione avviene in ambiente parzialmente attendibile, non è possibile utilizzare un surrogato con NetDataContractSerializer (tramite il meccanismo SurrogateSelector ).A surrogate cannot be used with the NetDataContractSerializer (using the SurrogateSelector mechanism) when running in partial trust. Si noti che questa restrizione si applica all'utilizzo di un surrogato, non alla relativa serializzazione.Note that this restriction applies to using a surrogate, not to serializing it.

Abilitazione dell'esecuzione dei comportamenti comuniEnabling Common Behaviors to Run

Comportamenti del servizio o dell'endpoint non contrassegnati con il AllowPartiallyTrustedCallersAttribute attributo (APTCA) aggiunti al <commonBehaviors > sezione di un file di configurazione non vengono eseguiti quando l'applicazione in esecuzione in una relazione di trust parziale In questo caso, viene generata alcuna eccezione e ambiente.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. Per imporre l'esecuzione di comportamenti comuni, è necessario eseguire una delle operazioni seguenti:To enforce the running of common behaviors, you must do one of the following options:

  • Contrassegnare il comportamento comune con l'attributo AllowPartiallyTrustedCallersAttribute in modo tale che questo possa essere eseguito se distribuito come applicazione parzialmente attendibile.Mark your common behavior with the AllowPartiallyTrustedCallersAttribute attribute so that it can run when deployed as a partial trust application. Si noti che una voce di registro può essere impostata nel computer per impedire l'esecuzione delle assembly APTCA.Note that a registry entry can be set on the computer to prevent APTCA-marked assemblies from running. ..

  • Verificare che, se l'applicazione viene distribuita come completamente attendibile, gli utenti non possano modificare le impostazioni di sicurezza per l'accesso al codice per eseguire l'applicazione in ambiente parzialmente attendibile.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. In tal caso, il comportamento non viene eseguito e non viene generata alcuna eccezione.If they can do so, the behavior does not run and no exception is thrown. A tale scopo, vedere il levelfinal tramite Caspol.exe (strumento di criteri di sicurezza di accesso di codice).To ensure this, see the levelfinal option using Caspol.exe (Code Access Security Policy Tool).

Per un esempio di un comportamento comune, vedere procedura: blocco all'endpoint nell'organizzazione.For an example of a common behavior, see How to: Lock Down Endpoints in the Enterprise.

ConfigurazioneConfiguration

Con un'unica eccezione, codice parzialmente attendibile può caricare solo le sezioni di configurazione WCF locale app.config file.With one exception, partially-trusted code can only load WCF configuration sections in the local app.config file. Per caricare sezioni di configurazione WCF che fanno riferimento a sezioni WCF in Machine. config o in una radice del file Web. config è necessario ConfigurationPermission (Unrestricted).To load WCF configuration sections that reference WCF sections in machine.config or in a root web.config file requires ConfigurationPermission(Unrestricted). Senza questa autorizzazione, i riferimenti a WCF le sezioni di configurazione (comportamenti, associazioni) di fuori di file di configurazione locale generano un'eccezione quando viene caricata la configurazione.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.

L'unica eccezione è data dalla configurazione del tipo noto per la serializzazione, come descritto nella sezione sulla serializzazione di questo argomento.The one exception is known-type configuration for serialization, as described in the Serialization section of this topic.

Importante

Le estensioni di configurazione sono supportate solo quando in esecuzione sotto Attendibilità totale.Configuration extensions are only supported when running under Full Trust.

DiagnosticaDiagnostics

Registrazione eventiEvent Logging

In ambiente parzialmente attendibile la registrazione eventi limitata è supportata.Limited event logging is supported under partial trust. Solo gli errori relativi all'attivazione del servizio e alla registrazione dei messaggi/traccia vengono registrati nel registro eventi.Only service activation faults and tracing/message logging failures are logged to the Event Log. Per evitare che venga scritto un numero eccessivo di messaggi nel registro eventi, il numero massimo di eventi registrabili da un processo è stato impostato su 5.The maximum number of events that can be logged by a process is 5, to avoid writing excessive messages to the Event Log.

Registrazione messaggiMessage Logging

La registrazione dei messaggi non funziona quando WCF viene eseguito in un ambiente parzialmente attendibile.Message logging does not work when WCF is run in a partial trust environment. In un trust parziale, l'attivazione del servizio ha esito positivo ma non viene registrato alcun messaggio.If enabled under partial trust, it does not fail service activation, but no message is logged.

TracciaTracing

La funzionalità di traccia con restrizioni è disponibile quando l'applicazione viene eseguita in un ambiente di trust parziale.Restricted tracing functionality is available when running in a partial trust environment. Nell'elemento <listeners> del file di configurazione, i soli tipi che è possibile aggiungere sono TextWriterTraceListener e il nuovo EventSchemaTraceListener.In the <listeners> element in the configuration file, the only types that you can add are TextWriterTraceListener and the new EventSchemaTraceListener. L'utilizzo della classe XmlWriterTraceListener standard può generare log incompleti o non corretti.Use of the standard XmlWriterTraceListener may result in incomplete or incorrect logs.

Le origini di traccia supportate sono:Supported trace sources are:

Le origini di traccia seguenti non sono supportate:The following trace sources are not supported:

I membri seguenti dell'enumerazione TraceOptions non dovrebbero essere specificati:The following members of the TraceOptions enumeration should not be specified:

Quando si utilizza la traccia in un ambiente di trust parziale, assicurare che l'applicazione disponga di autorizzazioni sufficienti per archiviare l'output del listener di traccia.When using tracing in a partial trust environment, ensure that the application has sufficient permissions to store the output of the trace listener. Ad esempio, quando si utilizza TextWriterTraceListener per scrivere output di traccia in un file di testo, assicurare che l'applicazione disponga dell'autorizzazione FileIOPermission necessaria per scrivere correttamente nel file di traccia.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.

Nota

Per non sovraccaricare i file di traccia con errori duplicati, WCF disabilita la traccia della risorsa o dell'azione dopo il primo errore di sicurezza.To avoid flooding the trace files with duplicate errors, WCF disables tracing of the resource or action after the first security failure. Viene generata una traccia di eccezione per ogni accesso alla risorsa non riuscito, la prima volta che viene eseguito il tentativo di accedere alla risorsa o eseguire l'azione.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.

Host servizio WCFWCF Service Host

Host servizio WCF non supporta l'attendibilità parziale.WCF service host does not support partial trust. Se si desidera utilizzare un servizio WCF in attendibilità parziale, non utilizzare il modello di progetto libreria di servizi WCF in Visual Studio per compilare il servizio.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. Al contrario, creare un nuovo sito Web in Visual Studio scegliendo il modello di sito Web servizio WCF, che possa ospitare il servizio in un server Web in cui è supportato l'attendibilità parziale di WCF.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.

Altre limitazioniOther Limitations

WCF è generalmente soggetto alle considerazioni di sicurezza imposte dall'applicazione host.WCF is generally limited to the security considerations imposed upon it by the hosting application. Ad esempio, se WCF è ospitato in un'applicazione Browser XAML (XBAP), è soggetto alle limitazioni XBAP, come descritto in Windows Presentation Foundation Partial Trust Security.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.

Se indigo2 viene eseguito in ambiente parzialmente attendibile, le funzionalità aggiuntive seguenti non vengono abilitate:The following additional features are not enabled when running indigo2 in a partial trust environment:

  • Strumentazione gestione Windows (WMI, Windows Management Instrumentation)Windows Management Instrumentation (WMI)

  • La registrazione eventi è abilitata solo parzialmente (vedere la discussione nella sezione Diagnostica ).Event logging is only partially enabled (see discussion in Diagnostics section).

  • Contatori delle prestazioniPerformance counters

Utilizzare le funzionalità di WCF che non sono supportati in un ambiente parzialmente attendibile può comportare eccezioni in fase di esecuzione.Use of WCF features that are not supported in a partial trust environment may result in exceptions at runtime.

Funzionalità non elencateUnlisted Features

Il modo migliore per individuare se un'informazione non è disponibile in modalità di esecuzione in un ambiente di trust parziale è tentare di accedere alla risorsa o di eseguire l'azione all'interno di un blocco try e quindi eseguire il catch dell'errore.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. Per non sovraccaricare i file di traccia con errori duplicati, WCF disabilita la traccia della risorsa o dell'azione dopo il primo errore di sicurezza.To avoid flooding the trace files with duplicate errors, WCF disables tracing of the resource or action after the first security failure. Viene generata una traccia di eccezione per ogni accesso alla risorsa non riuscito, la prima volta che viene eseguito il tentativo di accedere alla risorsa o eseguire l'azione.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.

Vedere ancheSee Also

HttpTransportBindingElement
HttpsTransportBindingElement
TextMessageEncodingBindingElement
WebMessageEncodingBindingElement
Scenari di distribuzione supportatiSupported Deployment Scenarios
Procedure consigliate per l'attendibilità parzialePartial Trust Best Practices