0

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

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

    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 项目中访问该文件。

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

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

MVC 应用程序和控制台应用程序都在同一台服务器上运行。

4

1 回答 1

1

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

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

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

而且他们俩都检查调用程序集。不是根执行程序集。

于 2016-12-12T10:13:28.093 回答