Announcement

Collapse
No announcement yet.

Cookies im WebService

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Cookies im WebService

    Hallo Community,
    kann man demm Cookies in einem WebService verwenden? Wenn das nicht so leicht geht, gibt es dann eine Möglichkeit, die Cookies zu übertragen -- <i>return HttpCookie</i> ???<br>

    Falls man auf andere Konstrukte zurückgreifen kann, wäre ich daran auch interessiert.

    Danke, Andreas

  • #2
    Hallo,

    die generierte Proxy-Klasse für den Web Service kann in der Standard-Konfiguration nicht mit Cookies umgehen und unterstützt somit nicht die Zustandsverwaltung des Session-Objekts von ASP.NET, wenn der Web Service diese Fähigkeit mit <b>EnableSession</b> anfordert. Damit das Proxy-Objekt zur Laufzeit mit den Sessions umgehen kann, muss immer dann eine neue Instanz der <b>CookieContainer</b>-Klasse aus dem Namespace System.Net erzeugt und der Eigenschaft CookieContainer zugewiesen werden, wenn diese Eigenschaft noch keine Objektinstanz verwaltet:
    <pre>
    Private iCnt As Integer = 1
    Dim aWS As New localhost.OSServiceSession()
    <br>
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    aWS.Timeout = 5000
    ' Proxy-Objekt soll mit dem vom Web Service gelieferten Cookie hantieren
    If aWS.CookieContainer Is Nothing Then
    aWS.CookieContainer = New System.Net.CookieContainer()
    End If
    ListBox1.Items.Add(String.Format("GetIncCounter: {0}; GetSessionID: {1}", _
    aWS.GetIncCounter, aWS.GetSessionID))
    StatusBar1.Text = String.Format("Web Service zum {0}. Mal aufgerufen", iCnt)
    iCnt += 1
    End Sub
    </pre>
    Der dazu passende Web Service sieht so aus:
    <pre>
    <WebMethod(EnableSession:=True, Description:="Liefert Session.SessionID zurück")> _
    Public Function GetSessionID() As String
    Me.Context.Current.Request.SaveAs(Me.Server.MapPat h("log.txt"), True)
    Return Me.Session.SessionID
    End Function
    </pre&gt

    Comment


    • #3
      Danke für deine schnelle Antwort, aber ich komme damit noch nicht klar.
      Hier ist mein Code. Der funktioniert ja nicht. Aber wie kann ich den umsetzen?
      <pre>
      public string SetUserCookie(bool presistent, SSO_User user)
      {
      try
      {
      HttpCookie auth = new HttpCookie("CSBoard_SSO");
      //presistentes Cookie anlegen (aus Sicherheitsgründen nur einen Monat)
      if (presistent)
      auth.Expires = DateTime.Now.AddMonths(1);
      auth.Values["username"] = Encrypt(user.username);
      auth.Values["password"] = Encrypt(user.password);

      HttpContext.Current.Response.AppendCookie(auth);
      HttpContext.Current.Response.Flush();

      return "OK";
      }
      catch(Exception ex)
      {
      LogError(ex.Message, ex.StackTrace, "UserIsAuthenticated");
      return "";
      }
      }
      </pre>

      Nochmal was, kann ich ein Cookieobjekt mittels Webservice übertragen (serialisieren)

      Comment

      Working...
      X