1. public class CookieBehavior:IEndpointBehavior
  2. {
  3.  
  4. private string _cookie;
  5.  
  6. #region 构造函数 重载+2
  7.  
  8. public CookieBehavior() { }
  9.  
  10. public CookieBehavior(string cookie)
  11. {
  12. _cookie = cookie;
  13. }
  14.  
  15. #endregion
  16.  
  17. #region 接口成员
  18.  
  19. #region 未实现的接口成员,调用将抛异常
  20. public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
  21. {
  22. }
  23.  
  24. public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
  25. {
  26. }
  27.  
  28. public void Validate(ServiceEndpoint endpoint)
  29. {
  30. }
  31. #endregion
  32.  
  33. #region 在终结点范围内实现客户端的修改或扩展
  34. /// <summary>
  35. /// 在终结点范围内实现客户端的修改或扩展
  36. /// </summary>
  37. /// <param name="endpoint">要自定义的终结点</param>
  38. /// <param name="clientRuntime">要自定义的客户端运行时</param>
  39. public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
  40. {
  41. SharedCookieMessageInspector insperctor = new SharedCookieMessageInspector(_cookie);
  42. //客户的运行时的消息检查器集合加入自定义的消息检查器
  43. clientRuntime.MessageInspectors.Add(insperctor);
  44. }
  45. #endregion
  46.  
  47. #endregion

实现cookieBehavior类继承IEndpointBehavior接口,为ChnnelFactory添加行为

factory.Endpoint.Behaviors.Add(behavior);

  1. public class SharedCookieMessageInspector:IClientMessageInspector
  2. {
  3. public static string soapCookie;//存储服务端返回的cookie值
  4.  
  5. #region 构造函数
  6.  
  7. public SharedCookieMessageInspector(string cookie)
  8. {
  9. //赋值属性
  10. soapCookie = cookie;
  11. }
  12. #endregion
  13.  
  14. #region 实现接口成员
  15.  
  16. #region 在将请求消息发送到服务之前,启用消息的检查或修改
  17. /// <summary>
  18. /// 在将请求消息发送到服务之前,向消息中写入cookie
  19. /// </summary>
  20. /// <param name="request">要发送给服务的消息</param>
  21. /// <param name="channel">客户端对象通道</param>
  22. /// <returns>唯一状态</returns>
  23. public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
  24. {
  25. string cookie = CookieMe.GetCookie();
  26. HttpRequestMessageProperty reqMessage;
  27. object httpRequestMessageObject;
  28. if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject))
  29. {
  30. reqMessage = httpRequestMessageObject as HttpRequestMessageProperty;
  31. if (string.IsNullOrEmpty(reqMessage.Headers["Cookie"]))
  32. {
  33. reqMessage.Headers["Cookie"] = cookie;
  34. }
  35. }
  36. else
  37. {
  38. reqMessage = new HttpRequestMessageProperty();
  39. reqMessage.Headers.Add("Cookie",cookie);
  40. request.Properties.Add(HttpRequestMessageProperty.Name,reqMessage);
  41. }
  42.  
  43. return null;//不使用相关状态,则为null
  44. }
  45. #endregion
  46.  
  47. #region 在收到回复消息之后将它传递回客户端应用程序之前,启用消息的检查或修改
  48. /// <summary>
  49. /// 在收到回复消息之后,存储 cookie。
  50. /// </summary>
  51. /// <param name="reply">要转换为类型并交回给客户端应用程序的消息</param>
  52. /// <param name="correlationState">关联状态数据</param>
  53. public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
  54. {
  55. //提供对http响应的访问,以便访问和响应为 HTTP 协议请求提供的附加信息
  56. HttpResponseMessageProperty httpResponse =
  57. reply.Properties[HttpResponseMessageProperty.Name] as HttpResponseMessageProperty;
  58. if (httpResponse != null)
  59. {
  60. soapCookie = httpResponse.Headers["Set-Cookie"];//从服务端响应消息头中提取cookie
  61. if (!string.IsNullOrEmpty(soapCookie))
  62. {
  63. CookieMe.SaveCookie(soapCookie);
  64. }
  65.  
  66. }
  67.  
  68. }
  69.  
  70. #endregion
  71.  
  72. #endregion
  73.  
  74. }

wcf客户端 cookie的更多相关文章

  1. WCF 基于Cookie的登录验证回传问题的解决

    参考资料: http://www.cnblogs.com/czcz1024/p/3333138.html http://megakemp.com/2009/02/06/managing-shared- ...

  2. WCF常见问题(1) -- WebService/WCF Session Cookie

    原文:WCF常见问题(1) -- WebService/WCF Session Cookie 在.net 3.0推出WCF之前使用的WebService,有的应用有使用Session保持一些信息,在不 ...

  3. 终于解决:升级至.NET 4.6.1后VS2015生成WCF客户端代理类的问题

    在Visual Studio 2015中将一个包含WCF引用的项目的targetFramework从4.5改为4.6.1的时候,VS2015会重新生成WCF客户端代理类.如果WCF引用配置中选中了&q ...

  4. nginx负载均衡之基于客户端cookie的会话保持

    通过ip_hash做会话保持有一定的缺陷,这个是通过客户端ip来实现.同一个网络下众多客户端访问服务器会被扔到同一台机器,再或者是CDN也 会导致负载不均衡.所以要实现通过客户端cookie实现,包括 ...

  5. WCF初探-10:WCF客户端调用服务

    创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: ...

  6. WCF初探-11:WCF客户端异步调用服务

    前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...

  7. WCF初探-12:WCF客户端异常处理

    前言: 当我们打开WCF基础客户端通道(无论是通过显式打开还是通过调用操作自动打开).使用客户端或通道对象调用操作,或关闭基础客户端通道时,都会在客户端应用程序中出现异常.而我们知道WCF是基于网络的 ...

  8. WCF初探-13:WCF客户端为双工服务创建回调对象

    前言: 在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务 ...

  9. 生产WCF客户端类文件的命令格式

    生产WCF客户端类文件的命令格式: svcutil.exe net.tcp://127.0.0.1:8732/ChromaMI.Remote.ConfigService/RemoteConfigSer ...

随机推荐

  1. Unity 绘制多边形

    最近工程需要用到一个多边形用来查看角色属性,于是就研究了下Mesh用网格做了一个.遗憾的的 UGUI 渲染不了 3D 物体,然后又用了一段时间研究了下UGUI的网格绘制. 不过终于还是完成了,虽然有些 ...

  2. Chocolate&&木块拼接&&Cards&& Wet Shark and Bishops

    B. Chocolate time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  3. Mongodb 权限管理

  4. doGet与doPost的区别

    转自:http://blog.csdn.net/luoweifu/article/details/7865243   目录(?)[-] 不同点一 不同点二 输入表单inputhtml Serlvlet ...

  5. 关于中文乱码的解决方法(URL方式)

    假设keyWord ='阳光'; url="play.jsp? keyWord ="+ keyWord 若按照上述的地址直接访问,则中文会变成乱码.必须使用encodeURI()进 ...

  6. gtest的Linux使用(Google test)

    GTest是Google开发的跨平台而且开源的C++单元测试框架,很好很强大. 下载地址:https://code.google.com/p/googletest/ . 关于GTest在Windows ...

  7. WEBGL 2D游戏引擎研发系列 第一章 <新的开始>

    WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...

  8. Android R.layout. 找不到已存在的布局文件

    今天写新页面的时候,突然发现R.layout.  无法找到我已经写好的页面,于是顿时就不淡定了. 把R文件翻了一遍  发现也没有.... 然后我就看到了这个. android.R 原来是我错把Andr ...

  9. Javascript中的attribute和property分析

    attribute和property这两个单词,都有属性的意思,attribute有属性.特质的意思,property则有性质,性能的意思. 首先需要明确的是,在规范中,读取和设置attribute的 ...

  10. centos之jdk安装

    1.环境说明 系统:centos6.7, 2.6.32-573.el6.x86_64; jdk:jdk1.7.0_80 2.下载jdk并上传      下载jdk-7u80-linux-x64.tar ...