使用azure web app前端在存储在azure blob存储中的PDF文件上运行自定义可执行文件

时间:2017-05-20 00:28:00

标签: azure-web-sites azure-storage azure-storage-blobs

我有一个使用ASP.NET 4.5 / C#构建的Web应用程序,并作为Web应用程序托管在azure中。该站点允许用户上传PDF文件,然后将其存储在azure blob容器中,以后可以根据需要通过网站下载。到目前为止一切都很好,一切都很好。

我们现在有一个新要求,涉及使用自定义win32可执行文件处理这些文件,并且网站必须知道处理是否成功。这个exe有一个安装文件,必须先安装在目标机器上才能使用它。

我一直在思考如何构建此功能。我遇到过很多文章,告诉我们需要一个工作者角色,或者需要一个虚拟机。但所有文章似乎都非常抽象。

鉴于可执行文件的安装程序需要手动干预,我认为Azure VM是可行的方法。但是,网络应用程序将如何与此进行通信。如何通过流程结果通知Web应用程序?

2 个答案:

答案 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
}