1、不要将单向调用设置为异步调用
2、不要将单向调用设置为并发调用
3、单向操作不应该包含异常
4、为单向调用启用可靠性。对于单向调用而言,使用有序传递属于可选项
5、避免在会话服务中定义单向操作。如果定义了,则应将它定义为终止操作
[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=falting,
IsTerminating=true)]
void ProcessOrders()
}
6、为服务端的回调契约取名时,应使用服务契约名加上Callback后缀:
interfaxe IMyContractCallback
{...}
[ServiceContract(CallbackContract=typeof(
IMyContractCallback))]
interface IMyContract
{...}
7、尽量将回调操作标记为单向
8、只为回调使用回调契约
9、避免在相同的回调契约中将常规的回调与事件混为一谈
10、事件操作的设计应遵循如下规范:
a、void返回类型
b、没有out参数
c、标记为单向操作
11、避免在事件管理中使用原来的回调契约,而应该使用发布-订阅框架
12、避免为回调显式地定义创建(Setup)方法和销毁(Teardown)方法
[ServiceContract(CallbackContract=typeof( IMyContractCallback))]
interface IMyContract
{
[OperationContract]
void DoSomething();
[OperationContract]
void Connect();
[OperationContract]
void Disconnect();
}
interface IMyContractCallback
{...}
13、使用类型安全的DuplexClientBase<T,C>,而不是DuplexClientBase<T>
14、使用类型安全的DuplexChannelFactory<T,C>,而不是DuplexChannelFactory<T>
15、调试在局域网部署基于WSDualHttpBinding绑定的回调时,应该使用CallbackBaseAddressBehav iorAttribute特性,并将CallbackPort设置为0:
[CallbackBaseAddressBehavior(CallbackPort=0)]
class MyClient:IMyContrackBack
{...}