企业微信 JSSDK 进阶实战:用 Senparc.Weixin 完成 wx.agentConfig 双签名与审批流唤起
后端即时通讯金融科技【免费下载链接】WeiXinMPSDK微信全平台 .NET SDK Senparc.Weixin for C#支持 .NET Framework 及 .NET Core、.NET 10.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.项目地址https://gitcode.com/gh_mirrors/we/WeiXinMPSDK点击查看免费下载wx.agentConfig()是企业微信 JSSDK 中面向特定 JS 接口如自定义审批流thirdPartyOpenPage、剪切板接口等的进阶配置项它建立在常规wx.config()之上且要求使用另一套独立的应用 jsapi_ticket重新计算签名。本文基于 Senparc.Weixin 开源仓库中的企业微信指南与配套示例工程完整讲解如何从appsettings.json中读取多应用配置、如何用JSSDKHelper.GetJsApiUiPackageAsync()分别生成常规与 agentConfig 两套签名参数包以及网页端如何先后执行wx.config()与wx.agentConfig()最终唤起审批流程并深入源码剖析签名算法与 Ticket 容器的生命周期管理。agentConfig 与常规 JSSDK 的关系在开始之前需要先厘清概念wx.agentConfig()用于某些特定的接口如审批流接口、剪切板接口等但一般前提都需要先使用到常规的 JSSDK可参考本项目指南中的 JSSDK常规因此这是一个增加项而非替代项。wx.agentConfig()同样分为服务器端和客户端两部分且有两个关键差异点票据不同常规wx.config()使用普通 jsapi_ticket而wx.agentConfig()必须使用应用 jsapi_ticket即带agentid维度获取的票据。SDK 中通过isAgentConfig布尔参数区分两者ID 不同wx.agentConfig()的agentid参数必须传WeixinCorpAgentId应用 ID如 1000247而不是WeixinCorpId。服务端获取签名信息双票据 双签名包的服务端代码后端除了通过JSSDKHelper.GetJsSdkUiPackageAsync()系列方法获取常规 JSSDK 运行所需参数以外还需要使用同一个方法传入不同参数来获取agentConfig的对应参数。仓库示例工程中的完整实现如下源自 JSSDKController.cs 的AgentConfig()方法public async TaskActionResult AgentConfig() { //此处演示同时支持多个应用的注册请参考 appsettings.json 文件 var workSetting Senparc.Weixin.Config.SenparcWeixinSetting[企业微信审批] as ISenparcWeixinSettingForWork; var url https://sdk.weixin.senparc.com/Work/Approval; //获取 UI 信息包 /* 注意 * 所有应用中jsApiUiPackage 是必备的 */ var jsApiTicket await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, false); var jsApiUiPackage await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, jsApiTicket, false); ViewData[jsApiUiPackage] jsApiUiPackage; /* 注意 * 1、这里需要使用 WeixinCorpAgentId而不是 WeixinCorpId * 2、agentJsApiUiPackage 是否需要提供请参考官方文档此处演示了最复杂的情况 */ ViewData[thirdNo] DateTime.Now.Ticks Guid.NewGuid().ToString(n); ViewData[corpId] workSetting.WeixinCorpId; ViewData[agentId] workSetting.WeixinCorpAgentId; var agentConfigJsApiTicket await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, true); var agentJsApiUiPackage await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, agentConfigJsApiTicket, true); ViewData[agentJsApiUiPackage] agentJsApiUiPackage; return View(); }这段代码中每次调用JsApiTicketContainer.GetTicketAsync()与JSSDKHelper.GetJsApiUiPackageAsync()的最后一个参数isAgentConfig就是区分两套票据体系的开关第一次传false获取普通 jsapi_ticket 并生成jsApiUiPackage用于页面加载时的wx.config()第二次传true获取应用 jsapi_ticket并生成agentJsApiUiPackage用于用户触发时的wx.agentConfig()。另外ViewData[thirdNo] DateTime.Now.Ticks Guid.NewGuid().ToString(n)用于生成审批单的第三方单号thirdNo保证每次发起审批的唯一性。多应用配置appsettings.json 中的 Items 注册上述方法中使用了Senparc.Weixin.Config.SenparcWeixinSetting[企业微信审批]来获取与默认主应用不同的微信配置。这一写法依赖于appsettings.json中SenparcWeixinSetting.Items下的多应用注册参考 appsettings.json 中的实际设置Items: { //添加多个企业微信应用 企业微信审批: { WeixinCorpId: #{WeixinCorpId2}#, WeixinCorpAgentId: #{WeixinCorpAgentId2}#, WeixinCorpSecret: #{WeixinCorpSecret2}#, WeixinCorpToken: #{WeixinCorpToken2}#, WeixinCorpEncodingAESKey: #{WeixinCorpEncodingAESKey2}#} }其中#{...}#是示例工程的占位符写法实际部署时替换为真实的 CorpId / AgentId / Secret / Token / EncodingAESKey 即可。需要注意WeixinCorpAgentId是 agentConfig 场景的核心字段必须与当前网页所属应用一致顶层的WeixinCorpId/WeixinCorpSecret等是默认主应用配置Items下的是附加应用配置二者可并存此按名称索引配置的方法对所有其他模块也通用如公众号、小程序、微信支付等。SDK 签名生成的源码级实现GetJsApiUiPackageAsync一个方法覆盖两种场景从源码看JSSDKHelper.csGetJsApiUiPackageAsync的实现非常精简isAgentConfig只影响向哪套票据取数签名算法本身两者完全相同public static async TaskJsApiUiPackage GetJsApiUiPackageAsync(string appId, string secret, string url, string jsApiTicket, bool isAgentConfig) { var nonceStr GetNoncestr(); var timeStamp GetTimestamp(); jsApiTicket ?? await JsApiTicketContainer.GetTicketAsync(appId, secret, isAgentConfig); var sign GetSignature(jsApiTicket, nonceStr, timeStamp, url); JsApiUiPackage jsApiUiPackage new(appId, timeStamp.ToString(), nonceStr, sign); return jsApiUiPackage; }几个值得注意的细节若调用方已自行获取票据如示例代码中先调GetTicketAsync再传入方法会直接复用票据为null时才按isAgentConfig回源获取因此两套票据的缓存键不同、互不干扰返回的 JsApiUiPackage 实体包含AppId、Timestamp、NonceStr、Signature四个属性正好与前端wx.config/wx.agentConfig的必填参数一一对应。GetSignatureSHA1 签名与 URL 哈希片段剔除签名算法在 JSSDKHelper.cs 中实现与官方JS-SDK使用权限签名算法一致public static string GetSignature(string jsapi_ticket, string noncestr, long timestamp, string url) { StringBuilder sb new StringBuilder(); sb.Append(jsapi_ticket).Append(jsapi_ticket).Append() .Append(noncestr).Append(noncestr).Append() .Append(timestamp).Append(timestamp).Append() .Append(url).Append(url.IndexOf(#) 0 ? url.Substring(0, url.IndexOf(#)) : url); return EncryptHelper.GetSha1(sb.ToString()).ToLower(); }关键约束签名串按jsapi_ticket、noncestr、timestamp、url四个参数按字典序拼接后做 SHA1 并转小写URL 必须不包含#及其后面部分——源码中url.IndexOf(#) 0 ? url.Substring(0, url.IndexOf(#)) : url会自动截断哈希片段。如果你的页面是 SPA 路由带#路径签名 URL 与前端window.location.href不一致是最常见的验签失败原因nonceStr由GetNoncestr()基于Guid.NewGuid()去横杠生成timestamp为 Unix 秒级时间戳二者必须与传给wx.config/wx.agentConfig的值严格一致。JsApiTicketContainer票据自动注册、过期刷新与分布式锁两套票据的获取都经过 JsApiTicketContainer 管理。从GetTicketResultAsync的源码结构看第 306-330 行它解决了生产环境的三个问题缓存键隔离AccessTokenContainer.BuildingKey(appId, appSecret, isAgentConfig)将isAgentConfig编入缓存键因此普通票据与应用票据在同一容器内各自独立缓存、独立过期过期自动刷新若jsApiTicketBag.ExpireTime SystemTime.Now则调用CommonApi.GetTicketAsync重新拉取并按expires_in更新过期时间写回缓存调用方无需关心票据生命周期并发安全刷新动作包裹在Cache.BeginCacheLockAsync分布式锁中且获锁后重新读取并二次检查过期状态double-check避免多实例部署下的惊群刷新。此外RegisterAsync方法第 238-270 行在为某个企业注册时会同时为isAgentConfig true与false两套票据分别建立注册回调并可在提供name时把 CorpId/CorpSecret 同步记录到SenparcWeixinSetting.Items[name]中——这正是前文SenparcWeixinSetting[企业微信审批]索引写法能工作起来的机制之一。GetTicketAsync类方法在票据未注册且传入完整凭证时会通过TryGetTicketAsync自动注册因此示例代码无需手动Register即可直接取票。网页端配置 JSSDK网页端除了进行常规的 JSSDK 配置以外还需要在执行特定的 JsApi 方法之前添加wx.agentConfig()的配置。仓库示例视图 AgentConfig.cshtml 的完整客户端流程如下。第一步加载 SDK 脚本并执行常规 wx.config页面需同时引入企业微信 JS-SDK 相关脚本jweixin-1.2.0.js与jwxwork-1.0.0.js并在页面加载时用服务端下发的jsApiUiPackage执行wx.configscript src//res.wx.qq.com/open/js/jweixin-1.2.0.js/script script src//open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js/scriptwx.config({ beta: true, // 必须这么写否则wx.invoke调用形式的jsapi会有问题 debug: true, appId: jsApiUiPackage.AppId, // 必填企业微信的corpID timestamp: jsApiUiPackage.Timestamp, nonceStr: jsApiUiPackage.NonceStr, signature: jsApiUiPackage.Signature, jsApiList: [thirdPartyOpenPage] // 必填需要使用的JS接口列表 });注意beta: true为必填项注释明确指出否则 wx.invoke 调用形式的 jsapi 会有问题。同时建议保留wx.error回调用于诊断签名过期等验签失败场景SPA 场景可在该回调中重新拉取签名。第二步用户触发前执行 wx.agentConfig 并调用目标接口wx.agentConfig()使用服务端第二套参数包agentJsApiUiPackage成功后立即在success回调中执行wx.invoke(thirdPartyOpenPage, ...)发起审批源自 jssdk-agent-config.md 与示例视图function invoke(){ wx.agentConfig({ corpid: ViewData[corpId], // 必填企业微信的corpid必须与当前登录的企业一致 agentid: ViewData[agentId], // 必填企业微信的应用id e.g. 1000247 timestamp: agentJsApiUiPackage.Timestamp, // 必填生成签名的时间戳 nonceStr: agentJsApiUiPackage.NonceStr, // 必填生成签名的随机串 signature: agentJsApiUiPackage.Signature,// 必填签名见附录-JS-SDK使用权限签名算法 jsApiList: [thirdPartyOpenPage], //必填传入需要使用的接口名称 success: function(res) { // 回调 wx.invoke(thirdPartyOpenPage, { oaType: 10001,// String //templateId: C4NxepvGj51gbkeGXHQgYRArW96WrxRinNfyCxo7N,//SYS templateId:247bcb886d0374a0a1f749c52794ba1a_622421053,// Open thirdNo: ViewData[thirdNo],// String extData: { fieldList: [{ title: 审批类型, type: text, value: 文章审批, }, { title: 预览, type: link, value: https://weixin.senparc.com, }], } }, function(res) { // 输出接口的回调信息 console.log(res); alert(wx.invoke result:JSON.stringify(res)); }); }, fail: function(res) { if(res.errMsg.indexOf(function not exist) -1){ alert(版本过低请升级) } else{ alert(wx.invoke fail:JSON.stringify(res)); } } }); }参数要点corpid必须与当前登录的企业一致agentid传WeixinCorpAgentId示例中由workSetting.WeixinCorpAgentId注入ViewData[agentId]timestamp/nonceStr/signature必须取自应用 jsapi_ticketisAgentConfig: true计算出的agentJsApiUiPackage误用常规票据的签名会验签失败templateId区分系统审批模板SYS如注释掉的C4NxepvG...与自定义审批模板Open带_后缀需与企业后台配置一致extData.fieldList用于给审批表单预填字段文本、链接等fail回调中通过errMsg判断function not exist提示版本过低其余错误原样透出便于排错。HTML 页面进行触发a hrefjavascript:void(0) onclickinvoke()点击唤起审批流程/a易错点小结问题正确做法agentConfig 用了普通 jsapi_ticket 的签名对JsApiTicketContainer.GetTicketAsync(..., true)/GetJsApiUiPackageAsync(..., true)传isAgentConfig: trueagentid误传 CorpId从ISenparcWeixinSettingForWork.WeixinCorpAgentId取值页面带#哈希片段导致验签失败签名 URL 截断#之后部分SDK 的GetSignature已自动处理但传参 URL 需与实际页面一致只做了wx.config直接wx.invoke在wx.config成功之后、调用特定 jsapi 之前先执行wx.agentConfig并在其success回调中发起wx.invoke缺少beta: truewx.config必须显式写beta: true否则wx.invoke形式的 jsapi 异常多应用共用一套配置在SenparcWeixinSetting.Items[应用名]下注册独立凭证再用SenparcWeixinSetting[应用名]索引参考文件索引文件说明docs/zh/guide/work/jssdk-agent-config.md本文主体指南agentConfig 服务端与客户端配置docs/zh/guide/work/jssdk-general.md常规 JSSDKwx.config配置指南agentConfig 的前置基础Samples/Work/Senparc.Weixin.Sample.Work/Controllers/JSSDKController.csIndex()常规与AgentConfig()双签名完整服务端示例Samples/Work/Senparc.Weixin.Sample.Work/Views/JSSDK/AgentConfig.cshtml客户端完整页面wx.config wx.agentConfig 唤起审批流Samples/Work/Senparc.Weixin.Sample.Work/appsettings.jsonItems 多应用注册的真实配置样例src/Senparc.Weixin.Work/Senparc.Weixin.Work/Helpers/JSSDK/JSSDKHelper.csGetJsApiUiPackageAsync、GetSignature签名算法实现src/Senparc.Weixin.Work/Senparc.Weixin.Work/Containers/JsApiTicketContainer.cs双票据容器注册、过期刷新、分布式锁刷新逻辑src/Senparc.Weixin.Work/Senparc.Weixin.Work/Entities/JsApiUiPackage.cs前端四参数包实体定义赞分享后端即时通讯金融科技【免费下载链接】WeiXinMPSDK微信全平台 .NET SDK Senparc.Weixin for C#支持 .NET Framework 及 .NET Core、.NET 10.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.项目地址https://gitcode.com/gh_mirrors/we/WeiXinMPSDK点击查看免费下载相关推荐Senparc.Weixin 微信支付 V3 JSAPI 公众号网页支付实战从商品页到 prepay_id 签名唤起Senparc.Weixin 微信支付 V3 JSAPI 公众号网页支付实战从商品页到 prepay_id 签名唤起 本文基于当前仓库的 TenPay V3后端即时通讯金融科技Senparc.WeixinWeiXinMPSDK微信支付 V2 JSAPI 支付实战商品页、预支付订单与 WeixinJSBridge 唤起全流程Senparc.WeixinWeiXinMPSDK微信支付 V2 JSAPI 支付实战商品页、预支付订单与 WeixinJSBridge 唤起全流程 本文后端即时通讯金融科技WxJava 企业微信流程审批开发指南提交申请、查询详情与审批流程引擎实战WxJava 企业微信流程审批开发指南提交申请、查询详情与审批流程引擎实战 本篇指南基于 WxJava 仓库中的企业微信 OA 审批模块系统讲解如何通过 S后端即时通讯上一篇Betterfox Firefox 字体渲染优化4 步把网页小字调清晰下一篇散点变模型、两次扫描怎么对齐CloudCompare 上手实操创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

BAML 多语言 SDK 生成体系:从 baml generate 命令到 sdk_tests 验证矩阵

BAML 多语言 SDK 生成体系:从 baml generate 命令到 sdk_tests 验证矩阵

编程语言AI Agent编译器CLI人工智能 【免费下载链接】baml The programming language for agents 项目地址: https://gitcode.com/gh_mirrors/ba/baml 点击查看 免费下载 本文以 BAML SDK 总览文档 为核心,讲解 BAML(The programming langua…

2026/9/25 15:57:47 阅读更多 →
eslint-plugin-react 规则详解:react/no-this-in-sfc —— 禁止无状态函数组件中使用 `this`

eslint-plugin-react 规则详解:react/no-this-in-sfc —— 禁止无状态函数组件中使用 `this`

开发工具代码质量静态分析 【免费下载链接】eslint-plugin-react React-specific linting rules for ESLint 项目地址: https://gitcode.com/gh_mirrors/es/eslint-plugin-react 点击查看 免费下载 react/no-this-in-sfc 是 eslint-plugin-react 提供的一条"可…

2026/9/25 15:57:47 阅读更多 →
开源大模型本地部署与安全实战:Qwen微调、微软工具链与谷歌生态

开源大模型本地部署与安全实战:Qwen微调、微软工具链与谷歌生态

1. 开源AI浪潮下的技术选型与安全博弈过去一年里,我身边做开发和运维的朋友聊得最多的话题,从“你用了哪个API”逐渐变成了“你本地跑了哪个模型”。这个转变背后其实是一个很明显的信号:开源大模型的能力已经跨过了“能用”的门槛&#xff0…

2026/9/25 15:57:47 阅读更多 →

最新新闻

DeskcommCRM落地全记录:从私有化部署到销售漏斗搭建实践

DeskcommCRM落地全记录:从私有化部署到销售漏斗搭建实践

做过企业销售管理或者自己带过业务团队的朋友,大概率都经历过这么一段混乱期:客户名单塞在几个销售的个人Excel里,重要客户的沟通记录散落在微信聊天和邮件箱,管理层想看一眼本月真正的销售漏斗,得等销售晚上填表格&am…

2026/9/25 16:33:07 阅读更多 →
CRM选型到落地:DeskcommCRM配置实战与团队使用指南

CRM选型到落地:DeskcommCRM配置实战与团队使用指南

做CRM选型那阵子,我带着销售和客服两条线前后试了五六套系统,最后真正留下、团队每天都打开的就是 DeskcommCRM。先说清楚它是什么:一款把客户资料、电话、邮件和在线会话放到同一个桌面工作台里的轻量级CRM,重点解决“客户信息散…

2026/9/25 16:33:07 阅读更多 →
基于Java的小微企业库存管理系统设计与实现

基于Java的小微企业库存管理系统设计与实现

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 1. 项目背景与意义 小微企业是国民经济的重要组成部分,但在日常经营中普遍面临库存管理粗放、账实不符、采购与销售脱节等问题。传统的人工台账方式不仅效率…

2026/9/25 16:33:07 阅读更多 →
基于SpringBoot和Vue前后端分离购票系统的设计与实现

基于SpringBoot和Vue前后端分离购票系统的设计与实现

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 1. 项目背景与意义 随着互联网技术的快速发展,传统线下购票方式存在排队时间长、信息不透明、票务管理效率低等问题。尤其在演出、电影、交通出行等场景中&…

2026/9/25 16:33:07 阅读更多 →
Atlas 300V 24G部署YOLO全攻略:驱动、转换与推理实践

Atlas 300V 24G部署YOLO全攻略:驱动、转换与推理实践

拿到一块 Atlas 300V 24G,不装驱动直接插上,大概率连系统都认不出这是个啥。跑通YOLO,更不是 pip install 就能了事的事。我去年接触昇腾推理卡,从硬件安装到模型转换踩了一整圈坑,最后把 YOLOv5 在 Atlas 300V 上跑通…

2026/9/25 16:33:07 阅读更多 →
AI 智能体 OpenClaw 飞书插件安装配置:全程命令行实操与 TaoToken 统一 Key 接入

AI 智能体 OpenClaw 飞书插件安装配置:全程命令行实操与 TaoToken 统一 Key 接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 16:32:07 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →