这篇文章主要讲解了“WCF缓存机制怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF缓存机制怎么理解”吧!
缓存是很占内存的,缓存也有它的好处,这里就WCF缓存机制分析一个案例,希望大家可以从中得到收获。首先我们看看MSDN中对WCF的Session的说明:它们由调用应用程序显式启动和终止。会话期间传递的消息按照接收消息的顺序进行处理。会话将一组消息相互关联,从而形成对话。该关联的含义是抽象的。
例如,一个基于会话的通道可能会根据共享网络连接来关联消息,而另一个基于会话的通道可能会根据消息正文中的共享标记来关联消息。可以从会话派生的功能取决于关联的性质。不存在与 WCF 会话相关联的常规数据存储区。***一句告诉我们,WCF中的Session是无法像Web应用一样存储附加信息的。经过研究,我们可以通过扩展MessageHeader实现一个附加的数据存储区在Client端每次请求Service时发送到Server端。具体实现如下(以前述需求为例)。
这是一个单件类,Client正常登陆得到Server端回传的UserIdentity实例后可以通过如下代码将其存入WCF缓存:
UserPermissionInfo.GetInstance().SetUserIdentity(ServerReturnedUserIdentity);
其中ServerReturnedUserIdentity就是Server产生并回传的UserIdentity下面我们扩展MessageHeader将我们自己定义的UserIdentity加入进去,WCF缓存代码如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.ServiceModel; usingSystem.ServiceProcess; usingSystem.ServiceModel.Dispatcher; usingSystem.ServiceModel.Description; usingSystem.ServiceModel.Channels; usingSystem.ServiceModel.Configuration; namespaceBNCommon.ClientHelper { publicclassBNClientMessageInspector:IClientMessageInspector { IClientMessageInspector成员#regionIClientMessageInspector成员 publicvoidAfterReceiveReply(refMessagereply,objectcorrelationState) { } publicobjectBeforeSendRequest(refMessagerequest,IClientChannelchannel) { MessageHeaderMessageHeadermh=MessageHeader.CreateHeader("UserIdentity","UINS",BNIIClientLayerPlus.UserPermissionInfo.GetInstance()._UserIdentity); request.Headers.Add(mh); returnnull; } #endregion } }
这个类实现了IClientMessageInspector接口,实现该接口可以在Client每次向Server请求前及请求返回后控制Client的行为对发送和接收的数据进行处理。现在我们需要实现BehaviorExtensionElement,IEndpointBehavior将刚刚建立的行为加入Client行为集合,代码如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.ServiceModel; usingSystem.ServiceProcess; usingSystem.ServiceModel.Dispatcher; usingSystem.ServiceModel.Description; usingSystem.ServiceModel.Channels; usingSystem.ServiceModel.Configuration; namespaceBNCommon.ClientHelper { publicclassBNClientEndpointBehavior:BehaviorExtensionElement,IEndpointBehavior { IEndpointBehavior成员#regionIEndpointBehavior成员 publicvoidAddBindingParameters(ServiceEndpointendpoint,BindingParameterCollectionbindingParameters) {} publicvoidApplyClientBehavior(ServiceEndpointendpoint,ClientRuntimeclientRuntime) { clientRuntime.MessageInspectors.Add(newBNClientMessageInspector()); } publicvoidApplyDispatchBehavior(ServiceEndpointendpoint,EndpointDispatcherendpointDispatcher) { } publicvoidValidate(ServiceEndpointendpoint) { return; } #endregion publicoverrideTypeBehaviorType { get...{returntypeof(BNClientEndpointBehavior);} } protectedoverrideobjectCreateBehavior() { returnnewBNClientEndpointBehavior(); } } }
感谢各位的阅读,以上就是“WCF缓存机制怎么理解”的内容了,经过本文的学习后,相信大家对WCF缓存机制怎么理解这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!