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的更多相关文章

  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. [置顶] 通过实例学习Struts2 (1)

    前言 一直用Struts1 , 现在新的项目要转向Struts2了, 先研究学习一下,做点技术储备. 我一直认为计算机软件行业是一个实践性非常强的行业,书读了多少都不管用, 一定要卷起袖子,亲自动手, ...

  2. wx.Frame

    wx.Frame A frame is a window whose size and position can (usually) be changed by the user. It usuall ...

  3. Unity UGUI 使用 CCTween 实现 打字效果

    最近闲来无事 就研究了下 打字效果的实现 结果发现很简单 直白了说是太简单了  下边效果图加代码 走着 增加可拖拽 脚本 (场景物体不支持 alpha 隐藏) 目前 CCAnim 封装了 move R ...

  4. uva 10453 - Make Palindrome(dp)

    题目链接:10453 - Make Palindrome 题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串. 解题思路:和uva 10 ...

  5. Afinal开源框架中FinalActivity的使用

    1. 首先将afinal.jar文件复制到项目中的libs文件夹下 2. 让MainActivity不在继承系统的Activity,而是继承FinalActivity public class Mai ...

  6. OAuthBase.cs

    using System; using System.Security.Cryptography; using System.Collections.Generic; using System.Tex ...

  7. 使用c#获取access中所有表的表名与内容

    以前在网上查过,似乎也可以通过读取access系统表的方法来获得,但是实在想不想来是什么,今天又在网上找了找,终于发现更加方便的方法,更重要的是,这种方法也可以通用所有OLEDB数据源. 这里用到了O ...

  8. ER图与UML图

    ER图:实体-联系图(Entity-Relation Diagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,ER图提供了表示实体(即数据对象).属性和联系的方法,用来描述现实世界的概念 ...

  9. SQL Server执行计划那些事儿(2)——查找和扫描

    接下来的文章是记录自己曾经的盲点,同时也透漏了自己的发展历程(可能发展也算不上,只能说是瞎混).当然,一些盲点也在工作和探究过程中慢慢有些眉目,现在也愿意发扬博客园的奉献精神,拿出来和大家分享一下. ...

  10. Python核心编程读笔 4

    第五章 数字 二.整形 1 布尔型 2 标准整数类型 3 长整型 数字后面加L,能表示非常非常大的数字 目前,整形和长整型逐渐统一!!! 三.双精度浮点数 四.复数 有关复数的几个概念: 表示虚数的语 ...