Frage

Hallo habe ich in isoliertem Raum eine verborgenen Informationen zu speichern. Dafür verwende ich System.IO.Isolated Klasse wie

IsolatedStorageFile isf =     System.IO.IsolatedStorage.IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
Stream writer = new IsolatedStorageFileStream(filename, FileMode.Create, isf);

IFormatter formatter = new BinaryFormatter();
formatter.Serialize(writer, appCollection.ToString());

writer.Close();

Es funktioniert in Windows XP in Ordnung, aber auf der Produktion des Server, die Windows 2003 zeigt es Ausnahme

System.IO.IsolatedStorage.IsolatedStorageException. Kann das Speicherverzeichnis erstellen

Ich habe eine Jede volle Kontrolle Berechtigungen in meinem asp.net Projektordner. Achtung CSoft.Core ist ein persönlicher Rahmen geschaffen von mir.

Das ist mein Stack Trace:

  

[IsolatedStorageException: Kann nicht das Speicherverzeichnis erstellen.   (Ausnahme von HRESULT: 0x80131468)]
  System.IO.IsolatedStorage.IsolatedStorageFile.nGetRootDir (IsolatedStorageScope   scope) +0
  System.IO.IsolatedStorage.IsolatedStorageFile.InitGlobalsNonRoamingUser (IsolatedStorageScope   scope) +97
  System.IO.IsolatedStorage.IsolatedStorageFile.GetRootDir (IsolatedStorageScope   scope) +137
  System.IO.IsolatedStorage.IsolatedStorageFile.GetGlobalFileIOPerm (IsolatedStorageScope   scope) +213
  System.IO.IsolatedStorage.IsolatedStorageFile.Init (IsolatedStorageScope   scope) +56
  System.IO.IsolatedStorage.IsolatedStorageFile.GetStore (IsolatedStorageScope   Umfang, Art domainEvidenceType, Typ assemblyEvidenceType) +59
  CSoft.Core.IO.StorageHelper.Save (String Dateiname, String-Gehalt) in   c: \ Projectos \ FrameworkCS \ CSoft.Core \ IO \ StorageHelper.cs: 18
  CSoft.Web.UI.ViewStateHelper.SerializeViewState (Httpcontext Kontext,   Objekt-Zustand) in   c: \ Projectos \ FrameworkCS \ CSoft.Web.Controls \ Web \ UI \ ViewStateHelper.cs: 65   CSoft.Web.UI.Page.SavePageStateToPersistenceMedium (Object-Zustand) in   c: \ Projectos \ FrameworkCS \ CSoft.Web.Controls \ Web \ UI \ Page.cs: 302
  System.Web.UI.Page.SaveAllState () +236
  System.Web.UI.Page.ProcessRequestMain (Boolean   includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)   1099

War es hilfreich?

Lösung 3

Ich änderte IsolatedStorage-Datei

mit (IsolatedStorageFile isoStore = IsolatedStorageFile.GetMachineStoreForAssembly ())             {}

Und diese Arbeit.

Andere Tipps

Ich weiß, dass dieser Benutzer ihr Problem bereits gelöst, aber für andere nach einer Antwort suchen. Dieser Beitrag ist nicht perfekt, aber es wird Ihnen zeigen, was Sie brauchen, dieses Problem zu lösen.

Mit asp.net GetMachineStoreForAssembly scheint in den meisten Fällen zu arbeiten, und es wahrscheinlich die gewünschte Betriebsart, wenn getrennte Lagerung von einem Web-App. Denn selbst wenn Sie GetUserStoreForAssembly verwenden, wird es durch das Benutzerkonto ausgeführt wird, die asp.net app isoliert werden, und es wird immer das gleiche für jeden Website-Benutzer sein, es sei denn, Sie irgendwie jede Anmeldung zu einem Fenster Benutzerzuordnung (ach ja, und wenn Sie tun dies dann wäre es funktioniert).

Das Problem ist, dann Sie versuchen, GetUserStoreForAssembly zu verwenden, weil es einem Benutzer Rechte an isolierten Speicher benötigt, nicht die Standard-IIS-Benutzer für Anwendungen Rechte für diese bekommen, denke ich.

Es gibt 2 Lösungen:

  1. verwenden GetMachineStoreForAssembly

  2. Wenn Sie verwenden müssen GetUserStoreForAssembly die App gesetzt als Benutzer mit Rechten auszuführen. Dies wird nicht durch Ordnerberechtigungen gelöst. Es gibt mehr Möglichkeiten, Sicherheitseinstellungen zu erhalten. (IIS7) Sie es im App-Pool einstellen können, oder unter Grundeinstellungen> Connect As oder unter authenication> Anonym authenication. Ich bin nicht sicher, welche Rechte der Benutzer benötigt, aber das werden Sie in die richtige Richtung gehen.

Hier finden Sie einige Bonus-Code, als Sie Ihr Problem kann helfen herauszufinden:

   Dim storageFile As IsolatedStorageFile
    If Request("storage") = "user" Then
        storageFile = IsolatedStorageFile.GetUserStoreForAssembly()
    Else
        storageFile = IsolatedStorageFile.GetMachineStoreForAssembly()
    End If

    Response.Write(storageFile.GetType.GetField("m_RootDir", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance).GetValue(storageFile).ToString())

GetUserStoreForAssembly ist hier: C: \ Dokumente und Einstellungen \ Gabe \ Lokale Einstellungen \ Anwendungsdaten \ IsolatedStorage \

GetMachineStoreForAssembly ist hier: C: \ Dokumente und Einstellungen \ All Users \ Anwendungsdaten \ IsolatedStorage \

Wenn es läuft auf IIS und Anwendungspoolidentität ist NetworkService-, können Sie versuchen, die erweiterten Einstellungen von Anwendungspool zu gehen und „Load Benutzerprofil“ Wert auf „True“ gesetzt. Arbeitete für mich.

Wie sind Sie mit diesem auf dem Server? Wenn Sie es als Dienst auf dem Server ausführen, können Sie ein Problem mit dem Benutzer zugewiesen, um den Dienst auszuführen. Stellen Sie sicher, dass Sie testen, mit dem gleichen Benutzer Sie auf dem Produktionsserver verwenden.

Wie John Saunders in seinem Kommentar fragt, bitte mehr von der Stack-Trace veröffentlichen, einschließlich, falls möglich, die Linien der expception werfen.

Allerdings mit einigen psychischen Debug-Fähigkeiten , ich werde ein paar wilden ersticht hier nehmen, die helfen kann:

  1. IsolatedStorageException kann sowohl getStore und die IsolatedStorageFileStream Konstruktor
  2. „Es funktioniert in Windows XP fine“ - wenn Sie die Website in Visual Studio in Web-Server unter dem (wahrscheinlich admin) Anmeldeinformationen ausgeführt wird gebaut laufen, aber sicherlich als Benutzer mit einem Profil und damit ein isolierten Speicherordner.
  3. „Aber auf der Produktion wirft es eine Ausnahme“ - wenn es entweder unter „Netzwerkdienst“ ausgeführt wird oder ein anderes Konto, das kein Profil hat, oder Interagieren mit Desktop-Typ Rechten (nicht sicher, ob der Besonderheiten - es ist vor allem der Mangel an einem Profil, das ein Killer ist).

Was für ein Konto ist die Website unter in prodution läuft? Ich nehme an, es ist nicht ein Benutzer, der sich anmelden an den Server in der Lage ist und die Interaktion mit dem Dateisystem richtig?

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