Integrace transakčních komponent služeb Enterprise Services
Windows Communication Foundation (WCF) poskytuje automatický mechanismus pro integraci se službami Enterprise (viz Integrace s aplikacemi MODELU COM+). Můžete ale chtít flexibilitu při vývoji služeb, které interně používají transakční komponenty hostované v rámci služeb Enterprise Services. Vzhledem k tomu, že funkce transakcí WCF je založená na System.Transactions infrastruktuře, proces integrace podnikových služeb se službou WCF je stejný jako pro určení interoperability mezi System.Transactions službami a podnikovými službami, jak je uvedeno v interoperabilitě se službami Enterprise Services a transakcemi MODELU COM+.
Aby bylo možné zajistit požadovanou úroveň interoperability mezi příchozí tok transakcí a kontextovou transakcí modelu COM+, musí implementace služby vytvořit TransactionScope instanci a použít odpovídající hodnotu z výčtu EnterpriseServicesInteropOption .
Integrace podnikových služeb s operací služby
Následující kód ukazuje operaci s povoleným tokem transakce, která vytvoří TransactionScope s Full možností. V tomto scénáři platí následující podmínky:
Pokud klient tokuje transakci, operace, včetně volání komponenty Enterprise Services, se provede v rámci rozsahu této transakce. Použití Full zajišťuje, že transakce je synchronizována s System.EnterpriseServices kontextem, což znamená, že okolí transakce pro System.Transactions a System.EnterpriseServices je stejné.
Pokud klient neprovádí transakci, nastavení TransactionScopeRequired pro
true
vytvoření nového oboru transakce pro operaci. Podobně použití zajišťuje Full , že transakce operace je stejná jako transakce použitá uvnitř System.EnterpriseServices kontextu komponenty.
Jakákoli další volání metody také probíhají v rámci rozsahu transakce stejné operace.
[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
}
}
Pokud se mezi aktuální transakcí operace a voláními komponent služeb Enterprise Services nevyžaduje žádná synchronizace, použijte tuto None možnost při vytváření TransactionScope instance instance.
Integrace podnikových služeb s klientem
Následující kód ukazuje klientský kód pomocí TransactionScope instance s Full nastavením. V tomto scénáři se volání operací služby, které podporují tok transakcí, vyskytují v rámci stejné transakce jako volání komponent služeb Enterprise Services.
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();
}