2016-12-09 2 views
0

Ich habe eine Lösung, die ein MVC-Projekt und eine Windows-Konsolenanwendung hat. Beide Projekte teilen sich das gleiche Backend-Projekt, das Daten lädt und speichert.Austausch von Daten zwischen MVC- und Windows-Anwendung

Ich muss die Daten aus diesen beiden Projekten austauschen. Deshalb habe ich beschlossen, Isoliert Umfang zu nutzen:

private string LoadInstallationFile() 
{ 
    IsolatedStorageFile isoStore = IsolatedStorageFile.GetMachineStoreForDomain(); 
    if (!isoStore.FileExists(ClientSettingsFile)) return null; 
    /* do stuff */ 
} 


private void SaveInstallationFile() { 
    IsolatedStorageFile isoStore = IsolatedStorageFile.GetMachineStoreForDomain(); 
    using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(ClientSettingsFile, FileMode.CreateNew, isoStore)) 
    { 
    using (StreamWriter writer = new StreamWriter(isoStream)) 
    { 
     writer.WriteLine(data); 
    } 
    } 
} 

nun im Mvc-Projekt zu speichern ich die Daten mit „SaveInstallationFile()“. Ich kann über dieses mvc-Projekt auf diese Datei zugreifen.

Aber wenn ich versuche, mit dem anderen (Konsolen-) Projekt auf die Daten zuzugreifen, existiert die Datei nicht.

Wie kann ich Daten zwischen diesen beiden austauschen? (Es gibt eine große Chance, dass beide unter verschiedenen Benutzeranmeldeinformationen ausgeführt, so GetUserStore ...() IMHO nicht funktionieren würde.

Sowohl die MVC-Anwendung und die Konsole-Anwendung läuft auf demselben Server.

+0

Die auf Ihrer MVC-App gespeicherten Dateien werden auf dem Server gespeichert. Ihre Windows App läuft auf Ihrem lokalen Rechner. Am besten speichern Sie Ihre Informationen in einer Datenbank, auf die von beiden Standorten aus zugegriffen werden kann. – krillgar

+0

@krillgar Ich habe das geklärt. Sie laufen beide auf demselben Server. Die Windows-Anwendung ist ein Timer-Job, der Wartungsarbeiten auf dem Server –

Antwort

1

Wenn Sie wirklich isolierte Speicher-API verwenden müssen, können Sie GetMachineStoreForAssembly verwenden (wenn dieser Code in der gleichen Assembly für beide Projekte verwendet wird). Derzeit verwenden Sie verschiedene Speicher für verschiedene Anwendungen. Aber um ehrlich zu sein würde ich es bevorzugen Verwenden Sie eine Datenbank oder einen benutzerdefinierten konfigurierbaren freigegebenen Festplattenpfad, da es sich um eine flexiblere Lösung handelt

ist weniger restriktive Version von GetMachineStoreForDomain (beide erfordern Code in derselben Baugruppe, aber GetMachineStoreForDomain erfordert es auch in der gleichen Anwendung zu sein). Sie können MSDN-Dokumentation überprüfen:

  • Erste Methode (GetMachineStoreForAssembly) entspricht der GetStore(IsolatedStorageScope.Assembly | IsolatedStorageScope.Machine, null, null)
  • Zweite Methode entspricht der GetStore(IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain | IsolatedStorageScope.Machine, null, null); (so enthält es eine zusätzliche Flag, das ist, warum es restriktiver ist)

Und auch beide prüfen Anrufaufbau. Nicht root ausführende Assembly.

+0

Ich habe keinen Zugriff auf diesen Rechner. Ich dachte, die übergeordnete Assembly würde verwendet, nicht die Back-End-Assembly für GetMachineStoreForAssembly() –

+1

Edited-Antwort, um es zu klären (GetMachineStoreForDomain ist restriktiver als GetMachineStoreForAssembly) – oryol

Verwandte Themen