2

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

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

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

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

4

4 回答 4

3

我想通了-这是怎么做的:

Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + @"\", @"approot\FileTemplates\");
于 2013-08-29T08:47:45.877 回答
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);
}
于 2013-08-28T14:01:34.897 回答
0

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

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

于 2013-08-28T13:53:30.737 回答
-1

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

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

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

于 2013-08-29T01:12:41.833 回答