1

我有一个 Azure WebJob,里面有类似的代码:

public class Functions
{
    public static void GenerateImagesForViewer(
    [QueueTrigger("resize-images-queue")] BlobInformation blobInfo,
    [Blob("unprocessed-pdf-storage-container/{BlobName}", FileAccess.Read)] Stream input,
    [Blob("unprocessed-pdf-storage-container/{BlobNameWithoutExtention}-pdf.jpg")] CloudBlockBlob outputPdf)
    {            
        //Do something here
        string connectionString = "myConnectionString";
        TopicClient Client = 
        TopicClient.CreateFromConnectionString(connectionString, "resize- 
        images-topic");
        var topicMessage = new BrokeredMessage(blobInfo);
        Client.Send(topicMessage);
    }

    public static void GenerateImagesForViewerW80(
    [ServiceBusTrigger("resize-images-topic", "SizeW80")] BlobInformation blobInfo,
    [Blob("unprocessed-pdf-storage-container/{BlobNameWithoutExtention}-pdf.jpg", FileAccess.Read)] Stream input,
    [Blob("processed-image-storage-container/{BlobNameWithoutExtention}-h0-w80.jpg")] CloudBlockBlob outputBlob_0_80)
    {
      // It never comes here
      //Do something here
    }
}

将数据(BlobInformation 对象)上传到我的队列后,触发第一个方法(GenerateImagesForViewer)没有问题。但是当我尝试向主题发送数据(BlobInformation 对象)时,它永远不会触发任何订阅者(GenerateImagesForViewerW80)。代码有问题,还是 Azure 中需要配置?

4

1 回答 1

1

在 Program.cs 中,config.UseServiceBus();ServiceBus 触发器的使用是必需的。如果 中还有其他触发器或绑定,我们不会看到警告Functions,例如您的情况。

请参阅下面的代码示例并查看官方指南以获取更多详细信息。

        var config = new JobHostConfiguration();

        if (config.IsDevelopment)
        {
            config.UseDevelopmentSettings();
        }
        config.UseServiceBus();
        var host = new JobHost(config);
        host.RunAndBlock();

此外,我在您的输入和输出 blob 路径中看到一些可疑的空白。如果它与您的原始代码相同,只需将其删除,否则触发器将无法正确执行与 blob 操作相关的代码。

于 2018-11-06T01:48:10.640 回答