Azure-如何访问WorkerRole的内容文件

本文关键字:WorkerRole 文件 访问 何访问 Azure- | 更新日期: 2023-09-27 18:29:31

我正在编写一个用于发送电子邮件的工作角色。它有一些带有build action = contentcopy to output = Copy Always 的电子邮件模板html文件

如何从WorkerRole的代码访问这些文件?

我不想将这些文件存储在blob中,因为我需要尽快上传此服务,并且我必须能够轻松编辑这些电子邮件模板,而无需为此编写额外的代码。

编辑:伙计们,我说的是Azure。这不适用于加载当前运行程序集的文件夹的常规方法,因为这将为您提供位于不同位置的Azure主机进程。

Azure-如何访问WorkerRole的内容文件

我想好了-下面是如何做到的:

Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + @"'", @"approot'FileTemplates'");

有一个构建操作-内容不会将文件嵌入.dll,而是部署到您的程序集目录(通常''bin)中,然后部署到与模板相同的文件夹结构中。这写起来很困惑,所以这里有一个示例:

Project Directory    
    -Templates
       -EmailTemplateA

在编译和部署时,EmailTemplateA将位于以下位置:'bin'Templates'EmailTemplateA

现在我们知道了它的位置,我们需要使用它。下面是一个代码片段,它将加载一个模板,替换一些值,然后发送您的电子邮件

public void SendRegistrationConfirmation(string toAddress, string confirmUrl)
{
   const string subject = "Your Registration";
   //load the template
   var template = File.OpenText(AssemblyDirectory + " ''Templates''NewProgramRegistration.Template").ReadToEnd();
   //replace content in the template
   //We have this #URL# string in the places we want to actually put the URL
   var emailContent = template.Replace("#URL#", confirmUrl);
   //Just a helper that actually sends the email, configures the server, etc
   this.SendEmail(toAddress, subject, emailContent);
}

您可以将模板存储在本地存储中:

http://convective.wordpress.com/2009/05/09/local-storage-on-windows-azure/

您应该重新考虑您的设计。-如上所述,您可以使用本地存储(首先需要将文件复制到那里),然后可以使用System.IO.NET API来操作文件

问题是(正如你所说的,你正在做出改变)-如果您横向扩展,那么现在您有了单独的工作人员角色,他们有自己的"模板"本地副本。您提到不想使用blob存储,但这应该是一个选项,因为它可以作为模板的中心/持久存储库。当然,您可以根据需要在本地复制它们。

另一种选择是使用SQL Azure DB。模板之类的东西应该非常快,多个角色可以共享。