WCF扩展:行为扩展Behavior Extension
2010-10-27 08:27
459 查看
1 引言
上回说到自定义扩展的第一步,是需要声明行为的类型。也就是通过实现一个行为接口,实现接口中的方法来声明行为的类型。2 附件自定义行为到Operaiton或者是Endpoint
实现自定义的行为,第二步就是将自定义的行为类挂(附加)到一个Operation或者是Endpoint上去。自定义的行为如果是和操作有关,就附加到一个operation上;如果和具体的操作没有关系,就附加到一个endpoint上。
附加到操作需要实现System.ServiceModel.Description.IOperationBehavior接口。如果是附加到endpoint上,需要实现System.ServiceModel.Description.IEndpointBehavior接口。
如果是一个实现System.ServiceModel.Dispatcher.IClientMessageFormatter的对象,功能是序列化传输到服务端的数据。按照定义,这是一个操作相关的功能。(可以参考上一篇的定义WCF扩展:行为扩展Behavior Extension<一>)
3 通知WCF有关自定义行为的信息
实现自定义的行为,最后需要做的就是将这个行为通知WCF。让WCF知道这个行为的存在。有两种方法可以实现通知:代码和配置。4 自定义行为示例
下面让我们来实现一个简单的自定义行为4.1 声明
我们声明一个客户端的消息检查行为类public class MyClientMessageInspector:IClientMessageInspector { #region IClientMessageInspector Members public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply,
object correlationState) { } public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request,
System.ServiceModel.IClientChannel channel) { return null; } #endregion }
4.2 附加
将自定义的message inspector行为附加到客户端的运行时,附加到客户端运行时client runtime的endpoint层面。public class MyClientMessageInspector:IClientMessageInspector,IEndpointBehavior { #region IClientMessageInspector Members public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply,
object correlationState) { } public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request,
System.ServiceModel.IClientChannel channel) { return null; } #endregion #region IEndpointBehavior Members public void AddBindingParameters(ServiceEndpoint endpoint,
System.ServiceModel.Channels.BindingParameterCollection bindingParameters) { } public void ApplyClientBehavior(ServiceEndpoint endpoint,
ClientRuntime clientRuntime) { clientRuntime.MessageInspectors.Add(this); } public void ApplyDispatchBehavior(ServiceEndpoint endpoint,
EndpointDispatcher endpointDispatcher) { } public void Validate(ServiceEndpoint endpoint) { } #endregion }
4.3 通知
有两种方式来通知WCF这个自定义行为。1 代码的方式
因为需要添加到客户端的运行时,所以需要在客户端的代码中添加。public interface IWcfClient { } public class WcfClient:ClientBase,IWcfClient { public WcfClient(string endpointConfigurationName):base(endpointConfigurationName ) { base.Endpoint.Behaviors.Add(new Insfrastructures.MyClientMessageInspector()); } }
就是在构造函数中添加自定义的行为。
2 通过自定义配置节的配置的方式
让我们先定义一个行为扩展配置节的类public class MyBehaviorExtensionElement:BehaviorExtensionElement { public override Type BehaviorType { get { return typeof(MyClientMessageInspector); } } protected override object CreateBehavior() { return new MyClientMessageInspector(); } }
然后再客户端的config文件中添加
1.0" encoding="utf-8" ?> http://localhost:8000/SimpleService/Endpoint" behaviorConfiguration="SimpleServiceEndpointBehavior" binding="customBinding" bindingConfiguration="SimpleServiceBinding" contract="Extensibility.ISimple" name="SimpleService" /> SimpleServiceEndpointBehavior"> SimpleServiceBinding"> myMessageInspector" type="Insfrastructures .MyBehaviorExtensionElement, Insfrastructures .Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
在 配置节添加行为扩展的配置节。然后在endpoint的behavior配置节中指定使用扩展中的行为。
Technorati 标签: WCF,EXtension,BEhavior
相关文章推荐
- WCF中使用扩展行为来验证连接的用户
- 通过“四大行为”对WCF的扩展[实例篇]
- 如何通过扩展WCF来定制和扩展WCF行为
- 利用定制行为扩展WCF之-利用MessageInsepctor behaviourExtension扩展WCF行为(自定义消息头)
- 使用IParameterInspector, IOperationBehavior,Attribute(参数检查器、操作行为接口和标签)扩展WCF操作行为
- WCF扩展:行为扩展Behavior Extension<一>
- WCF扩展系列 - 行为扩展(Behaviors)
- 聚焦WCF行为的扩展
- WCF扩展:行为扩展Behavior Extension<一> 推荐
- [翻译]谈WCF的扩展功能——行为(behavior)
- WCF扩展:行为扩展Behavior Extension<二>
- WCF扩展:行为扩展Behavior Extension<二>
- WCF学习笔记三:使用自定义行为扩展WCF总结
- 扩展WCF自定义行为(二)
- 通过WCF Extension定制扩展WCF行为
- 使用消息分发检查器IDispatchMessageInspector、服务器行为IServiceBehavior、端点行为IEndpointBehavior扩展WCF的消息分发行为
- 扩展WCF自定义行为(一)
- 聚焦WCF行为的扩展
- (转)使用自定义行为扩展 WCF
- WCF扩展系列 - 行为扩展(Behaviors)