终结点分发器在自己的运行时中对请求消息的处理最终肯定体现在相应操作的执行。如果从服务描述的角度来看,操作是一个OperationDescription对象。而服务端分发运行时中的操作则代表的是一个DispatchOperation对象。作为服务描述的一部分,服务所有终结点的所有操作描述(OperationDescription)在ServiceHost创建过程中被创建。而当ServiceHost被正常开始时,这些操作描述最终转换成分发操作(DispatchOperation)。而DispatchRuntime的Operations属性代表了对应终结点的所有分发操作。
目录:
一、序列化与反序列
二、调用上下文初始化
三、参数的检验
四、服务实例的释放
五、事务
六、操作的执行
七、参数和返回值的释放
八、身份模拟
总结
接下来,我们同样从可扩展的角度来分析DispatchOperation,下面的代码片断列出了所有可供扩展的属性。
class DispatchOperation
2: {
//序列化与反序列化
bool DeserializeRequest { get; set; }
bool SerializeReply { get; set; }
public SynchronizedCollection<FaultContractInfo> FaultContractInfos { get; }
public IDispatchMessageFormatter Formatter { get; set; }
8:
//执行上下文初始化
public SynchronizedCollection<ICallContextInitializer> CallContextInitializers { get; }
11:
//参数检验
public SynchronizedCollection<IParameterInspector> ParameterInspectors { get; }
14:
//服务实例释放
bool ReleaseInstanceAfterCall { get; set; }
bool ReleaseInstanceBeforeCall { get; set; }
18:
//事务
bool TransactionAutoComplete { get; set; }
bool TransactionRequired { get; set; }
22:
//操作执行
public IOperationInvoker Invoker { get; set; }
25:
//参数/返回值的释放
bool AutoDisposeParameters { get; set; }
28:
//身份模拟
public ImpersonationOption Impersonation { get; set; }
31: }