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";
}

別のプロジェクトでは、この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);

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 />";

しかし、2つの主な問題があります。

1)私のWebServiceをオブジェクトとして使用することはできません。つまり、この例のように、そのクラスで「new」を使用することはできません。

WebServiceを使用するためにWebService1SoapClientを使用します。

2)WebService1SoapClientオブジェクトにはそのようなものはありません。

この例は、古いvs/.netバージョンで使用されたに違いないと思います。

Webサービスにセッションデータを保持する方法を知っている人はいますか?

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

私はあなたが2つの理由で間違っていると思わなければならないでしょう

  1. Webサービスプロキシクラスでnewを使用しています

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

  2. System.Web.Services.Protocols.HttpWebClientProtocolVisual Studioで作成するWebサービスプロキシは、 CookieContainer()を実装するものを継承します。
于 2012-08-14T15:39:56.023 に答える