Condividi tramite


Compatibilità con la funzionalità di fiducia 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 Fiducia media

  • Autorizzazioni per l'Area Internet

Il tentativo di usare WCF in applicazioni parzialmente attendibili con autorizzazioni più restrittive può comportare eccezioni di sicurezza in fase di esecuzione.

Contratti

I contratti, se eseguiti in un ambiente parzialmente attendibile, 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 a fiducia parziale. La classe WSHttpBinding è supportata solo per la modalità di sicurezza del trasporto.

Le associazioni che utilizzano trasporti diversi da HTTP, quali NetTcpBinding, NetNamedPipeBinding, o NetMsmqBinding, non sono supportate in un ambiente a trust parziale.

Binding personalizzati

I binding personalizzati possono essere creati e utilizzati in un 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'associazione per l'uso della sicurezza a livello di messaggio comporta un'eccezione in fase di esecuzione.

Associazioni non supportate

I binding che utilizzano messaggistica affidabile, transazioni o sicurezza a livello di messaggio non sono supportati.

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 o le proprietà serializzabili in un tipo [DataContract] devono essere pubblici e accessibili in lettura e 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 lanciano un'eccezione in un ambiente con fiducia parziale.

Per ulteriori informazioni sulla sicurezza quando si usa DataContractSerializer in modo sicuro in un'applicazione parzialmente attendibile, vedere la sezione sulla serializzazione in Partial Trust Best Practices.

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 oppure non è 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 ambienti a fiducia parziale. 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 un ambiente a fiducia parziale.

Durante l'esecuzione in un ambiente a fiducia parziale, non si può usare un surrogato con NetDataContractSerializer utilizzando 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:

  • Contrassegna il comportamento comune con l'attributo AllowPartiallyTrustedCallersAttribute per consentire l'esecuzione quando distribuito come applicazione a attendibilità parziale. Si noti che una voce di registro può essere configurata nel computer per impedire l'esecuzione delle assemblee 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 garantire ciò, vedere l'opzione levelfinal utilizzando Caspol.exe (Strumento di politica di sicurezza di accesso al codice).

Per un esempio di comportamento comune, vedere Come proteggere gli endpoint nell'azienda.

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 è supportata la registrazione di eventi limitata. Solo gli errori relativi all'attivazione del servizio e ai fallimenti del tracciamento e della registrazione dei messaggi 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 dei messaggi

La registrazione messaggi non funziona quando WCF viene eseguito in un ambiente di trust parziale. Se abilitato in condizioni di trust parziale, l'attivazione del servizio ha esito positivo ma non viene registrato alcun messaggio.

Tracciamento

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, assicurarsi che l'applicazione disponga dell'autorizzazione FileIOPermission necessaria per scrivere correttamente nel file di traccia.

Nota

Per evitare l'inondazione dei file di traccia con errori duplicati, WCF disabilita il tracciamento della risorsa o dell'azione dopo il primo malfunzionamento 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.

Ospitante del 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 non supportate in un ambiente parzialmente attendibile può causare eccezioni in fase di esecuzione.

Funzionalità non elencate

Il modo migliore per scoprire che un'informazione o un'azione non è disponibile quando si esegue in un ambiente a fiducia parziale è provare a accedere alla risorsa o eseguire l'azione all'interno di un blocco try e quindi gestire l'errore catch. Per evitare l'inondazione dei file di traccia con errori duplicati, WCF disabilita il tracciamento della risorsa o dell'azione dopo il primo malfunzionamento 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