在 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
(如果此代码在两个项目的同一程序集中共享)。目前,您为不同的应用程序使用不同的存储。但老实说,我更愿意使用数据库或自定义可配置共享磁盘路径,因为它看起来更灵活。
GetMachineStoreForAssembly
是 GetMachineStoreForDomain
的限制较少的版本(它们都要求代码在同一个程序集中,但 GetMachineStoreForDomain
要求它也在同一个应用程序中)。您可以查看 MSDN 文档:
- 第一种方法 (
GetMachineStoreForAssembly
) 等同于 GetStore(IsolatedStorageScope.Assembly |
IsolatedStorageScope.Machine, null, null)
- 第二种方法等同于
GetStore(IsolatedStorageScope.Assembly |
IsolatedStorageScope.Domain | IsolatedStorageScope.Machine,
null, null);
(因此,它包含一个附加标志,这就是它更具限制性的原因)
而且他们都检查调用程序集。不是 root 执行程序集。
我有一个包含 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
(如果此代码在两个项目的同一程序集中共享)。目前,您为不同的应用程序使用不同的存储。但老实说,我更愿意使用数据库或自定义可配置共享磁盘路径,因为它看起来更灵活。
GetMachineStoreForAssembly
是 GetMachineStoreForDomain
的限制较少的版本(它们都要求代码在同一个程序集中,但 GetMachineStoreForDomain
要求它也在同一个应用程序中)。您可以查看 MSDN 文档:
- 第一种方法 (
GetMachineStoreForAssembly
) 等同于GetStore(IsolatedStorageScope.Assembly | IsolatedStorageScope.Machine, null, null)
- 第二种方法等同于
GetStore(IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain | IsolatedStorageScope.Machine, null, null);
(因此,它包含一个附加标志,这就是它更具限制性的原因)
而且他们都检查调用程序集。不是 root 执行程序集。