0

我正在使用 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 版本中使用过的。

有谁知道如何在 webService 中保存 Session 数据?

4

2 回答 2

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"/>
于 2012-08-15T09:37:41.503 回答
-1

我不得不认为你被误认为有两个原因

  1. 您正在使用的网络服务代理类

    WebService1.WebService1SoapClient MyService= new WebService1.WebService1SoapClient();

  2. 您使用 Visual Studio 创建的任何 Web 服务代理都继承自System.Web.Services.Protocols.HttpWebClientProtocol实现 CookieContainer()
于 2012-08-14T15:39:56.023 回答