Compatibilità con la funzionalità di trust parziale
Windows Communication Foundation (WCF) supporta un subset limitato di funzionalità durante l'esecuzione in un ambiente parzialmente attendibile. 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 .
Requisiti di autorizzazione minimi
WCF supporta un sottoinsieme di funzionalità in applicazioni in esecuzione con uno dei set di autorizzazioni denominati standard seguenti:
Autorizzazioni Attendibilità media
Autorizzazioni Area Internet
Il tentativo di usare WCF in applicazioni in ambiente parzialmente attendibile con autorizzazioni più restrittive può generare eccezioni di sicurezza in fase di esecuzione.
Contratti
Se eseguiti in ambiente parzialmente attendibile, i contratti sono soggetti alle restrizioni seguenti:
La classe del servizio che implementa l'interfaccia
[ServiceContract]
deve esserepublic
e presentare un costruttorepublic
. Se definisce metodi[OperationContract]
, questi devono esserepublic
. Se invece implementa un'interfaccia[ServiceContract]
, le implementazioni dei metodi possono essere esplicite oprivate
, purché l'interfaccia[ServiceContract]
siapublic
.Quando si utilizza l'attributo
[ServiceKnownType]
, il metodo specificato deve esserepublic
.Le classi
[MessageContract]
e i relativi membri possono esserepublic
. Se la classe[MessageContract]
viene definita nell'assembly dell'applicazione, può essereinternal
e disporre di membriinternal
.
Associazioni fornite dal sistema
Le classi BasicHttpBinding e WebHttpBinding sono completamente supportate in un ambiente di trust parziale. La classe WSHttpBinding è supportata solo per la modalità di sicurezza trasporto.
Le associazioni che utilizzano trasporti diversi da HTTP, quali NetTcpBinding, NetNamedPipeBindingo NetMsmqBinding, non sono supportate in un ambiente di trust parziale.
Associazioni personalizzate
Le associazioni personalizzate possono essere create e utilizzate in ambiente parzialmente attendibile, ma devono rispettare le restrizioni specificate in questa sezione.
Trasporti
Gli unici elementi di associazione di trasporto consentiti sono HttpTransportBindingElement e HttpsTransportBindingElement.
Codificatori
Sono consentiti i codificatori seguenti:
Codificatore di testo (TextMessageEncodingBindingElement).
Codificatore binario (BinaryMessageEncodingBindingElement).
Codificatore di messaggi Web (WebMessageEncodingBindingElement).
Non sono supportati codificatori MTOM (Message Transmission Optimization Mechanism).
Sicurezza
Le applicazioni in ambiente parzialmente attendibile possono usare le funzionalità di sicurezza a livello di trasporto di WCF per proteggere la comunicazione. La sicurezza a livello di messaggio non è supportata. La configurazione di un binding per l'uso della sicurezza a livello di messaggio genera un'eccezione in fase di esecuzione.
Associazioni non supportate
Le associazioni che utilizzano messaggistica affidabile, transazioni o sicurezza a livello di messaggio non sono supportate.
Serializzazione
Entrambe le classi DataContractSerializer e XmlSerializer sono supportate in un ambiente di trust parziale. Tuttavia, l'utilizzo di DataContractSerializer è soggetto alle condizioni seguenti:
Tutti i tipi
[DataContract]
serializzabili devono esserepublic
.Tutti i campi
[DataMember]
o le proprietà in un tipo[DataContract]
devono essere pubblici e di lettura/scrittura. La serializzazione e la deserializzazione di campireadonly
non sono supportate quando WCF viene eseguito in un'applicazione parzialmente attendibile.Il modello di programmazione
[Serializable]
/ISerializable non è supportato in ambiente parzialmente attendibile.I tipi noti devono essere specificati nel codice o nella configurazione a livello di computer (machine.config). I tipi noti non possono essere specificati nella configurazione a livello di applicazione per motivi di sicurezza.
I tipi che implementano IObjectReference generano un'eccezione in un ambiente parzialmente attendibile.
Per altre informazioni sulla sicurezza quando si usa Partial Trust Best Practices in modo sicuro in un'applicazione in ambiente parzialmente attendibile, vedere la sezione sulla serializzazione in DataContractSerializer .
Tipi di raccolta
Alcuni tipi di raccolta implementano sia IEnumerable<T> che IEnumerable. Gli esempi includono tipi che implementano ICollection<T>. Tali tipi possono implementare un'implementazione public
di GetEnumerator()
e un'implementazione esplicita di GetEnumerator()
. In questo caso, DataContractSerializer richiama l'implementazione public
di GetEnumerator()
e non l'implementazione esplicita di GetEnumerator()
. Se nessuna delle implementazioni di GetEnumerator()
è public
e tutte sono implementazioni esplicite, DataContractSerializer richiama IEnumerable.GetEnumerator()
.
Per i tipi di raccolta quando WCF viene eseguito in un ambiente di trust parziale, se nessuna delle implementazioni di GetEnumerator()
è public
né è un'implementazione esplicita dell'interfaccia, viene generata un'eccezione di sicurezza.
NetDataContractSerializer
Molti tipi di raccolte .NET Framework come List<T>, ArrayList, Dictionary<TKey,TValue> e Hashtable non sono supportati da NetDataContractSerializer in ambiente parzialmente attendibile. Per questi tipi è impostato l'attributo [Serializable]
e, come indicato in precedenza nella sezione sulla serializzazione, questo attributo non è supportato in ambiente parzialmente attendibile. 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.
Il tipo DateTimeOffset non è supportato da NetDataContractSerializer in ambiente parzialmente attendibile.
Se l'esecuzione avviene in ambiente parzialmente attendibile, non è possibile utilizzare un surrogato con NetDataContractSerializer (tramite il meccanismo SurrogateSelector ). Si noti che questa restrizione si applica all'utilizzo di un surrogato, non alla relativa serializzazione.
Abilitazione dell'esecuzione dei comportamenti comuni
I comportamenti del servizio o dell'endpoint non contrassegnati con l'attributo AllowPartiallyTrustedCallersAttribute (APTCA) aggiunti alla sezione <commonBehaviors> di un file di configurazione non vengono eseguiti se l'applicazione è in esecuzione in un ambiente parzialmente attendibile. In tali circostanze non viene generata alcuna eccezione. Per imporre l'esecuzione di comportamenti comuni, è necessario eseguire una delle operazioni seguenti:
Contrassegnare il comportamento comune con l'attributo AllowPartiallyTrustedCallersAttribute in modo tale che questo possa essere eseguito se distribuito come applicazione parzialmente attendibile. Si noti che una voce di registro può essere impostata nel computer per impedire l'esecuzione delle assembly APTCA. .
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. In tal caso, il comportamento non viene eseguito e non viene generata alcuna eccezione. Per verificare tali circostanze, vedere l'opzione levelfinal usando Caspol.exe (Strumento Code Access Security Policy).
Per un esempio di comportamento comune, vedere Procedura: Bloccare gli endpoint in Enterprise.
Impostazione
Con una sola eccezione, il codice in ambiente parzialmente attendibile può caricare sezioni di configurazione di WCF solo nel file app.config
locale. Per caricare sezioni di configurazione di WCF che fanno riferimento a sezioni di WCF in machine.config o in un file web.config radice è necessario ConfigurationPermission(Unrestricted). Senza questa autorizzazione, i riferimenti a sezioni di configurazione di WCF (comportamenti, binding) esterni al file di configurazione locale generano un'eccezione al momento del caricamento della configurazione.
L'unica eccezione è data dalla configurazione del tipo noto per la serializzazione, come descritto nella sezione sulla serializzazione di questo argomento.
Importante
Le estensioni di configurazione sono supportate solo quando in esecuzione sotto Attendibilità totale.
Diagnostica
Registrazione eventi
In ambiente parzialmente attendibile la registrazione eventi limitata è supportata. Solo gli errori relativi all'attivazione del servizio e alla registrazione dei messaggi/traccia vengono registrati nel registro eventi. 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.
Registrazione messaggi
La registrazione messaggi non funziona quando WCF viene eseguito in un ambiente di trust parziale. In un trust parziale, l'attivazione del servizio ha esito positivo ma non viene registrato alcun messaggio.
Tracciabilità
La funzionalità di traccia con restrizioni è disponibile quando l'applicazione viene eseguita in un ambiente di trust parziale. Nell'elemento <listeners>
nel file di configurazione, gli unici tipi che è possibile aggiungere sono TextWriterTraceListener e il nuovo EventSchemaTraceListener. L'utilizzo della classe XmlWriterTraceListener standard può generare log incompleti o non corretti.
Le origini di traccia supportate sono:
System.IdentityModel.Claims, System.IdentityModel.Policy, System.IdentityModel.Selectors e System.IdentityModel.Tokens.
Le origini di traccia seguenti non sono supportate:
I membri seguenti dell'enumerazione TraceOptions non dovrebbero essere specificati:
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. 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.
Nota
Per evitare il flooding dei file di traccia con errori duplicati, WCF disabilita la traccia della risorsa o dell'azione dopo il primo errore di sicurezza. 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.
Host servizio WCF
L'host del servizio WCF non supporta l'attendibilità parziale. Se si vuole usare un servizio WCF con attendibilità parziale, non usare il modello Progetto libreria di servizi WCF in Visual Studio per compilare il servizio. Creare invece un nuovo sito Web in Visual Studio, scegliendo il modello Sito Web servizio WCF, che possa ospitare il servizio in un server Web su cui è supportato il trust parziale di WCF.
Altre limitazioni
WCF è generalmente soggetto alle considerazioni di sicurezza imposte dall'applicazione host. Ad esempio, se WCF è ospitato in un'applicazione browser XAML (XBAP, XAML Browser Application), è soggetto alle limitazioni XBAP, come descritto in Sicurezza con attendibilità parziale in Windows Presentation Foundation.
Se indigo2 viene eseguito in ambiente parzialmente attendibile, le funzionalità aggiuntive seguenti non vengono abilitate:
Strumentazione gestione Windows (WMI)
La registrazione eventi è abilitata solo parzialmente (vedere la discussione nella sezione Diagnostica ).
Contatori delle prestazioni
L'uso di funzionalità WCF sono supportate in un ambiente di trust parziale può generare eccezioni in fase di esecuzione.
Funzionalità non elencate
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. Per evitare il flooding dei file di traccia con errori duplicati, WCF disabilita la traccia della risorsa o dell'azione dopo il primo errore di sicurezza. 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.