实战干货】打破次元壁:如何实现 Web 端与 AutoCAD 桌面端的双向通信与自动化绘图
前言
在工程建设与制造业数字化转型的浪潮中,我们经常面临一个架构难题:业务流在 Web 端(SaaS 系统、AI 生成内容),而生产流在桌面端(AutoCAD、Revit)。
如何将 Web 端生成的数据(如设计说明、BOM 表、AI 生成的布局方案)无缝传输到 AutoCAD 并自动生成图纸?传统的做法是“导出 Excel/JSON -> 人工打开 CAD -> 导入插件”,效率低下且割裂。
本文将分享我在最近一个项目中采用的**“本地伴随服务(Local Sidecar Server)”**技术方案。通过在 AutoCAD 插件内部嵌入轻量级 Web Server,实现了 Web 页面点击按钮,AutoCAD 自动唤醒并完成绘图的全自动化流程。
1. 架构设计思路
AutoCAD 的 .NET API 是基于 COM 的单线程模型,而 Web 通信通常是异步多线程的。要打通这两者,核心在于解决通信协议与线程封送(Marshaling)。
整体架构图
graph LR A[Web 前端/SaaS系统] -- HTTP POST (JSON) --> B[本地 HTTP Server (localhost:19090)] subgraph AutoCAD 进程 B -- 1. 接收请求 --> C[请求队列/上下文] D[AutoCAD 主线程] -- 2. 轮询/事件触发 --> C D -- 3. 执行绘图逻辑 --> E[DWG 图纸] end 核心组件:
- Web 端:发送包含绘图数据(Markdown/JSON)和模板信息的 HTTP 请求。
- AutoCAD 插件(Server 端):
- 使用
System.Net.HttpListener搭建轻量级服务。 - 监听本地特定端口(如
19090)。 - 处理跨域(CORS)问题,允许浏览器直接调用。
- 使用
- 线程同步机制:将 HTTP 线程接收到的数据安全地转移到 AutoCAD 主 UI 线程执行。
2. 核心代码实现
2.1 嵌入式 HTTP Server
我们在插件初始化时启动一个异步的 HTTP Listener。这里使用了 .NET 8 的新特性,代码简洁高效。
// WebServer.cs 核心片段publicclassWebServer:IDisposable{ privatereadonlyHttpListener _listener =newHttpListener();privateconststring UrlPrefix ="http://localhost:19090/";publicvoidStart(){ if(!HttpListener.IsSupported)return; _listener.Prefixes.Add(UrlPrefix