2010-04-23 10 views
5

Ich habe eine asp.net-Anwendung und Webdienste (Asmx), die in der gleichen Anwendung, aber nicht im selben Ordner der aspx-Dateien befinden. Ich habe auch eine Winform-Anwendung, die die Webdienste verwendet. Ich habe die Webservice-Methoden mit [WebMethod (EnableSession = true)] markiert, aber ich bin nicht in der Lage, die gleichen Sitzungswerte zu teilen, die sich in den Webservices auf der Anwendung befinden. Die winform Anwendung hat Zugriff auf die sessionID von der Anwendung und ich bin mit dem folgenden CodeSharing Session zwischen Webservice und asp.net-Anwendung

Uri uri = new Uri(ServerServiceUrl); 
_cookieContainer = new CookieContainer(); 
_cookieContainer.Add(new Cookie("ASP.NET_SessionId", SessionID, "/", uri.Host)); 

Meine Frage ist: Gibt es etwas, das ich fehle oder falsch machen, dass ich nicht die Anwendung sessioin von dem Web Service zugreifen kann?

+3

Warum brauchen Sie Sitzungen in einem Webservice? Speichern Sie einen temporären Zustand? In diesem Fall sollten IMO-Dienste zustandslos sein, und damit würde Ihr Problem nicht bestehen ... – Sunny

+0

Vereinbar, müssen Sie an Webservices wie statische Klassen denken – Pierreten

+0

Meine Aspx-Dienste, genau wie die Anwendung, sprechen Sie mit Java Webservices und Wenn die Anwendung die Dienste aufruft, werden die Werte für einen bestimmten Zeitraum zwischengespeichert. Anstatt die Java-Dienste immer wieder aufzurufen, möchte ich die Daten verwenden, die von der Anwendung zwischengespeichert wurden. Deshalb möchte ich die Sitzung teilen. –

Antwort

1

Ich kann nicht beleuchten, warum Sie nicht in der Lage sind, die Winforms App die Sitzung "entführen" zu lassen - was Sie tun, sieht aus, als sollte es genau das tun, was Sie wollen.

Ich wollte nur vorschlagen, dass Sie den Anwendungscache (zum Zwischenspeichern der Antwort von Ihrem Java-Dienst) anstelle des Sitzungsspeichers des Benutzers verwenden. Dies hat folgende Vorteile: -

  • a) Wenn die im Cache gespeicherten Informationen zu mehr als einem einzelnen Benutzer anwendbar ist (zB Zugriff gesteuert), dann die gleiche Cache gespeicherten Informationen können für mehrere Benutzer verwendet werden und nicht abgeholt für jede Sitzung .
  • b) Sie haben mehr Kontrolle darüber, wie lange Dinge gecached werden, als Sie mit Sitzungsdaten erhalten (die nur für die Lebensdauer Ihrer Sitzung leben und die Gefahr wachsen und wachsen, wenn Sie vergessen zu löschen alte Information)
  • c) Wenn es Ihnen nicht gelingt, das Session-Hijacking zum Laufen zu bringen, können Sie von jeder Sitzung aus auf Daten im Cache zugreifen.
0

Haben Sie versucht, Ihre Webservice-Klasse von System.Web.SessionState.IRequiresSessionState zu erben?

Es wird normalerweise für HTTP-Handler verwendet, aber Webservices scheinen die gleiche Marker-Schnittstelle zu verwenden.

+0

Ich habe das nicht versucht, aber wie ich es verstehe, macht das Hinzufügen von [WebMethod (EnableSession = true)] zu jeder Methode die Sitzung aktiviert. Ich habe eine Session-Variablen zur Verfügung, ist nur, dass es eine neue Sitzung ist und nicht die Sitzung wurde bereits in der Anwendung erstellt. –

+0

Nur realisiert. Rufen Sie den Webservice von demselben Computer aus auf? in diesem Fall sind Sie sicher, dass Sie "uri.Host" und nicht die Loopback-Schnittstelle verwenden sollten, wenn Sie Ihren Cookie einrichten? – Radu094

Verwandte Themen