Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Windows Communication Foundation (WCF) offre opzioni altamente flessibili per il controllo del flusso delle transazioni. Le impostazioni del flusso di transazione di un servizio possono essere espresse usando una combinazione di attributi e configurazione.
Impostazioni flusso di transazione
Le impostazioni del flusso di transazione vengono generate per un endpoint di servizio in seguito all'intersezione dei tre valori seguenti:
Attributo TransactionFlowAttribute specificato per ogni metodo nel contratto di servizio.
Proprietà di
TransactionFlowassociazione nell'associazione specifica.Proprietà di
TransactionFlowProtocolassociazione nell'associazione specifica. LaTransactionFlowProtocolproprietà di associazione consente di scegliere tra due diversi protocolli di transazione che è possibile usare per eseguire il flusso di una transazione. Le sezioni seguenti descrivono brevemente ognuna di esse.
protocollo WS-AtomicTransaction
Il protocollo WS-AtomicTransaction (WS-AT) è utile per gli scenari in cui è necessaria l'interoperabilità con stack di protocolli di terze parti.
Protocollo OleTransactions
Il protocollo OleTransactions è utile per gli scenari in cui l'interoperabilità con stack di protocolli di terze parti non è necessaria e il deployer di un servizio sa in anticipo che il servizio protocollo WS-AT è disabilitato localmente o la topologia di rete esistente non favorisce l'utilizzo di WS-AT.
La tabella seguente illustra i diversi tipi di flussi di transazione che possono essere generati usando queste varie combinazioni.
| TransactionFlow vincolante |
Proprietà di associazione TransactionFlow | Protocollo di associazione TransactionFlowProtocol | Tipo di flusso di transazione |
|---|---|---|---|
| Obbligatorio | vero | WS-AT | La transazione deve essere propagata nel formato di WS-AT interoperativo. |
| Obbligatorio | vero | OleTransactions | La transazione deve essere propagata nel formato OleTransactions WCF. |
| Obbligatorio | falso | Non applicabile | Non applicabile perché si tratta di una configurazione non valida. |
| Permesso | vero | WS-AT | La transazione può essere propagata nel formato di WS-AT interoperativo. |
| Permesso | vero | OleTransactions | La transazione può essere propagata nel formato OleTransactions WCF. |
| Permesso | falso | Qualsiasi valore | Una transazione non è fluida. |
| NonConsentito | Qualsiasi valore | Qualsiasi valore | Una transazione non è fluida. |
La tabella seguente riepiloga il risultato dell'elaborazione dei messaggi.
| Messaggio in arrivo | Impostazione TransactionFlow | Intestazione della transazione | Risultato dell'elaborazione dei messaggi |
|---|---|---|---|
| La transazione corrisponde al formato previsto del protocollo | Consentito o obbligatorio |
MustUnderstand è uguale a true. |
Processo |
| Il formato del protocollo previsto per la transazione non corrisponde al formato previsto | Obbligatorio |
MustUnderstand è uguale a false. |
Rifiutato perché è necessaria una transazione |
| Il formato del protocollo previsto per la transazione non corrisponde al formato previsto | Permesso |
MustUnderstand è uguale a false. |
Rifiutato perché l'intestazione non è compresa |
| Transazione con qualsiasi formato di protocollo | NonConsentito |
MustUnderstand è uguale a false. |
Rifiutato perché l'intestazione non è compresa |
| Nessuna transazione | Obbligatorio | Non disponibile | Rifiutato perché è necessaria una transazione |
| Nessuna transazione | Permesso | Non disponibile | Processo |
| Nessuna transazione | NonConsentito | Non disponibile | Processo |
Mentre ogni metodo in un contratto può avere requisiti diversi per il flusso di transazione, l'impostazione del protocollo del flusso di transazione ha come ambito il livello dell'associazione. Ciò significa che tutti i metodi che condividono lo stesso endpoint (e quindi la stessa associazione) condividono anche gli stessi criteri che consentono o richiedono il flusso delle transazioni, nonché lo stesso protocollo di transazione, se applicabile.
Abilitazione del flusso di transazioni a livello di metodo
I requisiti del flusso di transazione non sono sempre gli stessi per tutti i metodi in un contratto di servizio. Wcf fornisce quindi anche un meccanismo basato su attributi per consentire l'espressione delle preferenze del flusso di transazione di ogni metodo. Questo risultato viene ottenuto dall'oggetto TransactionFlowAttribute che specifica il livello in cui un'operazione del servizio accetta un'intestazione di transazione. Se si vuole abilitare il flusso delle transazioni, è necessario contrassegnare i metodi del contratto di servizio con questo attributo. Questo attributo accetta uno dei valori dell'enumerazione TransactionFlowOption , in cui il valore predefinito è NotAllowed. Se viene specificato un valore diverso da NotAllowed, il metodo non deve essere unidirezionale. Uno sviluppatore può usare questo attributo per specificare i requisiti o i vincoli del flusso delle transazioni a livello di metodo in fase di progettazione.
Abilitazione del flusso di transazioni a livello di endpoint
Oltre all'impostazione del flusso di transazione a livello di metodo fornito dall'attributo TransactionFlowAttribute , WCF fornisce un'impostazione a livello di endpoint per il flusso delle transazioni per consentire agli amministratori di controllare il flusso delle transazioni a un livello superiore.
Questo risultato viene ottenuto da TransactionFlowBindingElement, che consente di abilitare o disabilitare il flusso delle transazioni in ingresso nelle impostazioni di associazione di un endpoint, nonché di specificare il formato del protocollo di transazione desiderato per le transazioni in ingresso.
Se l'associazione ha disabilitato il flusso di transazione, ma una delle operazioni su un contratto di servizio richiede una transazione entrante, viene generata un'eccezione di convalida all'avvio del servizio.
La maggior parte delle associazioni permanenti fornite da WCF contiene gli attributi transactionFlow e transactionProtocol consentendo di configurare l'associazione specifica per accettare le transazioni in ingresso. Per altre informazioni sull'impostazione degli elementi di configurazione, vedere <Binding>.
Un amministratore o un deployer può usare il flusso delle transazioni a livello di endpoint per configurare i requisiti o i vincoli del flusso di transazione in fase di distribuzione usando il file di configurazione.
Sicurezza
Per garantire la sicurezza e l'integrità del sistema, è necessario proteggere gli scambi di messaggi durante il flusso delle transazioni tra le applicazioni. Non dovresti trasmettere o divulgare i dettagli delle transazioni a qualsiasi applicazione che non abbia diritto a partecipare alla stessa transazione.
Quando si generano client WCF a servizi Web sconosciuti o non attendibili tramite l'uso dello scambio di metadati, le chiamate alle operazioni su questi servizi Web devono eliminare la transazione corrente, se possibile. Nell'esempio seguente viene illustrato come eseguire questa operazione.
//client code which has an ambient transaction
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
{
// No transaction will flow to this operation
untrustedProxy.Operation1(...);
scope.Complete();
}
//remainder of client code
Inoltre, i servizi devono essere configurati per accettare transazioni in ingresso solo dai client che hanno autenticato e autorizzato. Le transazioni in ingresso devono essere accettate solo se provengono da client altamente attendibili.
Asserzioni delle politiche
WCF usa asserzioni di criteri per controllare il flusso delle transazioni. Le asserzioni di criteri sono disponibili nel documento dei criteri di un servizio, generato aggregando contratti, configurazione e attributi. Il client può ottenere il documento dei criteri del servizio tramite HTTP GET o un WS-MetadataExchange request-reply. I client possono quindi elaborare il documento dei criteri per determinare quali operazioni su un contratto di servizio possono supportare o richiedere il flusso delle transazioni.
Le asserzioni dei criteri del flusso di transazione influiscono sul flusso delle transazioni specificando le intestazioni SOAP che un client deve inviare a un servizio per rappresentare una transazione. Tutte le intestazioni delle transazioni devono essere contrassegnate con MustUnderstand uguale a true. Qualsiasi messaggio con un'intestazione contrassegnata in caso contrario viene rifiutato con un errore SOAP.
In una singola operazione può essere presente una sola asserzione di criteri correlata alle transazioni. I documenti di politica con più asserzioni relative alla transazione in un'operazione sono considerati non validi e vengono rifiutati da WCF. Inoltre, solo un singolo protocollo di transazione può essere presente all'interno di ogni tipo di porta. I documenti dei criteri con operazioni che fanno riferimento a più protocolli di transazione all'interno di un singolo tipo di porta sono considerati non validi e vengono rifiutati dallo strumento utilità metadati ServiceModel (Svcutil.exe). Anche i documenti dei criteri con asserzioni di transazioni presenti nei messaggi di output o nei messaggi di input unidirezionale sono considerati non validi.