Operations and Calls
Do not treat one-way calls as asynchronous calls.
Do not treat one-way calls as concurrent calls.
Expect exceptions out of a one-way operation.
Enable reliability even on one-way calls. Use of ordered delivery is optional for one-way calls.
Avoid one-way operations on a sessionful service. If used, make it the terminating operation:
[ServiceContract(SessionMode = SessionMode.
Required)]interface IOrderManager { [OperationContract] void SetCustomerId(int customerId); [OperationContract(IsInitiating = false)] void AddItem(int itemId); [OperationContract(IsInitiating = false)] decimal GetTotal( ); [OperationContract(IsOneWay=true,IsInitiating = false,IsTerminating=true)] void ProcessOrders( ); }Name the callback contract on the service side after the service contract suffixed by
Callback:interface IMyContractCallback {...} [ServiceContract(CallbackContract = typeof(IMyContractCallback))]interface IMyContract {...}Strive to mark callback operations as one-way.
Use callback contracts for callbacks only.
Avoid mixing regular callbacks and events on the same callback contract.
Event operations should be well-designed:
voidreturn typeNo out parameters
Marked as one-way operations
Avoid using raw callback contracts for event management, and prefer using the publish-subscribe framework.
Always provide explicit methods for callback setup and teardown:
[ServiceContract(CallbackContract = typeof(IMyContractCallback))] interface IMyContract { [OperationContract] void DoSomething( ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access