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

时间:2013-08-28 13:08:54

标签: c# azure azure-worker-roles

我正在编写工作人员角色来发送电子邮件。它包含一些包含build action = contentcopy to output = Copy Always

的电子邮件模板html文件

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

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

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

4 个答案:

答案 0 :(得分:3)

我明白了 - 这是怎么做的:

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

答案 1 :(得分:1)

有一个构建操作 - 内容没有将文件嵌入到.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);
}

答案 2 :(得分:0)

答案 3 :(得分:-1)

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

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

另一种选择是使用SQL Azure DB。像模板这样的东西应该超级快,多个角色可以共享。