我想知道是否有办法上传/下载 blob;在不使用 webrole 的情况下添加删除视图元数据?如果我的应用程序有很多 gui,那么会有多个 webroles 吗?在我看到的任何地方,webrole 的文件 default.aspx.cs 都与基于事件的 blob 有关;这很好,但是如果我的 gui 更复杂怎么办?
3 回答
Blob 可通过 REST 调用访问,因此您可以根据需要使用本地桌面应用程序实际操作 Blob,甚至可以使用 PHP 或 Java 编写。
至于 webroles:每个角色只是在某个服务器上运行的虚拟机。Web 角色就像工作角色一样,只是增加了 IIS。如果你有一个网站,你可以把整个网站放在一个单独的 webrole 中。如果您需要扩展它以处理更多用户,您可以创建多个该 webrole 的“实例”——然后您网站的所有请求都会发送到各个实例,每个实例运行相同的代码。(是的,对于给定的应用程序,您可以有多个 webrole - 这可能是实用的,具体取决于您网站的复杂性,或者如果您为管理员和访问者提供完全不同的 UI)。
无需使用 Web 角色即可访问 Azure 存储(Blob 或其他)。您可以使用辅助角色,甚至可以从桌面上运行的 Windows 窗体应用程序或未在 Azure 上运行的 Web/服务应用程序访问它。
有关如何访问 Azure 存储的信息,请参阅 Azure SDK 的 StorageClient 文档 - 这非常简单。
不需要 Azure 项目或其他角色即可使用 blob。如果要在 .Net 项目中使用 Azure 客户端,可以将配置添加到应用设置部分并引用它。Azure 客户端是休息调用的包装器。他们有一些请求签名步骤,这使得使用简单的 webrequest 难以实现调用。
<add key="AzureBlobStorage" value="AccountName=youraccountname;AccountKey=YOURKEYeZgfgdfg==;DefaultEndpointsProtocol=https"/>
您可以获取 blob 客户端:
public CloudBlobClient GetBlobClient()
{
var accountBlob = ConfigurationManager.AppSettings["AzureBlobStorage"];
var account = CloudStorageAccount.Parse(accountBlob.ToString());
return account.CreateCloudBlobClient();
}
public CloudBlob GetBlob(BlobItem blobItem)
{
var client = GetBlobClient();
var cloudBlobContainer = client.GetContainerReference(blobItem.ContainerReference);
return cloudBlobContainer.GetBlobReference(blobItem.FileName);
}
BlobItem 只是一个包装器。基本上,您需要文件夹名称和文件名来访问 blob。
public class BlobItem
{
[Required]
[Display(Name = "Container")]
public string ContainerReference { get; set; }
[Required]
[Display(Name = "File name")]
public string FileName { get; set; }
[Required]
[UIHint("MultilineText")]
public string Content { get; set; }
/// <summary>
/// to use in stream mode
/// </summary>
public Stream Stream { get; set; }
}