Compatibilità con la funzionalità di trust parziale
Se eseguito in ambiente parzialmente attendibile, Windows Communication Foundation (WCF) supporta un sottoinsieme limitato di funzionalità. Le funzionalità supportate in trust parziale sono progettate sulla base di una specifica serie di scenari, come descritto nell'argomento Scenari di distribuzione supportati.
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 utilizzare WCF in applicazioni in ambiente parzialmente attendibile con autorizzazioni più restrittive può generare eccezioni di protezione 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 protezione trasporto.
Le associazioni che utilizzano trasporti diversi da HTTP, quali NetTcpBinding, NetNamedPipeBinding o 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).
Protezione
Le applicazioni in ambiente parzialmente attendibile possono utilizzare le funzionalità di protezione a livello di trasporto di WCF per proteggere la comunicazione. La protezione a livello di messaggio non è supportata. La configurazione di un'associazione per l'utilizzo della protezione a livello di messaggio genera un'eccezione in fase di esecuzione.
Associazioni non supportate
Le associazioni che utilizzano messaggistica affidabile, transazioni o protezione 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 di sola lettura non sono supportate quando si esegue WCF in un'applicazione in ambiente parzialmente attendibile. - Il modello di programmazione
[Serializable]
/ISerializable non è supportato in ambiente parzialmente attendibile. - I tipi conosciuti devono essere specificati nel codice o nella configurazione a livello di computer (machine.config). I tipi conosciuti 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 ulteriori informazioni sulla protezione quando si utilizza DataContractSerializer in modo sicuro in un'applicazione in ambiente parzialmente attendibile, vedere la sezione sulla serializzazione in Procedure consigliate in ambienti parzialmente attendibili.
Tipi di insieme
Alcuni tipi di insieme implementano sia IEnumerable che IEnumerable. Gli esempi includono tipi che implementano ICollection. 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 insieme quando WCF viene eseguito in un ambiente di trust parziale, se nessuna delle implementazioni di GetEnumerator()
è public né è un'implementazione di interfaccia esplicita, viene generata un'eccezione di protezione.
NetDataContractSerializer
Molti tipi di insiemi .NET Framework come List, ArrayList, Dictionary 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 gli insiemi 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 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. Per ulteriori informazioni, vedere How to: Make APTCA Assemblies Inaccessible to Partially Trusted Code.
- Verificare che, se l'applicazione viene distribuita come completamente attendibile, gli utenti non possano modificare le impostazioni di protezione 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. A tale scopo, vedere l'opzione levelfinal utilizzando Code Access Security Policy Tool (Caspol.exe).
Per un esempio di comportamento comune, vedere Procedura: bloccare gli endpoint nell'organizzazione.
Configurazione
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 principale è necessario ConfigurationPermission(Unrestricted). Senza questa autorizzazione, i riferimenti a sezioni di configurazione di WCF (comportamenti, associazioni) 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.
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.
Traccia
La funzionalità di traccia con restrizioni è disponibile quando l'applicazione viene eseguita in un ambiente di trust parziale. Nell'elemento <listeners> del file di configurazione, i soli 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.ServiceModel
- System.Runtime.Serialization
- System.IdentityModel.Claims, System.IdentityModel.Policy, System.IdentityModel.Selectors e System.IdentityModel.Tokens.
Le origini di traccia seguenti non sono supportate:
- CardSpace
- System.IO.Log
- TransactionBridge
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 disattiva la traccia della risorsa o dell'azione dopo il primo errore di protezione. 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 desidera utilizzare un servizio WCF in attendibilità parziale, non utilizzare il modello Progetto Libreria di servizi WCF in Visual Studio per creare il servizio. Creare invece un nuovo sito Web in Visual Studio scegliendo il modello di sito Web del servizio WCF in grado di ospitare il servizio in un server Web in cui è supportato l'attendibilità parziale di WCF.
Altre limitazioni
WCF è generalmente soggetto alle considerazioni di protezione imposte dall'applicazione host. Ad esempio, se WCF è ospitato in un'applicazione browser XAML (XBAP, XAML Browser Application), è soggetto alle limitazioni XBAP, come descritto nella pagina sulla protezione trust parziale di Windows Presentation Foundation (la pagina potrebbe essere in inglese).
Se indigo2 viene eseguito in ambiente parzialmente attendibile, le funzionalità aggiuntive seguenti non vengono attivate:
- Strumentazione gestione Windows (WMI, Windows Management Instrumentation)
- La registrazione eventi è attivata solo parzialmente (vedere la discussione nella sezione Diagnostica).
- Contatori delle prestazioni
L'utilizzo 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 scoprire che 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 disattiva la traccia della risorsa o dell'azione dopo il primo errore di protezione. 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.
Vedere anche
Riferimenti
HttpTransportBindingElement
HttpsTransportBindingElement
TextMessageEncodingBindingElement
WebMessageEncodingBindingElement
Concetti
Scenari di distribuzione supportati
Procedure consigliate in ambienti parzialmente attendibili