我有一个使用ASP.NET 4.5 / C#构建的Web应用程序,并作为Web应用程序托管在azure中。该站点允许用户上传PDF文件,然后将其存储在azure blob容器中,以后可以根据需要通过网站下载。到目前为止一切都很好,一切都很好。
我们现在有一个新要求,涉及使用自定义win32可执行文件处理这些文件,并且网站必须知道处理是否成功。这个exe有一个安装文件,必须先安装在目标机器上才能使用它。
我一直在思考如何构建此功能。我遇到过很多文章,告诉我们需要一个工作者角色,或者需要一个虚拟机。但所有文章似乎都非常抽象。
鉴于可执行文件的安装程序需要手动干预,我认为Azure VM是可行的方法。但是,网络应用程序将如何与此进行通信。如何通过流程结果通知Web应用程序?
答案 0 :(得分:0)
您无法在Azure Web App中安装此类软件,因为Web应用程序是沙盒式的。因此,您将无法运行该设置exe
。
对于此类处理,您需要在虚拟机或Web /辅助角色中运行应用程序的该部分。
答案 1 :(得分:0)
但是网络应用程序将如何与此进行通信。如何通过流程结果通知Web应用程序?
Azure Queue storage可以满足您的要求。它可以在应用程序组件之间提供云消息。您的VM可以将流程结果写入队列,您的Web应用程序可以从同一队列中读取流程结果。
要向队列添加新消息,可以参考以下代码。
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Create the queue if it doesn't already exist.
queue.CreateIfNotExists();
// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
queue.AddMessage(message);
在您的Web应用程序中,您可以创建QueueTrigger WebJob,如果任何新消息已添加到队列中,作业将立即执行。
public static void ProcessQueueMessage([QueueTrigger("myqueue")] string processResult, TextWriter log)
{
//You can get the processResult and do anything needed here
}