Windows Web Services(WWS):使用服务主机(Service Host)构建 HTTPS 采购订单服务的完整实战解析
示例工程【免费下载链接】Windows-classic-samplesThis repo contains samples that demonstrate the API used in Windows classic desktop applications.项目地址https://gitcode.com/gh_mirrors/wi/Windows-classic-samples点击查看免费下载导读本文围绕 Windows-classic-samples 仓库中的 HttpPurchaseOrderWithSslService 示例深入讲解如何基于 Windows Web Services APIWWS编写一个托管于 HTTP 之上的 PurchaseOrder采购订单SOAP 服务并通过 SSL 传输安全绑定WS_SSL_TRANSPORT_SECURITY_BINDING对通信进行加密。读完本文你将掌握 WWS 服务端的完整开发链路从 WSDL 契约定义、Wsutil.exe代码生成、服务契约函数表注册到服务主机Service Host的创建、打开与关闭再到运行前必须完成的 HTTP URL 预留与 SSL 证书注册等实操步骤。一、示例定位WWS 服务端 SSL 传输安全该示例的官方定位是演示 Windows Web Services API 如何使用服务主机Service Host在 HTTP 之上托管一个 PurchaseOrder 服务并启用 SSL 传输安全transport security。它属于 WWS 服务端server编程模型与之配套的客户端实现位于同仓库的 HttpPurchaseOrderWithSslClient两者通过https://localhost:8443/example这一端点地址对接。从文件组织看本示例目录结构非常精简HttpPurchaseOrderServiceWithSsl.cpp服务端全部核心逻辑PurchaseOrder.wsdl服务契约的 WSDL 定义HttpPurchaseOrderWithSslService.vcxprojVisual Studio 工程文件readme.txt补充的构建与运行说明。操作系统层面的最低要求为客户端 Windows 7、服务端 Windows Server 2008 R2。示例最初基于 Visual Studio 2013 Windows 8.1 编写但多数情况下可直接在更新版本的 Visual Studio 与 Windows 上无改动运行。二、WSDL 契约服务端一切代码的源头WWS 的编程模型以 WSDL 契约为核心。本示例的服务契约并非手写 C 结构而是由 PurchaseOrder.wsdl 描述再通过Wsutil.exe工具生成对应的.wsdl.c与.wsdl.h头文件供源码直接引用。该 WSDL 定义了一个命名空间为http://example.org的服务包含五类核心数据类型XSD 元素字段说明PurchaseOrderTypequantityxsd:int、productNamexsd:string下单请求OrderConfirmationTypeorderIDxsd:unsignedInt、expectedShipDatexsd:string下单响应GetOrderStatusTypeorderIDxsd:unsignedInt查询订单状态请求GetOrderStatusResponseTypeorderID、statusxsd:string查询订单状态响应OrderNotFoundFaultTypeorderIDxsd:unsignedInt订单不存在时的 Fault 细节在消息与操作层面IPurchaseOrder端口类型定义了Order与OrderStatus两个操作并通过wsaw:Action指定了各自的 SOAP Action如http://example.org/purchaseorder、http://example.org/getorderstatusOrderStatus操作还声明了OrderNotFoundfault。绑定PurchaseOrderBinding采用 SOAP 1.1 的 document/literal 风格soap:body useliteral/这也是本示例服务通信的传输协议基础。工程构建细节在 HttpPurchaseOrderWithSslService.vcxproj 中可以看到WSDL 被声明为CustomBuild项构建命令为Wsutil.exe /wsdl:PurchaseOrder.wsdl /out:.输出PurchaseOrder.wsdl.c与PurchaseOrder.wsdl.h两个文件并被编译进工程。因此修改 WSDL 后重新构建即可重新生成契约代码。三、源码深度解析从安全绑定到服务主机生命周期服务端全部逻辑集中在 HttpPurchaseOrderServiceWithSsl.cpp 中代码遵循典型的 WWS 服务端三步曲配置安全描述 → 配置服务端点 → 创建/打开/关闭服务主机。3.1 SSL 传输安全绑定的配置服务端点启用 HTTPS 的关键在于安全绑定security binding。源码在wmain入口中按以下顺序组装// 声明并初始化一个 SSL 传输安全绑定 WS_SSL_TRANSPORT_SECURITY_BINDING sslBinding {}; // 先清零结构体 sslBinding.binding.bindingType WS_SSL_TRANSPORT_SECURITY_BINDING_TYPE; // 设置绑定类型 // 声明并初始化所有安全绑定组成的数组 WS_SECURITY_BINDING* securityBindings[1] { sslBinding.binding }; // 声明并初始化安全描述 WS_SECURITY_DESCRIPTION securityDescription {}; securityDescription.securityBindings securityBindings; securityDescription.securityBindingCount WsCountOf(securityBindings);WS_SSL_TRANSPORT_SECURITY_BINDING是 WWS 提供的传输安全绑定结构通过bindingType WS_SSL_TRANSPORT_SECURITY_BINDING_TYPE将其登记为 SSL 传输绑定WS_SECURITY_DESCRIPTION聚合所有安全绑定此处仅一个后续挂接到服务端点上即完成安全配置。源码中有一行非常关键的注释值得特别注意NOTE: At the server, the SSL certificate for the listen URI must be registered with http.sys using a tool such as httpcfg.exe.也就是说仅仅在代码里配置绑定还不够——服务进程实际通过内核 HTTP 协议栈http.sys监听端口因此监听 URI 对应的 SSL 证书必须先在系统层面注册后文第 5 节详述。3.2 服务端点的组装端点endpoint是服务暴露的地址 通道 安全 契约的组合体serviceEndpoint.address.url.chars Lhttps://localhost:8443/example; // 监听地址 serviceEndpoint.address.url.length (ULONG)wcslen(serviceEndpoint.address.url.chars); serviceEndpoint.channelBinding WS_HTTP_CHANNEL_BINDING; // HTTP 通道绑定 serviceEndpoint.channelType WS_CHANNEL_TYPE_REPLY; // 回复型通道服务端 serviceEndpoint.securityDescription securityDescription; // 挂接安全描述 serviceEndpoint.contract purchaseOrderContract; // 挂接服务契约 serviceEndpoint.properties serviceProperties; serviceEndpoint.propertyCount WsCountOf(serviceProperties);值得注意的细节监听地址为https://localhost:8443/example即 8443 端口这与readme.txt中 netsh 预留示例使用的 80/443 端口不同运行前请按代码中的实际端口进行 URL 预留与证书配置通道类型为WS_CHANNEL_TYPE_REPLY对应服务端「一问一答」的 SOAP 消息模式端点属性中注册了关闭回调close channel callbackWS_SERVICE_ENDPOINT_PROPERTY_CLOSE_CHANNEL_CALLBACK其回调实现CloseChannelCallback使用InterlockedIncrement统计连接关闭次数当累计达到 300 次时通过SetEvent(closeServer)触发服务自行退出——这是本示例实现「自动收尾」的机制。3.3 服务契约的注册WSDL 生成的头文件中已包含PurchaseOrder_wsdl.contracts.PurchaseOrderBinding契约描述源码只需将它、默认契约与用户实现的函数表关联起来static const PurchaseOrderBindingFunctionTable purchaseOrderFunctions { PurchaseOrderImpl, // Order 操作实现 GetOrderStatusImpl // OrderStatus 操作实现 }; static const WS_SERVICE_CONTRACT purchaseOrderContract { PurchaseOrder_wsdl.contracts.PurchaseOrderBinding, // 来自生成头文件 NULL, // 不指定默认契约 purchaseOrderFunctions // 用户提供的函数表 };3.4 服务操作实现成功路径与 Fault 路径PurchaseOrderImplOrder 操作从操作上下文WS_OPERATION_CONTEXT中取出WS_OPERATION_CONTEXT_PROPERTY_HEAP在服务堆上分配并拷贝expectedShipDate固定返回L1/1/2006同时把orderID写为123。这展示了 WWS 服务端「输出参数由服务堆分配、由框架负责释放」的内存管理约定。GetOrderStatusImplOrderStatus 操作逻辑上分为两条路径。合法订单orderID 123同样从上下文取堆分配并返回订单状态字符串LPending非法订单orderID ! 123构造一个带细节的 SOAP Fault。源码先定义WS_FAULT_DETAIL_DESCRIPTIONfault 名OrderNotFound、命名空间http://example.com、Actionhttp://example.com/fault载荷元素类型WS_UINT32_TYPE然后调用WsSetFaultErrorDetail写入 fault 细节再用WsAddErrorString追加错误文本LInvalid order ID最后返回E_FAIL触发 fault 发送。这段代码同时是理解服务端 fault 序列化的最佳范本业务失败不应只返回一个 HRESULT而应通过WS_ERROR对象携带结构化 fault 细节返回给客户端。与之对应配套客户端在收到WS_E_ENDPOINT_FAULT_RECEIVED后会用WsGetFaultErrorDetail反向解析出_OrderNotFoundFaultType并打印Order %lu was not found——详见 HttpPurchaseOrderClientWithSsl.cpp 中 201~250 行的处理逻辑。3.5 服务主机生命周期创建 → 打开 → 等待 → 关闭主程序最后的流程清晰对应 README 中列出的相关 APIWsCreateError(...); // 创建错误对象承载丰富错误信息 closeServer CreateEvent(...); // 创建关闭事件 WsCreateServiceHost(serviceEndpoints, 1, NULL, 0, host, error); // ① 创建服务主机 WsOpenServiceHost(host, NULL, error); // ② 打开服务主机启动监听器 WaitForSingleObject(closeServer, INFINITE); // ③ 阻塞等待关闭信号 WsCloseServiceHost(host, NULL, error); // ④ 关闭服务主机 WsFreeServiceHost(host); // ⑤ 释放服务主机 WsFreeError(error); // 释放错误对象其中WsOpenServiceHost会真正启动 http.sys 侧的监听器一旦任意通道关闭计数达到 300closeServer事件被置位服务正常关闭。整个代码库还封装了PrintError工具函数通过WsGetErrorProperty/WsGetErrorString把WS_ERROR中的多条错误字符串逐条打印出来便于排查问题。3.6 工程链接配置从 HttpPurchaseOrderWithSslService.vcxproj 可以确认工程为控制台应用SubSystemConsole、CharacterSetUnicode支持 Win32/ARM/x64 与 Debug/Release 六种配置链接阶段依赖以下库webservices.lib; crypt32.lib; rpcrt4.lib; Iphlpapi.lib其中webservices.lib是 WWS 运行时库crypt32.lib用于证书与加密操作支持。四、构建示例按照 README 的说明构建步骤为用 Visual Studio 2013Windows 8.1 任意 SKU或更新版本打开HttpPurchaseOrderWithSslService.sln位于 cpp 目录按 F7Visual Studio 2013 也可用 F6或通过菜单 Build → Build Solution 构建输出默认生成在\Debug或Release目录下。readme.txt补充了两点注意事项构建前可通过 Build 菜单的 Configuration Manager 切换目标平台Win32/x64/ARM若在 Windows XP / Vista / Server 2003 / Server 2008 等旧系统上运行可能需要先安装包含 Windows Web Services API 运行时 DLL 的 Windows Update详情以 MSDN 文档为准。五、运行前的系统准备URL 预留与 SSL 证书注册这是 WWS HTTP 服务示例最容易踩坑的环节也是readme.txt花了大量篇幅说明的部分。5.1 预留 HTTP URLURL ACL为了让非管理员权限的 Visual Studio 也能运行服务端示例必须先以管理员身份为 HTTP 命名空间预留 URL。readme.txt给出的命令如下CMD 环境netsh http add urlacl urlhttp://:80/example user%USERDOMAIN%\%USERNAME% netsh http add urlacl urlhttps://:443/example user%USERDOMAIN%\%USERNAME%若使用提升权限的 PowerShellnetsh http add urlacl urlhttp://:80/example user$env:USERDOMAIN\$env:USERNAME netsh http add urlacl urlhttps://:443/example user$env:USERDOMAIN\$env:USERNAME需要特别指出本示例源码实际监听的是https://localhost:8443/example因此实际操作时应把端口替换为 8443例如netsh http add urlacl urlhttps://:8443/example user%USERDOMAIN%\%USERNAME%不再需要时可在管理员 CMD 或 PowerShell 中删除预留netsh http delete urlacl urlhttp://:80/example netsh http delete urlacl urlhttps://:443/example同样若改用 8443 端口则删除对应条目。5.2 向 http.sys 注册 SSL 证书源码注释明确指出服务端监听 URI 的 SSL 证书必须通过httpcfg.exe之类的工具注册到 http.sys。这是 HTTPS 服务能够正常握手的前提——仅配置WS_SSL_TRANSPORT_SECURITY_BINDING而不注册证书服务在WsOpenServiceHost阶段就会失败。实际部署时需要在目标机器上为localhost:8443或实际监听 URI安装并绑定一张受信任的服务器证书并将证书指纹与端口/主机名关联注册到 http.sys。六、运行示例并验证构建并完成系统准备后在 Visual Studio 中按 F5带调试运行或 CtrlF5不带调试运行也可以从 Debug 菜单选择对应选项程序启动后服务主机开始监听https://localhost:8443/example控制台会在每次收到Order请求时打印quantity, productName例如100, Pencil同时构建并运行配套的 HttpPurchaseOrderWithSslClient 客户端它会循环 100 次调用PurchaseOrderBinding_Order提交 100 支 Pencil 的订单收到订单号与预计发货日期调用PurchaseOrderBinding_OrderStatus查询状态得到Pending故意使用非法订单号321触发服务端 Fault客户端捕获WS_E_ENDPOINT_FAULT_RECEIVED后解析出Order 321 was not found随后WsResetError复位错误对象继续下一轮。由此可以完整验证「SSL 加密通道 → SOAP 请求/响应 → 结构化 Fault 双向传递」整条链路。服务端在通道关闭累计达到 300 次后自动关闭并退出。七、关键 API 速查README 的 Related topics 部分列出了本示例涉及的核心 API整理如下便于检索与对照源码API / 结构在本示例中的角色WS_SSL_TRANSPORT_SECURITY_BINDING声明 SSL 传输安全绑定绑定类型为WS_SSL_TRANSPORT_SECURITY_BINDING_TYPEWS_SERVICE_CONTRACT将生成的 WSDL 契约与用户回调函数表关联WS_FAULT_DETAIL_DESCRIPTION描述自定义 faultOrderNotFound的 Action、元素与载荷类型WS_XML_STRING定义 fault 名称、命名空间、Action 等 XML 字符串常量WsCreateServiceHost基于端点数组创建服务主机WsOpenServiceHost打开服务主机并启动监听器WsCloseServiceHost停止服务主机监听WsFreeServiceHost释放服务主机资源WsGetOperationContextProperty从操作上下文获取属性如WS_OPERATION_CONTEXT_PROPERTY_HEAP这些 API 共同构成了 WWS 服务端编程模型的最小闭环理解它们即可举一反三扩展到仓库中其余 HTTP/SSL 服务示例如 HttpCalculatorWithSslService、HttpServerWithSsl等。八、小结HttpPurchaseOrderWithSslService 示例浓缩了 Windows Web Services API 服务端开发的全部要点WSDL 驱动契约生成、SSL 传输安全绑定装配、服务契约注册、服务操作与 Fault 实现、服务主机生命周期管理以及 http.sys 层面的 URL 预留与证书注册。对照仓库中配套的 客户端示例可以快速搭建一套端到端加密的 SOAP 服务通信原型。需要强调的是该示例仅用于教学演示代码未针对生产环境做过加固与测试实际落地时务必结合证书管理、访问控制与错误处理进行改造。赞分享示例工程【免费下载链接】Windows-classic-samplesThis repo contains samples that demonstrate the API used in Windows classic desktop applications.项目地址https://gitcode.com/gh_mirrors/wi/Windows-classic-samples点击查看免费下载相关推荐Windows-classic-samplesHttpPurchaseOrderService 示例——基于 Windows Web Services API 托管 HTTP 采购订单服务Windows classic samplesHttpPurchaseOrderService 示例——基于 Windows Web Services API示例工程Windows Web ServicesWWSHTTPS 安全客户端实战HttpPurchaseOrderWithSslClient 源码全解析Windows Web ServicesWWSHTTPS 安全客户端实战HttpPurchaseOrderWithSslClient 源码全解析 导读 本示例工程使用 Windows Web Services API 构建 SSL 传输安全的 HTTP 服务器Windows-classic-samples HttpServerWithSsl 实战解析使用 Windows Web Services API 构建 SSL 传输安全的 HTTP 服务器Windows classic samples HttpSe示例工程上一篇TensorFlow Serving SavedModel 模型预热Warmup实战指南下一篇ComfyUI ControlNet AuxAI图像控制的革命性解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

React Native鸿蒙适配实战:状态管理与筛选排序的设计排坑

React Native鸿蒙适配实战:状态管理与筛选排序的设计排坑

跨平台这个口号喊了好多年,我现在听到的第一反应已经不是兴奋,而是翻需求文档。原因很简单:框架能不能跑,和业务能不能顺畅地跑,是两码事。只要项目涉及多平台,尤其是国内环境里绕不开的鸿蒙,你…

2026/10/16 2:28:53 阅读更多 →
SSM电商实战:2000行代码跑通全链路Java Web系统

SSM电商实战:2000行代码跑通全链路Java Web系统

简介:本资源是一套完整的Java Web电子商城课程设计大作业,面向高校计算机专业学生及Java初学者,用于软件工程实践、毕业设计参考或Web开发入门训练。内容覆盖从需求分析、概要设计、详细设计到系统实现与文档编写的全流程,技术栈基…

2026/10/16 2:28:53 阅读更多 →
MASM for Windows集成实验环境:从汇编编写到调试验证的完整闭环

MASM for Windows集成实验环境:从汇编编写到调试验证的完整闭环

简介:本资源是一套开箱即用的Windows平台汇编语言集成实验环境,专为汇编初学者、高校计算机组成原理/汇编语言课程学习者及底层开发入门者设计,有效解决传统DOS环境下MASM配置复杂、兼容性差、调试不便等痛点。压缩包共25个文件,含…

2026/10/16 2:28:53 阅读更多 →

最新新闻

微信小程序圆环组件开发:Canvas 2D与CSS方案选型及性能优化实战

微信小程序圆环组件开发:Canvas 2D与CSS方案选型及性能优化实战

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

2026/10/16 3:13:02 阅读更多 →
interface 的底层原理

interface 的底层原理

深入浅出 Go 语言:Interface 的底层实现原理在 Go 语言中,接口(interface)是实现多态和解耦的核心机制。与其他面向对象语言不同,Go 采用的是“隐式实现”(Duck Typing,鸭子类型)——…

2026/10/16 3:13:02 阅读更多 →
【C++入门】编译链接模型 - 08 静态库为什么像一包目标文件

【C++入门】编译链接模型 - 08 静态库为什么像一包目标文件

博主介绍:程序喵大人 35 - 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇&#x…

2026/10/16 3:13:02 阅读更多 →
重复测量数据全攻略:2026 一篇讲透论文重复测量实验设计,把变量控制与记录规范讲清

重复测量数据全攻略:2026 一篇讲透论文重复测量实验设计,把变量控制与记录规范讲清

同一批被试在四个时间点各测一次,交到导师手里却被追问「你的实验设计写在哪」。重复测量方差分析、线性混合模型这些名称不难写,难的是交代清楚每次观测为何落在这个时点、谁在中途退出、缺失值依据什么规则处置。下文从自变量控制、测量间隔、批次安排…

2026/10/16 3:13:02 阅读更多 →
信贷风控用户画像实战:从标签体系到贷前贷中贷后策略落地

信贷风控用户画像实战:从标签体系到贷前贷中贷后策略落地

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

2026/10/16 3:13:02 阅读更多 →
Java字符串转数字的正确方法

Java字符串转数字的正确方法

java中把字符串转成 的方法更新时间为二零二三年七月七日零九点四十分零三秒, 作者是。在Java环境里头, 大家可以利用某个类里面的那个叫作静态的方法, 把一段写着数字的字符串变成对应那种类型的数, 这篇文章会配上一些具体的代码例子, 来把这个事情从字符串弄成具体数值的过程…

2026/10/16 3:12:01 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式: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/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/15 9:49:14 阅读更多 →