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 essere public e presentare un costruttore public . Se definisce metodi [OperationContract] , questi devono essere public. Se invece implementa un'interfaccia [ServiceContract] , le implementazioni dei metodi possono essere esplicite o private, purché l'interfaccia [ServiceContract] sia public.

  • Quando si utilizza l'attributo [ServiceKnownType] , il metodo specificato deve essere public.

  • Le classi[MessageContract] e i relativi membri possono essere public. Se la classe [MessageContract] viene definita nell'assembly dell'applicazione, può essere internal e disporre di membri internal .

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:

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 essere public.

  • Tutti i campi [DataMember] o le proprietà in un tipo [DataContract] devono essere pubblici e di lettura/scrittura. La serializzazione e la deserializzazione di campi readonly 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 T:System.Runtime.Serialization.DataContractSerializer 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:

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.

Vedi anche