VS Code中用DAPR运行Service Bus触发的Azure Function报错求助
问题排查与修复步骤
针对你遇到的"No job functions found"错误,以下是遗漏的配置和需要补充的步骤:
1. 注册Service Bus绑定扩展
错误提示核心指向扩展未注册,你需要在项目中添加扩展注册逻辑:
- 如果是InProcess模型(你的代码属于该模型),创建
Startup.cs文件并注册Service Bus扩展:
using Microsoft.Azure.Functions.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection; [assembly: FunctionsStartup(typeof(Company.ERM.Startup))] namespace Company.ERM { public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { // 注册Service Bus绑定扩展 builder.AddServiceBus(); // 可选:注册Dapr客户端,推荐通过依赖注入使用 builder.Services.AddDaprClient(); } } }
- 确保安装对应NuGet包:
Microsoft.Azure.WebJobs.Extensions.ServiceBus
2. 修复Dapr异步调用问题
你的代码中调用PublishEventAsync未使用await,会导致异步操作提前终止,需修改为异步方法并等待操作完成:
[FunctionName("erman")] public async Task Run([ServiceBusTrigger("erman", Connection = "CON_SERVICEBUS")]string myQueueItem, ILogger log) { log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}"); // 推荐使用依赖注入的DaprClient,替代手动创建 using var client = new DaprClientBuilder().Build(); await client.PublishEventAsync("orderpubsub", "orders", "test"); }
3. 校验Dapr组件配置格式
你的YAML配置需确保缩进正确(层级对齐),修正后如下:
apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: orderpubsub spec: type: pubsub.redis version: v1 metadata: - name: redisHost value: localhost:6379 - name: redisPassword value: ""
4. 配置环境变量与依赖服务
- 在
local.settings.json中添加Service Bus连接字符串:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "CON_SERVICEBUS": "你的Azure Service Bus连接字符串" } }
- 确保本地Redis服务正在运行(
localhost:6379),否则Dapr无法完成消息发布。
5. 优化运行命令
- 若代码有变更,建议先执行
dotnet build再启动,避免--no-build导致的旧代码运行问题; - 确认
--resources-path ./component/路径正确,确保Dapr能加载到组件配置。
内容的提问来源于stack exchange,提问作者Piyush
相关产品推荐
相关产品推荐

