Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 将会话数据保存在System.Web.Services.WebService的WebMethod中_Asp.net_Web Services_Session_Webmethod - Fatal编程技术网

Asp.net 将会话数据保存在System.Web.Services.WebService的WebMethod中

Asp.net 将会话数据保存在System.Web.Services.WebService的WebMethod中,asp.net,web-services,session,webmethod,Asp.net,Web Services,Session,Webmethod,我正在使用VS2010,asp.NETC 我有一个像这样声明的WebMethod [WebMethod(EnableSession = true)] public String getErrorMsg() { if (HttpContext.Current.Session["error"] == null) return "empty"; else return ((String)(HttpContext.Current.Sess

我正在使用VS2010,asp.NETC

我有一个像这样声明的WebMethod

      [WebMethod(EnableSession = true)]
        public String getErrorMsg()
        {           
if (HttpContext.Current.Session["error"] == null) return "empty";
else return ((String)(HttpContext.Current.Session["error"]));
        }
   [WebMethod(EnableSession = true)]
            public void firstMethod()
            {           
    HttpContext.Current.Session["error"] ="bla";
}
在System.Web.Services.WebService ClassInHirted中

在另一个WebMethod中,我设置了这个消息,让我们假设它是这样的

      [WebMethod(EnableSession = true)]
        public String getErrorMsg()
        {           
if (HttpContext.Current.Session["error"] == null) return "empty";
else return ((String)(HttpContext.Current.Session["error"]));
        }
   [WebMethod(EnableSession = true)]
            public void firstMethod()
            {           
    HttpContext.Current.Session["error"] ="bla";
}
在另一个项目中,我向这个Web服务添加了一个服务引用。 然后我试着这样使用它:

    WebService1.WebService1SoapClient MyService=
    new WebService1.WebService1SoapClient();
        MyService.firstMethod(); // this calls the method that sets
 //the "bla" string in the session
    String str=MyService.getErrorMsg();
    System.Diagnostics.Debug.WriteLine("Message "+str);
<binding name="NameOfWebServiceSoap" allowCookies="true"/>
Str为空

在第一个方法中,bla字符串被设置为会话。只要im在这个方法中,我就可以使用会话存储的数据。 当我再次调用WebService时,前面的会话数据不再存在

我到处找了。我只发现了这个例子:

 // instantiate the proxy 
    localhost.MyDemo MyService = new localhost.MyDemo();

    // create a container for the SessionID cookie
    MyService.CookieContainer = new CookieContainer();

    // call the Web Service function
    Label1.Text += MyService.HelloWorld() + "<br />";
但有两个主要问题:

1我的WebService不能用作对象,这意味着我不能在该类上使用new,就像本例所做的那样

我使用WebService1SoapClient是为了使用WebService

2 WebService1SoapClient对象中没有CookieContainer这样的东西

我认为这个例子一定是在旧的vs/.net版本中使用的


有人知道如何将会话数据保存在Web服务中吗?

我认为您错了,原因有二

您正在webservice代理类上使用new

WebService1.WebService1SoapClient MyService= 新的WebService1.WebService1SoapClient

使用visual studio创建的任何Web服务代理都继承自System.Web.Services.Protocols.HttpWebClient协议,该协议实现了CookieContainer
我似乎找到了答案。 在web.config中,您有一个

     <system.serviceModel>
            <bindings>
              <basicHttpBinding>
 <binding name="NameOfWebServiceSoap"/>
         </basicHttpBinding>
            </bindings>
           <client>
              <endpoint address="*AddressOfWebService*" binding="basicHttpBinding" bindingConfiguration="*NameOfWebServiceSoap*" 
    contract="*NameOfWebService.NameOfWebServiceSoap*" name="*NameOfServiceReference*"/>
            </client>
          </system.serviceModel>
看起来是这样的:

    WebService1.WebService1SoapClient MyService=
    new WebService1.WebService1SoapClient();
        MyService.firstMethod(); // this calls the method that sets
 //the "bla" string in the session
    String str=MyService.getErrorMsg();
    System.Diagnostics.Debug.WriteLine("Message "+str);
<binding name="NameOfWebServiceSoap" allowCookies="true"/>

你看你现在错了。我不是在创建一个新的WebService1对象,而是一个新的WebService1SoapClient对象,它是一个完全不同的类。如何将CookieContainer设置为这个类?如果您知道如何共享代码WebService1是名称空间-WebService1SoapClient是您正在创建的实际对象-尝试一些东西-在代码中添加一个检查,以查看myservice是否为System.Web.Services.Protocols.HttpWebClientProtocol{console.WriteLineEyes}或者{console.WriteLineNoo}是否为httwe whaterver如果是这样的话,那么你不能访问CookieContainer会很奇怪,如果不是这样的话,那么我显然站得住脚了,我建议你尝试重新创建web引用噢-我忘了问-这是web服务还是WCF客户端?你是使用添加服务引用,还是添加web引用?