Callbacks
Callback contracts, just like service contracts, can
propagate the service transaction to the callback client. To enable this
you apply the TransactionFlow
attribute, as with a service contract. For example:
interface IMyContractCallback
{
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
void OnCallback();
}
[ServiceContract(CallbackContract = typeof(IMyContractCallback))]
interface IMyContract
{...}
The callback method implementation can use the OperationBehavior
attribute (just like a service operation) and specify whether to require
a transaction scope and auto-completion:
class MyClient : IMyContractCallback
{
[OperationBehavior(TransactionScopeRequired = true)]
public void OnCallback()
{
Transaction transaction = Transaction.Current;
Debug.Assert(transaction != null
);
}
}
Callback Transaction Modes
The callback client can have four modes of configuration: Service, Service/Callback, Callback, and None. These are analogous to the service transaction modes, except the service now plays the client role and the callback plays the service role. For example, to configure the callback for the Service transaction mode (that is, to always use the service’s transaction), follow these steps:
Use a transaction-aware duplex binding with transaction flow enabled.
Set transaction flow to mandatory on the callback operation.
Configure the callback operation to require a transaction scope.
Example 7-30 shows a callback client configured for the Service transaction mode. ...
Get Programming WCF Services, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.