SOAPUI插入Cookie的方法

SOAP插入cookie的方法如下,点击Head,点击加号,然后直接设置就可以了。

C#中调用webService时插入Cookie

由于调用的时候必须要带上cookie,才能成功获取到数据,而正常的通过引用服务,C#会生成一堆代码,但那只是个空壳子,并没有设置cookie的地方。在网上找了很多资料,最后找到了方法,在此总结一下,以便其他人少走弯路。

由于我们是客户端,服务端无法控制,所以网上找到那些设置config,什么启用cookie啊,都是没用的,除非你是正在开发的是服务端+客户端。这里我们主要讨论的是调用方,我只有一个wsdl的地址,服务端不可控制的情况。

客户端(web应用)并不会自动发送cookie到wcf。所以客户端还得做更多的工作

  1. 核心在IClientMessageInspector 这个接口,他有BeforeSendRequest和AfterReceiveReply两个方法。
  2. 我们要新建一个类CookieBehavior.cs
    public class CookieBehavior : IEndpointBehavior
{
private string SID { get; set; } public CookieBehavior(string pSid)
{
SID = pSid;
} public void Validate(ServiceEndpoint endpoint)
{
return;
} public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
return;
} public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
return;
} public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime behavior)
{
behavior.MessageInspectors.Add(new CookieMessageInspector(SID));
}
}

  

  1. 建立一个类CookieMessageInspector,继承IClientMessageInspector,实现他的BeforeSendRequest和AfterReceiveReply两个方法。
      public class CookieMessageInspector : IClientMessageInspector
    {
    private string SID { get; set; } public CookieMessageInspector(string pSid)
    {
    SID = pSid;
    } public object BeforeSendRequest(ref Message request, System.ServiceModel.IClientChannel channel)
    {
    var cookie = "SID=" + SID; HttpRequestMessageProperty httpRequestMessage;
    object httpRequestMessageObject; if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject))
    {
    httpRequestMessage = httpRequestMessageObject as HttpRequestMessageProperty;
    if (string.IsNullOrEmpty(httpRequestMessage.Headers["Cookie"]))
    {
    httpRequestMessage.Headers["Cookie"] = cookie;
    }
    }
    else
    {
    httpRequestMessage = new HttpRequestMessageProperty();
    httpRequestMessage.Headers.Add("Cookie", cookie);
    request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
    } return null;
    } public void AfterReceiveReply(ref Message reply, object correlationState)
    {
    return; }
    }

      

  2. 通过vs添加服务引用,他会自动生成一个代理类。在new这个代理类之后,加入我们新建的behavior
            WokSearchLiteClient searchLiteClient = new WokSearchLiteClient();
CookieBehavior c = new CookieBehavior(authentKey);
searchLiteClient.Endpoint.Behaviors.Add(c);
var ret = searchLiteClient.search(searchRequest.queryParameters, searchRequest.retrieveParameters);

  

这样就完成了,带cookie的webService调用

C#调用WebService时插入cookie的更多相关文章

  1. 动态调用webservice时 ServiceDescriptionImporter类在vs2010无法引用的解决方法

    [导读]ServiceDescriptionImporter是创建Web Service 时使用的类,它是引用继承System.Web.Services 当我将VS2005里写的一段代码放在VS201 ...

  2. WinForm客户端调用 WebService时 如何启用Session

    WinForm客户端调用 WebService时 如何启用Session 摘自: http://www.cnblogs.com/swtseaman/archive/2011/04/18/2020176 ...

  3. ABAP调用WebService时日期类型问题

    在使用ABAP调用WebService时, 提示CX_SY_CONVERSION_NO_DATE_TIME,意思是日期格式不能转化. 究其原因是ABAP里没有相应的数据类型与WebService描述里 ...

  4. 调用WebService时加入身份验证,以拒绝未授权的访问

    众所周知,WebService是为企业需求提供的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务.但在有些时候的某些应用服务不希望被未授权访问,那么此时我们可以一下几种 ...

  5. C#:调用webservice时提示对操作的回复消息正文进行反序列化时出错

    主要原因webservice返回值的长度超过readerQuotas中的了maxStringContentLength值,造成返回值截断,不完整,反序列化时出错. <readerQuotas m ...

  6. C#调用webservice 时如何传递实体对象

    在webservice端公开一个实体类,然后实例化,赋值,然后再给到webservice,可以实现,但是,即使调用端和service端的实体类完全一致,你也要重新实例化service端的,重新赋值,将 ...

  7. [转]动态调用webservice时 ServiceDescriptionImporter类在vs2010无法引用的解决方法

    本文转自:http://blog.csdn.net/limlimlim/article/details/8647038 [导读]ServiceDescriptionImporter是创建Web Ser ...

  8. 动态调用webservice时 ServiceDescriptionImporter类在vs2010无法引用的解决方法 (转)

    本文转自:http://blog.csdn.net/limlimlim/article/details/8647038 [导读]ServiceDescriptionImporter是创建Web Ser ...

  9. 调用webservice时,产生android.os.NetworkOnMainThreadException错误

    android.os.NetworkOnMainThreadException 网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序 ...

随机推荐

  1. 号外号外!解决github+hexo+yilia评论插件的问题!!!

    先走一波效果图!    本人网站--http://www.wenzheng.club/ ps:效果还是不错的,支持QQ微信登录,支持表情,甚至gif动图评论! 插件采用韩国服务器的来必力评论插件--h ...

  2. Failed to get D-Bus connection: Operation not permitted解决

    docker中安装centos无法使用systemctl命令管理进程,报以下错误: Failed to get D-Bus connection: Operation not permitted 原因 ...

  3. Spring MVC的DispatcherServlet

    Spring MVC提供了一个名为org.springframework.web.servlet.DispatcherServlet的Selvet充当前端控制器,所有的请求驱动都围绕这个Dispatc ...

  4. 使用命令行生成jar包

    测试用类 public class Hello { public static void main(String[] args) { System.out.println("hello wo ...

  5. SQL性能优化的几点建议

    1. 索引:索引可以提高查询的速度,但不是使用带有索引的字段查询时,索引都会起作用,如下几种特殊情况下,有可能使用带有索引的字段查询时,索引没有起作用:1)使用LIKE关键字的查询语句 如果匹配字符串 ...

  6. libGDX-wiki发布

    为方便大家学习和访问,我将libgdx的wiki爬取到doku-wiki下,专门建立了以下地址.欢迎大家来共同完善. http://wiki.v5ent.com

  7. 在ubuntu系统中给filezilla创建桌面快捷方式

    filezilla是一款开源的ftp客户端,当然他们也有服务端,这里以filezilla客户端为例创建快捷方式!默认情况下,ubuntu将自动安装的软件快捷方式保存在/usr/share/applic ...

  8. Spark Streaming编程指南

    Overview A Quick Example Basic Concepts Linking Initializing StreamingContext Discretized Streams (D ...

  9. verilog实验1:基于FPGA蜂鸣器演奏乐曲并数码管显示

    一.实验任务 利用FPGA进行代码开发,使蜂鸣器演奏出乐曲<生日快乐>,将音调显示在数码管.原理为蜂鸣器为交流源蜂鸣器,在引脚上加一定频率的方波就可以发声,而且发声的频率由所加方波决定.这 ...

  10. java实现二叉树的前中后遍历(递归和非递归)

    这里使用下图的二叉树作为例子: 首先建立树这个类: public class Node { private int data; private Node leftNode; private Node ...