如何调用一个维持会话的Web服务?

日期: 2008-04-24 作者:Michèle Leroux Bustamante 来源:TechTarget中国

问:我应该怎样调用一个支持会话状态并在多个请求中维持会话的Web服务?   答:在根据SoapHttpClientProtocol得到的Web服务代理类中,有一个叫做CookieContainer的属性。如果你将它初始化为一个System.Net.CookieContainer类型的实例,它将保存那些返回给客户程序的Cookie。当带有同样的cookie容器实例的同一个代理被用来调用服务的方法时,它将cookie容器中的cookie进行序列化,作为组成HTTP头的一个属性放到请求中。在调用支持会话状态的方法之前,应该建立一个CookieContainer并初始化代理,如下:   System.……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

问:我应该怎样调用一个支持会话状态并在多个请求中维持会话的Web服务?

  答:在根据SoapHttpClientProtocol得到的Web服务代理类中,有一个叫做CookieContainer的属性。如果你将它初始化为一个System.Net.CookieContainer类型的实例,它将保存那些返回给客户程序的Cookie。当带有同样的cookie容器实例的同一个代理被用来调用服务的方法时,它将cookie容器中的cookie进行序列化,作为组成HTTP头的一个属性放到请求中。在调用支持会话状态的方法之前,应该建立一个CookieContainer并初始化代理,如下:

  System.Net.CookieContainer cookies = new System.Net.CookieContainer();
    localhost.SessionService1 svc = new localhost.SessionService1();
    svc.CookieContainer = cookies;
    svc.UpdateHitCounter();
    这有一个例子Demo,你可以从这里下载http://www.dotnetdashboard.net/downloads/WSSessionCookie.zip

  需要注意的事,一个Cookie容器的实例的生存范围是程序的整个生命周期。如果你给一个代理分配了一个新的Cookie容器,先前保存的会话ID(或其他cookie)将不会再和请求一起传递。

  注意:我一般上不推荐在Web服务中使用会话状态。一个典型的使用会话状态的场景是用它来保存登录状态,这样在会话中只需要一次登录。然而,这样保持一个登录状态并没有提供足够的安全性来防止回复攻击(replay attack)或者在通信网络上截取会话ID。OASIS的Web服务安全标准描述了怎样安全地传递数据,包括具有足够的过期规则的基于会话的数据。此外它们描述了如何加密数据和对数据进行签名,以保证数据不会被篡改。如果想了解其他类型的基于会话的数据传递,请查看WS-SecureConversation、WS-Trust和SAML标准。

相关推荐