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 ...
随机推荐
- JQuery(下)
26.jQuery 中的 DOM 操作 )DOM(Document Object Model—文档对象模型):一种与浏览器, 平台, 语言无关的接口, 使用该接口可以轻松地访问页面中所有的标准组件 ) ...
- php解决与处理网站高并发 大流量访问的方法
方法/步骤 首先,确认服务器硬件是否足够支持当前的流量 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大, 那么必须首先配置一台更高性能的专用服务器才能解决问题 ,否则怎么 ...
- 学习wxpython的网站
http://xoomer.virgilio.it/infinity77/Phoenix/main.html https://wxpython.org/Phoenix/docs/html/main.h ...
- C# webservice开发
一.Webservice简介Web Service也叫XML Web Service. Web Service是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量 ...
- SharePoint 2013 强制安装解决方案
Add-SPSolution Install-SPSolution -Identity DemonstrationZone.wsp -GACDeployment -CompatibilityLevel ...
- caret彻底的理解css的三角形【通过border】
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Apache配置参数
Apache的配置文件 配置文件所在目录:/etc/httpd/conf/主配置文件:httpd.conf旧版本中的配置文件:资源配置文件:srm.conf访问许可权配置文件:access.conf ...
- struts2中使用ognl表达式时各种符号的使用规则$,#,%
OGNL表达式struts2标签“%,#,$” 一.什么是OGNL,有什么特点? OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一 ...
- jmeter实例演示
Jmeter 是比较轻便的性能测试工具,下面根据一个实例演示下jmeter的常见用法 一.前期准备,在使用之前,先分析测试需求,比如:需不要登录?需不需要监视服务器性能?多线程还是多循环?需不需根据流 ...
- CF卡是什么
CF卡(Compact Flash)最初是一种用于便携式电子设备的数据存储设备.作为一种存储设备,它革命性的使用了闪存,于1994年首次由SanDisk公司生产并制定了相关规范.当前,它的物理格式已经 ...