Azure-如何访问WorkerRole的内容文件
本文关键字:WorkerRole 文件 访问 何访问 Azure- | 更新日期: 2023-09-27 18:29:31
我正在编写一个用于发送电子邮件的工作角色。它有一些带有build action = content
和copy to output = Copy Always
的电子邮件模板html文件
如何从WorkerRole的代码访问这些文件?
我不想将这些文件存储在blob中,因为我需要尽快上传此服务,并且我必须能够轻松编辑这些电子邮件模板,而无需为此编写额外的代码。
编辑:伙计们,我说的是Azure。这不适用于加载当前运行程序集的文件夹的常规方法,因为这将为您提供位于不同位置的Azure主机进程。
我想好了-下面是如何做到的:
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。模板之类的东西应该非常快,多个角色可以共享。