Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows Communication Foundation (WCF) bietet einen automatischen Mechanismus für die Integration in Enterprise-Dienste (siehe Integration mit COM+-Anwendungen). Sie können jedoch die Flexibilität haben, Dienste zu entwickeln, die intern Transaktionskomponenten verwenden, die in Enterprise Services gehostet werden. Da das WCF-Transaktionsfeature auf der System.Transactions Infrastruktur basiert, ist der Prozess für die Integration von Enterprise Services in WCF identisch mit dem für die Angabe der Interoperabilität zwischen System.Transactions und Enterprise Services, wie in Interoperability with Enterprise Services and COM+ Transactions beschrieben.
Um die gewünschte Interoperabilitätsebene zwischen der eingehenden flussierten Transaktion und der COM+-Kontexttransaktion bereitzustellen, muss die Dienstimplementierung eine TransactionScope Instanz erstellen und den entsprechenden Wert aus der EnterpriseServicesInteropOption Enumeration verwenden.
Integrieren von Enterprise-Diensten in einen Dienstvorgang
Der folgende Code veranschaulicht einen Vorgang mit zugelassenem Transaktionsfluss, der einen TransactionScope mit der Full-Option erstellt. Die folgenden Bedingungen gelten in diesem Szenario:
Wenn der Client eine Transaktion steuert, wird der Vorgang, einschließlich des Aufrufs der Enterprise Services-Komponente, im Rahmen dieser Transaktion ausgeführt. Die Verwendung Full stellt sicher, dass die Transaktion mit dem System.EnterpriseServices Kontext synchronisiert wird, was bedeutet, dass die Umgebungstransaktion für System.Transactions und die System.EnterpriseServices gleiche ist.
Wenn der Client keinen Transaktionsfluss ausführt, führt das Setzen von TransactionScopeRequired auf
true
dazu, dass ein neuer Transaktionsbereich für den Vorgang erstellt wird. Ebenso stellt die Verwendung Full sicher, dass die Transaktion des Vorgangs mit der im Kontext der System.EnterpriseServices Komponente verwendeten Transaktion identisch ist.
Alle zusätzlichen Methodenaufrufe treten auch im Rahmen derselben Transaktion auf.
[ServiceContract()]
public interface ICustomerServiceContract
{
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
void UpdateCustomerNameOperation(int customerID, string newCustomerName);
}
[ServiceBehavior(TransactionIsolationLevel = System.Transactions.IsolationLevel.Serializable)]
public class CustomerService : ICustomerServiceContract
{
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void UpdateCustomerNameOperation(int customerID, string newCustomerName)
{
// Create a transaction scope with full ES interop
using (TransactionScope ts = new TransactionScope(
TransactionScopeOption.Required,
new TransactionOptions(),
EnterpriseServicesInteropOption.Full))
{
// Create an Enterprise Services component
// Call UpdateCustomer method on an Enterprise Services
// component
// Call UpdateOtherCustomerData method on an Enterprise
// Services component
ts.Complete();
}
// Do UpdateAdditionalData on an non-Enterprise Services
// component
}
}
Wenn keine Synchronisierung zwischen der aktuellen Transaktion eines Vorgangs und dem Aufrufen von Enterprise Services-Komponenten erforderlich ist, verwenden Sie die None-Option bei der Instanziierung der TransactionScope-Instanz.
Integrieren von Unternehmensdiensten in einen Client
Der folgende Code veranschaulicht Clientcode mithilfe einer TransactionScope Instanz mit der Full Einstellung. In diesem Szenario erfolgen Aufrufe von Dienstvorgängen, die den Transaktionsfluss unterstützen, innerhalb des Bereichs derselben Transaktion wie die Aufrufe von Enterprise Services-Komponenten.
static void Main()
{
// Create a client
CalculatorClient client = new CalculatorClient();
// Create a transaction scope with full ES interop
using (TransactionScope ts = new TransactionScope(
TransactionScopeOption.Required,
new TransactionOptions(),
EnterpriseServicesInteropOption.Full))
{
// Call Add calculator service operation
// Create an Enterprise Services component
// Call UpdateCustomer method on an Enterprise Services
// component
ts.Complete();
}
// Closing the client gracefully closes the connection and
// cleans up resources
client.Close();
}