Webservice服务中如何保持Session

简介: 问题一:webservice服务中如果保持Session 调用Session 对于Web Service,每个方法的调用都会启动一个Session,可以用下面的方法来使多个调用在同一个Session里 CWSSyscfg cwsCfg = new CWSSyscfg(); cwsCfg.

问题一:webservice服务中如果保持Session

调用Session

对于Web Service,每个方法的调用都会启动一个Session,可以用下面的方法来使多个调用在同一个Session里

CWSSyscfg cwsCfg = new CWSSyscfg();

cwsCfg.CookieContainer = new System.Net.CookieContainer();

CWSSyscfg是一个Web Service类,Web Service的给代理类设置CookieContainer属性,只要多个代理的CookieContainer属性是相同的值,

则对这些Web Service的调用在同一个Session。可以用单例模式来实现。

 

一般的webservice  session 是由cookie 保持的
在两次访问之间保持一个cookie 上下文  就可以保持一个session
所以你需要把前一次返回的结果的http头中 cookie 的所有内容    作为下一次发送你request http头的cookie内容就可以保持session上下文了

 

参考文章:http://www.cnblogs.com/RascallySnake/archive/2010/09/10/1823036.html

              http://www.cnblogs.com/Jan_Dai/archive/2011/04/01/2001742.html

 

本人的Demo:http://files.cnblogs.com/zfanlong1314/WebService%E4%B8%ADSession%E7%9A%84%E4%BD%BF%E7%94%A8.zip

问题二:动态调用WebService时如何保持Session

参考:https://social.msdn.microsoft.com/Forums/exchange/zh-CN/7a80ebc8-1bad-412b-9cf2-498b71ae206f/webservicesession

核心代码:

//设置CookieContainer 1987raymond添加
PropertyInfo property = t.GetProperty("CookieContainer");
property.SetValue(obj, container, null);

支持webservice服务保持session状态的动态代理服务类。 

 public object InvokeWebservice(string url, string @namespace, string classname, string methodname, object[] args,CookieContainer container)
      {
         try
         {
            System.Net.WebClient wc = new System.Net.WebClient();

            System.IO.Stream stream = wc.OpenRead(url + "?WSDL");

            System.Web.Services.Description.ServiceDescription sd
                = System.Web.Services.Description.ServiceDescription.Read(stream);

            System.Web.Services.Description.ServiceDescriptionImporter sdi
                = new System.Web.Services.Description.ServiceDescriptionImporter();

            sdi.AddServiceDescription(sd, "", "");

            System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace);
            System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit();

            ccu.Namespaces.Add(cn);
            sdi.Import(cn, ccu);

            Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider();
            System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler();

            System.CodeDom.Compiler.CompilerParameters cplist
                = new System.CodeDom.Compiler.CompilerParameters();

            cplist.GenerateExecutable = false;
            cplist.GenerateInMemory = true;

            cplist.ReferencedAssemblies.Add("System.dll");
            cplist.ReferencedAssemblies.Add("System.XML.dll");
            cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
            cplist.ReferencedAssemblies.Add("System.Data.dll");

            System.CodeDom.Compiler.CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
            if (true == cr.Errors.HasErrors)
            {
               System.Text.StringBuilder sb = new System.Text.StringBuilder();
               foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
               {
                  sb.Append(ce.ToString());
                  sb.Append(System.Environment.NewLine);
               }

               throw new Exception(sb.ToString());
            }

            System.Reflection.Assembly assembly = cr.CompiledAssembly;
            Type t = assembly.GetType(@namespace + "." + classname, true, true);
            object obj = Activator.CreateInstance(t);

            //设置CookieContainer 1987raymond添加
            PropertyInfo property = t.GetProperty("CookieContainer");
            property.SetValue(obj, container, null);

            System.Reflection.MethodInfo mi = t.GetMethod(methodname);
            return mi.Invoke(obj, args);
         }

         catch (Exception ex)
         {
            throw ex;
         }
      }
   }
View Code

 

目录
相关文章
|
.NET 开发框架
在asp.net webservice中如何使用session
原文:在asp.net webservice中如何使用session 原文:刘武|在asp.net webservice中如何使用session   在使用asp.net编写webservice时,默认情况下是不支持session的,但我们可以把WebMethod的EnableSession...
893 0
|
数据格式 XML .NET
Webservice中使用Session、Application
原文:Webservice中使用Session、Application 在Asp.Net 2.0里,已经能够在WebMethod里使用 Session 、 Application 这种服务器变量了。一、Session     [WebMethod(EnableSession = true)] ...
919 0
|
.NET
WCF常见问题(1) -- WebService/WCF Session Cookie
原文: WCF常见问题(1) -- WebService/WCF Session Cookie 在.net 3.0推出WCF之前使用的WebService,有的应用有使用Session保持一些信息,在不同的WebMethod中共享存储信息。
1054 0
|
.NET Windows 开发框架
ASP.NET Web Service中使用Session 及 Session丢失解决方法 续
原文:ASP.NET Web Service中使用Session 及 Session丢失解决方法 续 1、关于Session丢失问题的说明汇总,参考这里 2、在Web Servcie中使用Session,需要对Web Method做如下处理 [WebMethod(EnableSession = true)]public void usingSession(){    Session["Name"] = "Name";}   如果不加EnableSession = true,在Web Service中是不能使用Session的。
756 0
|
Apache
跨多个WebService管理Session
六、 跨多个WebService管理Session 当多个WebService的时候,我们要管理它的Session。这个时候我们得依靠ServiceGroupContext保存session信息;然后在发布WebService的时候,services.
725 0
|
Java Apache
WebService会话Session的管理
1、新建Session的WebService测试代码,代码很简单。就是记录用户登录的状态信息,放在MessageContext的ServiceContext中。代码如下: 代码package com.
799 0