Asp.net 将会话数据保存在System.Web.Services.WebService的WebMethod中
我正在使用VS2010,asp.NETC 我有一个像这样声明的WebMethodAsp.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
[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引用?