讲师中心 微信公众号
AI工具推荐 视频效率加速

C# Dapr集成方法 C#如何构建Dapr分布式应用

冬芳小哥_8049

冬芳小哥_8049

发布时间:2026-02-17 10:41:02

|

147人浏览过

|

来源于php中文网

原创

必须使用官方 Dapr.Client 1.12+ 包,显式指定 sidecar 地址(如 http://localhost:3500),确保状态组件 YAML 正确配置并挂载,Pub/Sub 需匹配组件名、正确暴露订阅路由且禁用 HTTPS 重定向。

c# dapr集成方法 c#如何构建dapr分布式应用

如何在C#项目中正确引用Dapr客户端SDK

必须使用官方维护的 Dapr.Client NuGet 包(不是 Dapr.AspNetCore 或旧版 Dapr.DotNet.Sdk),当前稳定版推荐 1.12+。若项目是 .NET 6+,直接 dotnet add package Dapr.Client 即可;若用 Visual Studio,需确认包源为 nuget.org 且未勾选“包含预发行版”——否则可能意外装入不兼容的 alpha 版本。

常见错误:项目同时引用了 Dapr.AspNetCore 和手动初始化 DaprClient,导致 HTTP 客户端复用冲突,表现为随机 HttpRequestException 或连接池耗尽。解决方案是二选一:纯客户端调用走 DaprClient,Web API 集成才用 Dapr.AspNetCore。

调用其他服务时,为什么总是提示“connection refused”或“no route to host”

Dapr sidecar 默认监听 http://localhost:3500,但 C# 应用必须显式指定该地址才能通信。不能依赖默认构造函数——new DaprClient() 会尝试连 http://localhost:80,必然失败。

正确做法:

  • 本地开发:用 DaprClient.CreateInvokeClient("http://localhost:3500") 或传入 new DaprClientBuilder().UseGrpcChannelOptions(...)(gRPC 模式需 sidecar 启动时加 --app-port)
  • Kubernetes 环境:改用 http://<service-name>.dapr.svc.cluster.local:3500</service-name>,其中 service-name 是目标应用的 Kubernetes Service 名,不是 Dapr 的 component 名
  • 务必检查 sidecar 是否真在运行:curl http://localhost:3500/v1.0/healthz 返回 204 才算就绪

状态管理写入失败,报错“ERR_STATE_STORE_NOT_CONFIGURED”

这个错误不是代码问题,而是 Dapr runtime 启动时没加载状态组件配置。C# 侧调用 client.SaveStateAsync("statestore", "key", value) 前,必须确保:

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载
  • 存在对应 YAML 文件(如 components/statestore.yaml),内容包含 type: state.redis 或 type: state.memory,且 version: v1
  • 启动应用时通过 --components-path ./components 显式挂载,或在 Kubernetes 中通过 DaprComponent CRD 部署
  • statestore 这个名字必须和 YAML 中的 metadata.name 完全一致,大小写敏感

容易忽略的一点:Dapr CLI 默认只加载 ./components 目录下的文件,若把 YAML 放在子目录(如 ./components/prod/)里,不会自动识别。

发布事件后订阅方收不到,排查要点有哪些

Dapr Pub/Sub 是解耦模型,收不到消息大概率卡在三个环节:发布端地址、订阅端路由、topic 权限配置。

实操检查项:

  • 发布端用的是 client.PublishEventAsync("pubsub", "topic-a", data),其中 pubsub 必须与 components 目录下 Pub/Sub 组件的 metadata.name 一致
  • 订阅端必须暴露一个符合 Dapr 调用规范的 HTTP endpoint:POST /dapr/subscribe 返回 JSON 数组,且每个元素含 topic 和 route 字段;route 值(如 /api/order)要与实际 Controller 的路由完全匹配
  • 确认 sidecar 启动参数含 --app-id myapp,且该 ID 在 Kubernetes 中需与 Service 名一致(否则 Dapr 控制平面无法路由)
  • 如果用 Redis 作为 Pub/Sub,注意它不支持 topic 分区,所有订阅者都会收到全量消息——这不是 bug,是设计如此

最隐蔽的问题:ASP.NET Core 默认启用 HTTPS 重定向中间件,会导致 Dapr sidecar 的 HTTP POST 订阅请求被 307 重定向,而 sidecar 不跟随跳转,直接失败。关掉 app.UseHttpsRedirection() 或仅对非 Dapr 路由启用。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2153

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

3514

2023.10.07

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

709

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

644

2025.12.18

ThinkPHP中间件机制与请求拦截处理实践
ThinkPHP中间件机制与请求拦截处理实践

本专题围绕 ThinkPHP 中间件体系展开,深入讲解中间件的定义、注册与执行流程。内容包括全局中间件与路由中间件的区别、请求前后处理逻辑、自定义中间件开发以及权限验证与日志处理应用。通过实际案例,帮助开发者掌握中间件在项目中的核心作用与最佳实践。

458

2026.03.31

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2275

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3662

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1216

2023.10.13

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn