【问题标题】:Avoid deleting files on Azure Cloud Service publish避免删除 Azure 云服务发布上的文件
【发布时间】:2014-12-09 12:41:57
【问题描述】:

我将我的 ASP.NET MVC 应用程序托管为 Azure 云服务。

我在新部署后删除用户上传的图片时遇到问题。

上传的图片保存到自定义特殊文件夹WebProject/UserFiles/MedicalCenterImages

下面我提供了我的项目文件夹结构。

我发现并调查了几个与我的相关的问题

并弄清楚,我应该在 .csproj 文件中添加 SkipDelete 规则。

<Target Name="AddCustomSkipRules">
<Message Text="Adding Custom Skip Rules" />
<ItemGroup>
  <MsDeploySkipRules Include="SkipUserFilesFolder">
    <SkipAction>Delete</SkipAction>
    <ObjectName>filePath</ObjectName>
    <AbsolutePath>UserFiles</AbsolutePath>
  </MsDeploySkipRules>
</ItemGroup>
</Target>

但我不完全理解在我的情况下应该编辑哪个文件? (MaxPatient.Web.csproj 或 MaxPatientCloudService.ccproj 或任何其他文件)

我总是发布我的 MaxPatientCloudService 项目。

如果有任何帮助,我将不胜感激。

谢谢:)

【问题讨论】:

    标签: c# asp.net .net azure azure-cloud-services


    【解决方案1】:

    我不确定这是否适用于持续部署,但从 VS 手动部署的解决方案是将要保留的服务器文件放在 App_Data 文件夹中。

    VS / Azure 的标准发布设置允许您:

    “删除目的地的附加文件” 和 "排除 App_Data 文件夹中的文件"

    这意味着您可以清除项目中的冗余项目文件,而不会影响实时应用程序中特定的文件和数据

    一个可能的缺点是限制对 App_Data 的公共访问以及将 App_Data 文件夹用于一般存储目的 - 另请参阅有关该问题的帖子。

    Images that are in App_Data folder not shown in browser

    【讨论】:

      【解决方案2】:

      转到发布设置 -> 展开文件发布选项 -> 并取消选中在目标位置删除其他文件的框。

      【讨论】:

      • 这仅适用于网络应用程序。这不适用于云服务。
      【解决方案3】:

      每当您发布到 Azure 云服务时,都会创建新的 VM。 如果我不希望 Azure 删除空白文件夹,我通常会在文件夹中添加一个虚拟文件。

      理想情况下,您要对 Staging 进行惩罚。然后将分期与生产交换,以便您可以最大限度地减少我们站点的停机时间。

      此外,您需要在 Azure 云服务中至少有两个实例。一个实例无法访问其他实例中的文件夹。

      上传的图片正在保存到自定义特殊文件夹中 WebProject/UserFiles/MedicalCenterImages

      对于场景,您需要将客户图像保存在 Blob Storage(或 SQL Azure)中,以便所有实例都可以读取/写入图像。

      注意:当 Azure 回收实例(无论出于何种原因)时,它会从原始上传的包创建一个新 VM。因此,我们不应该将数据保存在 Web 服务器的文件夹中。

      【讨论】:

        【解决方案4】:

        Azure 云服务部署通常(使用 VIP 交换到 prod 插槽的暂存插槽)创建新的虚拟机 (VM)。您只能计划实际 MVC 项目中的内容文件以部署到新 VM。用户上传不会在部署后继续存在。您需要将上传的文件存储在 Azure BLOB、数据库或使用 Azure 网站而不是云服务。

        【讨论】:

        • 感谢您的回答。是不是在每次部署(作为云服务)之后,Azure 都会创建一个新的 VM,重新配置 IIS 并在其上发布应用程序?
        • 是 - 部署在新 VM 上运行完整配置以安装和配置 IIS,然后将网站或 Web 服务(辅助角色)添加到 IIS。
        • 这是不对的。我们保存了所有的用户数据,它工作正常。我曾经遇到过这个问题,但很快意识到这是文件发布设置的问题。转到发布设置 -> 展开文件发布选项 -> 并取消选中删除目标位置的其他文件的框。
        • @Amitesh:数据在更新之间仍然存在可能是真的,但您正在玩一场危险的游戏。任何来宾操作系统更新(大约每月一次)或 VM 硬件故障都将导致重新配置 VM,并且本地磁盘上的所有用户生成的内容都将永久丢失。您绝对应该使用 Azure BLOB 存储或一些衍生产品(例如,您附加 OnStart 的 page-blob 支持的 vhd)。
        • @mellamokb 我已经实现了我的所有代码。无法更改为使用 azure blob 存储。难道我们没有其他选择吗?每次我的图像被删除。如果我通过 RDP 上传我的内容,它也会在几天内恢复。感谢您的帮助!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-15
        • 1970-01-01
        • 2013-02-15
        • 2017-04-30
        • 1970-01-01
        相关资源
        最近更新 更多