wcf客户端 cookie
- public class CookieBehavior:IEndpointBehavior
- {
- private string _cookie;
- #region 构造函数 重载+2
- public CookieBehavior() { }
- public CookieBehavior(string cookie)
- {
- _cookie = cookie;
- }
- #endregion
- #region 接口成员
- #region 未实现的接口成员,调用将抛异常
- public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
- {
- }
- public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
- {
- }
- public void Validate(ServiceEndpoint endpoint)
- {
- }
- #endregion
- #region 在终结点范围内实现客户端的修改或扩展
- /// <summary>
- /// 在终结点范围内实现客户端的修改或扩展
- /// </summary>
- /// <param name="endpoint">要自定义的终结点</param>
- /// <param name="clientRuntime">要自定义的客户端运行时</param>
- public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
- {
- SharedCookieMessageInspector insperctor = new SharedCookieMessageInspector(_cookie);
- //客户的运行时的消息检查器集合加入自定义的消息检查器
- clientRuntime.MessageInspectors.Add(insperctor);
- }
- #endregion
- #endregion
实现cookieBehavior类继承IEndpointBehavior接口,为ChnnelFactory添加行为
factory.Endpoint.Behaviors.Add(behavior);
- public class SharedCookieMessageInspector:IClientMessageInspector
- {
- public static string soapCookie;//存储服务端返回的cookie值
- #region 构造函数
- public SharedCookieMessageInspector(string cookie)
- {
- //赋值属性
- soapCookie = cookie;
- }
- #endregion
- #region 实现接口成员
- #region 在将请求消息发送到服务之前,启用消息的检查或修改
- /// <summary>
- /// 在将请求消息发送到服务之前,向消息中写入cookie
- /// </summary>
- /// <param name="request">要发送给服务的消息</param>
- /// <param name="channel">客户端对象通道</param>
- /// <returns>唯一状态</returns>
- public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
- {
- string cookie = CookieMe.GetCookie();
- HttpRequestMessageProperty reqMessage;
- object httpRequestMessageObject;
- if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject))
- {
- reqMessage = httpRequestMessageObject as HttpRequestMessageProperty;
- if (string.IsNullOrEmpty(reqMessage.Headers["Cookie"]))
- {
- reqMessage.Headers["Cookie"] = cookie;
- }
- }
- else
- {
- reqMessage = new HttpRequestMessageProperty();
- reqMessage.Headers.Add("Cookie",cookie);
- request.Properties.Add(HttpRequestMessageProperty.Name,reqMessage);
- }
- return null;//不使用相关状态,则为null
- }
- #endregion
- #region 在收到回复消息之后将它传递回客户端应用程序之前,启用消息的检查或修改
- /// <summary>
- /// 在收到回复消息之后,存储 cookie。
- /// </summary>
- /// <param name="reply">要转换为类型并交回给客户端应用程序的消息</param>
- /// <param name="correlationState">关联状态数据</param>
- public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
- {
- //提供对http响应的访问,以便访问和响应为 HTTP 协议请求提供的附加信息
- HttpResponseMessageProperty httpResponse =
- reply.Properties[HttpResponseMessageProperty.Name] as HttpResponseMessageProperty;
- if (httpResponse != null)
- {
- soapCookie = httpResponse.Headers["Set-Cookie"];//从服务端响应消息头中提取cookie
- if (!string.IsNullOrEmpty(soapCookie))
- {
- CookieMe.SaveCookie(soapCookie);
- }
- }
- }
- #endregion
- #endregion
- }
wcf客户端 cookie的更多相关文章
- WCF 基于Cookie的登录验证回传问题的解决
参考资料: http://www.cnblogs.com/czcz1024/p/3333138.html http://megakemp.com/2009/02/06/managing-shared- ...
- WCF常见问题(1) -- WebService/WCF Session Cookie
原文:WCF常见问题(1) -- WebService/WCF Session Cookie 在.net 3.0推出WCF之前使用的WebService,有的应用有使用Session保持一些信息,在不 ...
- 终于解决:升级至.NET 4.6.1后VS2015生成WCF客户端代理类的问题
在Visual Studio 2015中将一个包含WCF引用的项目的targetFramework从4.5改为4.6.1的时候,VS2015会重新生成WCF客户端代理类.如果WCF引用配置中选中了&q ...
- nginx负载均衡之基于客户端cookie的会话保持
通过ip_hash做会话保持有一定的缺陷,这个是通过客户端ip来实现.同一个网络下众多客户端访问服务器会被扔到同一台机器,再或者是CDN也 会导致负载不均衡.所以要实现通过客户端cookie实现,包括 ...
- WCF初探-10:WCF客户端调用服务
创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: ...
- WCF初探-11:WCF客户端异步调用服务
前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...
- WCF初探-12:WCF客户端异常处理
前言: 当我们打开WCF基础客户端通道(无论是通过显式打开还是通过调用操作自动打开).使用客户端或通道对象调用操作,或关闭基础客户端通道时,都会在客户端应用程序中出现异常.而我们知道WCF是基于网络的 ...
- WCF初探-13:WCF客户端为双工服务创建回调对象
前言: 在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务 ...
- 生产WCF客户端类文件的命令格式
生产WCF客户端类文件的命令格式: svcutil.exe net.tcp://127.0.0.1:8732/ChromaMI.Remote.ConfigService/RemoteConfigSer ...
随机推荐
- Unity 绘制多边形
最近工程需要用到一个多边形用来查看角色属性,于是就研究了下Mesh用网格做了一个.遗憾的的 UGUI 渲染不了 3D 物体,然后又用了一段时间研究了下UGUI的网格绘制. 不过终于还是完成了,虽然有些 ...
- Chocolate&&木块拼接&&Cards&& Wet Shark and Bishops
B. Chocolate time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Mongodb 权限管理
- doGet与doPost的区别
转自:http://blog.csdn.net/luoweifu/article/details/7865243 目录(?)[-] 不同点一 不同点二 输入表单inputhtml Serlvlet ...
- 关于中文乱码的解决方法(URL方式)
假设keyWord ='阳光'; url="play.jsp? keyWord ="+ keyWord 若按照上述的地址直接访问,则中文会变成乱码.必须使用encodeURI()进 ...
- gtest的Linux使用(Google test)
GTest是Google开发的跨平台而且开源的C++单元测试框架,很好很强大. 下载地址:https://code.google.com/p/googletest/ . 关于GTest在Windows ...
- WEBGL 2D游戏引擎研发系列 第一章 <新的开始>
WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...
- Android R.layout. 找不到已存在的布局文件
今天写新页面的时候,突然发现R.layout. 无法找到我已经写好的页面,于是顿时就不淡定了. 把R文件翻了一遍 发现也没有.... 然后我就看到了这个. android.R 原来是我错把Andr ...
- Javascript中的attribute和property分析
attribute和property这两个单词,都有属性的意思,attribute有属性.特质的意思,property则有性质,性能的意思. 首先需要明确的是,在规范中,读取和设置attribute的 ...
- centos之jdk安装
1.环境说明 系统:centos6.7, 2.6.32-573.el6.x86_64; jdk:jdk1.7.0_80 2.下载jdk并上传 下载jdk-7u80-linux-x64.tar ...