【问题标题】:Azure webjob how to access hosted site folderAzure webjob如何访问托管站点文件夹
【发布时间】:2015-05-19 05:24:29
【问题描述】:

我们在 Azure 中托管了我们的 ASP.Net 网站。我已经编写了一个连续的网络作业来在队列触发器的后台处理我的一些文件。有时该过程涉及从 url 获取图像并将副本保存在我们网站的预定义文件夹中。

我们已经有了获取图像并保存到主站点代码中的文件夹的功能,所以我正在使用它。

在开发过程中,我手动运行 .exe 以检查触发器是否有效。在图像上传过程之前一切都很好。它无法将路径映射到给定文件夹。代码如下,filepath 变量始终为空,所以我在这里遇到异常并且作业失败。有一个更好的方法吗?这是因为我手动运行了作业,还是我使用了错误的某些功能?

public class MyHelper
{
    public const string UPLOAD_URL = "/Uploads/";

    // other functions
    // ....

    private static void GetFileLocation(string prefix, string imageName, out string fileUrl, out string saveLocation)
    {
        var filename = imageName;

        // filepath is always null
        var filePath = HostingEnvironment.MapPath(UPLOAD_URL);
        fileUrl = Path.Combine(UPLOAD_URL, filename);

        // this here throws the exception because filepath is null
        saveLocation = Path.Combine(filePath, filename);
    }
}

感谢您对此的任何见解。谢谢!!

【问题讨论】:

    标签: c# asp.net azure-webjobs


    【解决方案1】:

    您只能写入您网站的根文件夹。 webjob 驻留在目录中。

    app_data/jobs/continuous/等

    因此,当您映射路径时,请确保您尝试写入网络作业所在网站的根文件夹。还有更多信息here.

    您遇到的问题似乎是 HostingEnvironment.MapPath() 返回一个空值。您可以修改 UPLOAD_URL 以确保您返回的不是 null 吗?要进行调试,您可以在云中运行时始终使用不同 HostingEnvironment.MapPath(UPLOAD_URL) 的 Console.Writeline() 并检查 Webjobs Dashboard 中的输出。

    希望对你有帮助,

    编辑:

    尝试 UPLOAD_URL = "~/Uploads/",因为它看起来像是在搜索虚拟路径。 Source.

    【讨论】:

    • 起初使用~/Uploads/,但在测试开发时它不起作用。最终检查filepath==null,如果为空,则从硬编码的自定义设置路径计算路径......让它工作但不确定这是一个好方法
    • 很高兴你让它工作。可以尝试输出到日志或者webjob控制台调试吗?
    • 您检查路径的想法已经奏效......从那时起就没有遇到任何问题。谢谢。
    【解决方案2】:

    显然你可以写信给%HOME%\site\wwwroot,但这对我不起作用,所以我使用绝对路径写到Azure Web App中的任何地方:D:\home\site\wwwroot

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多