我有一个托管在 Azure 上的 MVC Web 应用程序作为云服务,它将文件本地存储在角色环境中。在将服务移动到具有两个实例的高可用性之前,这是一个可行的解决方案,但现在文件仅写入它们上传的环境,因此如果用户由于负载均衡器而跳转到另一个实例,这些文件将变得不可用。
如果我登录到实例 [0],是否有任何方法可以写入实例 [1] 的其他角色环境。会话使用 Redis 缓存跨两个实例存储。目前我写入角色环境的代码如下:
public static string ImportContentPackage(string iEnVar, string fileName, HttpPostedFileBase zipFile, string companyName)
{
//Get the Local Storage place.
LocalResource tempDirectory = RoleEnvironment.GetLocalResource("TempZipDirectory");
//Now System.IO to store the Zip file in there. Get the file name without the extension.
string actualFileName = fileName.Split('.')[0];
System.IO.Directory.CreateDirectory(tempDirectory.RootPath + "\\" + companyName + "\\" + actualFileName);
string holderDir = tempDirectory.RootPath + @"\" + companyName + @"\" + actualFileName;
try
{
//Clear out any directories that might be there.
CleanImportDirectory(holderDir);
//Save the zip into the package to enable unzipping.
BinaryReader br = new BinaryReader(zipFile.InputStream);
File.WriteAllBytes(tempDirectory.RootPath + "\\" + fileName, br.ReadBytes(zipFile.ContentLength));
// Unzip the content package into a local directory for processing
SCORM.Validation.Handlers.UnZipFile uzh = new SCORM.Validation.Handlers.UnZipFile(tempDirectory.RootPath + "\\" + fileName, holderDir);
SCORM.Validation.Helpers.Result result = uzh.Extract();
if(result.PackageCheckerMessages.Count > 0)
{
holderDir = "";
}
}
catch (System.NullReferenceException npe)
{
}
return holderDir;
}
LocalResource tempDirecory 变量在两个实例上应该相同,因为它们都被命名为 TempZipDirectory。