问:我应该怎样调用一个支持会话状态并在多个请求中维持会话的Web服务? 答:在根据SoapHttpClientProtocol得到的Web服务代理类中,有一个叫做CookieContainer的属性。如果你将它初始化为一个System.Net.CookieContainer类型的实例,它将保存那些返回给客户程序的Cookie。当带有同样的cookie容器实例的同一个代理被用来调用服务的方法时,它将cookie容器中的cookie进行序列化,作为组成HTTP头的一个属性放到请求中。在调用支持会话状态的方法之前,应该建立一个CookieContainer并初始化代理,如下: System.……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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标准。
相关推荐
-
SAP收购CallidusCloud 与Salesforce竞争
一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]
-
API设计如龙生九子 各不相同
IT咨询管理公司CA Technologies对API产业做了个问卷调查,问卷内容涉及API设计风格以及管理部署的新动向。调查结果表明,JSON与XML可谓两分天下。
-
从头开始实现领域驱动设计
领域描述业务;它是驱动企业的概念和逻辑的集合。如果遵循领域驱动设计(DDD)这一本质,那么领域就是应用程序中最重要的组成部分。
-
走出思维定式 数据库/大型机现代化不再是问题
升级和改变组织的主要利益驱动应用的前景,正处于一个压倒性的位置,所以组织将要面临一系列的改变。