Operations and Calls

  1. Do not treat one-way calls as asynchronous calls.

  2. Do not treat one-way calls as concurrent calls.

  3. Expect exceptions from a one-way operation.

  4. Enable reliability even on one-way calls. Use of ordered delivery is optional for one-way calls.

  5. Avoid one-way operations on a sessionful service. If used, make it the terminating operation:

    [ServiceContract(SessionMode = SessionMode.Required)]
    interface IMyContract
    {
       [OperationContract]
       void MyMethod1(  );
    
       [OperationContract(IsOneWay = true,IsInitiating = false,IsTerminating =
    true)]
       void MyMethod2(  );
    }
  6. Name the callback contract on the service side after the service contract name, suffixed by Callback:

    interface IMyContractCallback
    {...}
    [ServiceContract(CallbackContract = typeof(IMyContractCallback))]
    interface IMyContract
    {...}
  7. Strive to mark callback operations as one-way.

  8. Use callback contracts for callbacks only.

  9. Avoid mixing regular callbacks and events on the same callback contract.

  10. Event operations should be well designed:

    1. void return type

    2. No out-parameters

    3. Marked as one-way operations

  11. Avoid using raw callback contracts for event management, and prefer using the publish-subscribe framework.

  12. Always provide explicit methods for callback setup and teardown:

    [ServiceContract(CallbackContract = typeof(IMyContractCallback))]
    interface IMyContract
    {
       [OperationContract]
       void DoSomething(  );
    
       [OperationContract]
       void Connect(  );
    
       [OperationContract]
       void Disconnect(  );
    }
    interface IMyContractCallback
    {...}
  13. Use the type-safe DuplexClientBase<T,C> ...

Get Programming WCF Services, 2nd 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.