Wie ein Session / Host-Objekt für beide Anwendung eines Fensters und in Benutzung befindlichen Bahn zur Verfügung zu stellen?

StackOverflow https://stackoverflow.com/questions/236362

Frage

Ich habe eine Web-Anwendung, die starke Nutzung des Sitzungsstatus stellt Informationen über die aktuellen Benutzer zu speichern, ihre persönlichen Einstellungen, ihren Sitzungsverlauf aufzeichnen und so weiter.

ich gefunden habe, mich Abrufen dieser Sitzung Informationen in meinem Business-Schicht, etwa so:

((UserSession)HttpContext.Current.Session["UserSession"]).User.Info

Dies stellt ein Problem - irgendwann in der Zukunft meiner Anwendung wird einen Windows-Client hat, die offensichtlich nicht den Web-Session Zustand verweisen können. Also muss ich einen Host oder maßgeschneiderte Session-Klasse, die ich in meinem Business-Schicht verweisen kann, die Agnostiker ist, ob die Anwendung auf dem Web-oder Desktop ausgeführt wird. So etwas wie:

IHost.User.Info

Hinter den Kulissen wird die Web-Implementierung nutzt offensichtlich die Sitzungsstatusinformationen zu speichern, aber ich brauche diese aus meiner Business-Schicht zu verstecken. Hat jemand dieses Problem gelöst oder bekam jede practival Ratschläge, wie man am besten, diesen Ansatz?

Hilfe geschätzt.

War es hilfreich?

Lösung

Unter der Annahme, dass die Business-Schicht eine separate DLL ist, würde ich nie einen Verweis auf System.Web und in Folge hinzufügen Ich würde nie direkt das Session Objekt verwenden. Dies würde zu einer anderen Gestaltung der Business-Schicht führen und der exponierten Schnittstellen zu einem Client (entweder Web oder WinForms).

Das heißt, als eine schnelle Abhilfe würde ich vorschlagen, eine Wrapper-Klasse in Ihrer Business-Schicht zu schreiben, die das Session Objekt aus dem Code verbergen. Ihre Anrufe von Code wird so etwas wie dieses:

((UserSession) DualContext.Current["UserSession"]).User.Info

und die Wrapper-Implementierung wird in etwa so (nicht fertig gestellt und getestet) werden:

public class DualContext 
{
   private Dictionary<string, object> winFormsSession = new Dictionary<string, object>();
   private static readonly DualContext instance = new DualContext();

   public static DualContext Current
   {
      get {  return instance; }
   }

   public object this[string key]
   {
      get 
      {
         if (HttpContext.Current != null)
            return HttpContext.Current.Session[key];
         else
            return winFormsSession[key];
      }
      set 
      {
         if (HttpContext.Current != null)
            HttpContext.Current.Session[key] = value;
         else
            winFormsSession[key] = value;
      }
   }
}

Andere Tipps

Es wäre eine Neugestaltung der Architektur nehmen, aber wenn Sie wechseln von der Verwendung des Sitzungsstatus zu Benutzerprofilen Sie dann auf Client Application Service nutzen, um die Informationen zu teilen.

http://msdn.microsoft.com/en-us/library /bb384297.aspx

Ich denke, Sie brauchen einen Webservice oder Restfull-Dienst zu erstellen. Der Dienst wird eine XML-Datei darstellt, Ihre Benutzerinformationen zurück. Sie können den Dienst Widerrist von Ihnen Windows oder Web-Anwendung aufzurufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top