Instance Management
The contract session mode and the service instance mode have a paramount effect on the behavior of the queued calls, the way the calls are played back to the service, and implications on the overall program workflow and allowed assumptions.
Per-Call Queued Services
In the case of a per-call
service, the client has no way of knowing that the calls will eventually end up played to a queued per-call service. All that the client sees is the session mode on the contract. If the SessionMode
on the contract is either SessionMode.Allowed
or SessionMode.NotAllowed
, the queued call (over the NetMsmqBinding
) is considered to be sessionless. All calls to such sessionless endpoints are placed in separate MSMQ messages, where each call on the proxy yields a single separate MSMQ message.
Nontransactional clients
When a client without an ambient transaction calls a sessionless queued endpoint (as in Example 9-11), the MSMQ messages generated for each call are posted to the queue immediately after each call. If the client has an exception, the messages posted up to that point are not rejected and are delivered to the service.
Example 9-11. Nontransactional client of a sessionless queued endpoint
using(TransactionScope scope =
new TransactionScope(TransactionScopeOption.Suppress
))
{
MyContractClient proxy = new MyContractClient( );
proxy.MyMethod( );//Message posts to queue here
proxy.MyMethod( );//Message posts to queue here
proxy.Close( );
}
Transactional clients
With a transactional ...
Get Programming WCF Services 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.