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. 优步北京B组(8月10日-8月16日奖励规则)

    奖励政策: [优步北京B组] 定义为2015年7月20日前激活的部分司机(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机( ...

  2. 剑指offer35 第一个只出现一次的字符

    class Solution { public: int FirstNotRepeatingChar(string str) { if(!str.size()) ; ]={}; ;i<str.s ...

  3. Unity 绘制多边形

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

  4. 第二章SignalR所支持的平台

    第二章SignalR所支持的平台 SignalR支持各种服务器和客户端的配置.此外,每种传输方式都有自身的配置要求和限制:如果某种传输方式不被系统支持,SignalR优雅地将故障转移到其他类型的传输方 ...

  5. NTFS 文件系统解析

    1. windows 下磁盘文件读写 下面是读取D:\磁盘上的第0扇区 512 Bytes CreateFile()打开磁盘,获取文件句柄: SetFilePointer()设置读写的位置: Read ...

  6. Java学习之Java实现CallBack功能

    回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数.而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在 ...

  7. WEB开发之如何改善PHP开发方式

    改善PHP开发方式一般可以分为以下几种实现方式: 1.组织和样式     找出一种适合你的组织方法和编码样式,并且一直坚持下去,这样的话,你的代码的组织和布局会变得十分有条理.我们不应该轻视代码的组织 ...

  8. poj 2274 The Race 最小堆

    题目链接 题目大意: 给n个小车, 每个小车有一个初始位置x和初始速度v, 保证x1 < x2..... <xn. 0<v<100. 然后问你一共会发生多少次超车, 以及前10 ...

  9. MigLayout

    1. 初始化: MigLayout l = new MigLayout(); MigLayout l = new MigLayout("","","& ...

  10. asp.net mvc 不找其他view模板,只找cshtml

    asp.net mvc 默认找view文件时,依次找后辍名为aspx.ascx.cshtml.vbhtml的view文件.但是项目住住用C#+Razor开发,这样找,岂不有性能损失. 添加以下代码: ...