Queued Services

  1. Always verify that the queue (and a dead-letter queue when applicable) is available before calling the queued service. Use QueuedServiceHelper.VerifyQueue<T>( ) to verify.

  2. Always verify that the queue is available when hosting a queued service (done automatically by ServiceHost<T>).

  3. Except in isolated scenarios, avoid designing the same service to work both queued and nonqueued.

  4. Do enable metadata exchange on a queued service.

  5. The service should participate in the playback transaction.

  6. When participating in the playback transaction, avoid lengthy processing in the queued service.

  7. Avoid sessionful queued services.

  8. When using a singleton queued service, use a volatile resource manager to manage the singleton state.

  9. When using a per-call queued service, do explicitly configure the contract and the service to be per-call and sessionless:

    [ServiceContract(SessionMode = SessionMode.NotAllowed)]
    interface IMyContract
    {...}
    
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
    class MyService : IMyContract
    {...}
  10. Always explicitly set contracts on a queued singleton to disallow sessions:

    [ServiceContract(SessionMode = SessionMode.NotAllowed)]
    interface IMyContract
    {...}
    
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    class MyService : IMyContract
    {...}
  11. The client should call a queued service inside a transaction.

  12. On the client side, do not store a queued service proxy in a member variable.

  13. Avoid relatively short values of TimeToLive, as they negate ...

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.