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

Exchanging data between MVC- and Windows Application

我有一个包含 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 应用程序和控制台应用程序 运行。

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

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

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

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