0

MVC プロジェクトと Windows コンソール アプリケーションを含むソリューションがあります。両方のプロジェクトは、データをロードおよび保存する同じバックエンド プロジェクトを共有します。

これら 2 つのプロジェクトのデータを交換する必要があります。したがって、Isolated スコープを使用することにしました。

    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);
    }
  }
}

mvc-project 内で、「SaveInstallationFile()」を使用してデータを保存します。その mvc-project 内からそのファイルにアクセスできます。

しかし、他の (コンソール) プロジェクトを使用してデータにアクセスしようとすると、ファイルが存在しません。

これら2つの間でデータを交換するにはどうすればよいですか? (両方が異なるユーザー資格情報で実行される可能性が高いため、GetUserStore...() IMHO は機能しません。

MVC アプリケーションとコンソール アプリケーションの両方が同じサーバー上で実行されます。

4

1 に答える 1

1

本当に分離ストレージ API を使用する必要がある場合は、使用できますGetMachineStoreForAssembly(このコードが両方のプロジェクトの同じアセンブリで共有されている場合)。現在、アプリケーションごとに異なるストレージを使用しています。しかし正直なところ、より柔軟なソリューションに見えるため、データベースまたはカスタム構成可能な共有ディスク パスを使用することをお勧めします。

GetMachineStoreForAssemblyのより制限の少ないバージョンですGetMachineStoreForDomain(どちらもコードが同じアセンブリにあるGetMachineStoreForDomain必要がありますが、同じアプリケーションにもある必要があります)。MSDN のドキュメントを確認できます。

  • 最初のメソッド ( GetMachineStoreForAssembly) はGetStore(IsolatedStorageScope.Assembly | IsolatedStorageScope.Machine, null, null)
  • 2番目の方法は同等ですGetStore(IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain | IsolatedStorageScope.Machine, null, null);(したがって、1つの追加フラグが含まれているため、より制限的です)

また、どちらも呼び出しアセンブリをチェックします。ルート実行アセンブリではありません。

于 2016-12-12T10:13:28.093 に答える