在MVC和Windows应用程序之间交换数据

时间:2016-12-09 14:43:21

标签: c# asp.net-mvc isolatedstorage isolatedstoragefile

我有一个具有MVC项目和Windows控制台应用程序的解决方案。两个项目共享相同的Backend-Project,用于加载和保存数据。

我需要交换这两个项目的数据。因此我决定使用隔离范围:

    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项目中我使用“SaveInstallationFile()”保存数据。我可以从那个mvc-project中访问该文件。

但是当我尝试使用另一个(控制台)项目访问数据时,文件不存在。

如何在这两者之间交换数据? (两者都很有可能在不同的用户凭据下运行,因此GetUserStore ...()恕我直言不起作用。

MVC-Application和Console-Application都在同一台服务器上运行。

1 个答案:

答案 0 :(得分:1)

如果您确实需要使用独立存储API,则可以使用GetMachineStoreForAssembly(如果此代码在两个项目的同一程序集中共享)。目前,您为不同的应用程序使用不同的存储。但说实话,我更喜欢使用数据库或自定义可配置的共享磁盘路径,因为它看起来更灵活。

GetMachineStoreForAssemblyGetMachineStoreForDomain的限制较少的版本(两者都要求代码在同一个程序集中,但GetMachineStoreForDomain要求它也在同一个应用程序中)。您可以查看MSDN文档:

  • 第一种方法(GetMachineStoreForAssembly)相当于GetStore(IsolatedStorageScope.Assembly | IsolatedStorageScope.Machine, null, null)
  • 第二种方法相当于GetStore(IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain | IsolatedStorageScope.Machine, null, null);(因此,它包含一个额外的标志,这就是为什么它更具限制性)

并且他们两个都检查调用程序集。不是root执行程序集。