我正在使用VS2010,asp.net c#。
我有一个像这样声明的WebMethod
[WebMethod(EnableSession = true)]
public String getErrorMsg()
{
if (HttpContext.Current.Session["error"] == null) return "empty";
else return ((String)(HttpContext.Current.Session["error"]));
}
在System.Web.Services.WebService类内部(继承)。
在另一个WebMethod中,我设置了这个消息,让我们假设它就像这个
[WebMethod(EnableSession = true)]
public void firstMethod()
{
HttpContext.Current.Session["error"] ="bla";
}
在另一个项目中,我为此WebService添加了一个Service Refrence。 然后我尝试使用它:
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);
Str是“空的”;
在第一种方法中,“bla”字符串设置为会话。只要我在这个方法中,我就可以使用会话存储的数据。 当我再次调用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版本中使用。
有谁知道如何在网络服务中保存会话数据?
答案 0 :(得分:0)
我似乎找到了答案。 在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>
在绑定名称下添加以下内容:
allowCookies="true"
所以它看起来像这样:
<binding name="NameOfWebServiceSoap" allowCookies="true"/>
答案 1 :(得分:-1)
我不得不认为你错了两个原因
您在网络服务代理类
上使用 newWebService1.WebService1SoapClient MyService = 新 WebService1.WebService1SoapClient();
System.Web.Services.Protocols.HttpWebClientProtocol