按链路从外到内排查:
客户端 -> 网络 / DNS / HTTPS -> IIS 或 rhino.compute -> compute.geometry 子进程 -> Rhino.Inside / Rhino 授权 -> Grasshopper / 插件 / 自定义端点 -> 输入数据和业务逻辑
不要一开始就修改 Grasshopper 定义或服务器参数。先确认错误发生在哪一层。
在服务器本机或客户端访问:
http://server/version http://server/healthcheck http://server/activechildren http://server/sdk
判断:
/healthcheck 不通:服务、端口、IIS、网络问题。/version 通但业务 POST 失败:认证、端点、请求格式、业务输入问题。/sdk 不显示自定义端点:插件未加载或注册失败。/activechildren 异常:子进程启动、授权、内存或崩溃问题。含义:请求未通过 API Key 认证。
检查:
RHINO_COMPUTE_KEY?RhinoComputeKey?修复:
RhinoComputeKey: your-secret-api-key
含义:服务器处理请求时异常。
常见原因:
处理:
RHINO_COMPUTE_DEBUG=true。常见含义:RhinoCompute 启动 Rhino 时找不到有效授权。
本地开发:
服务器:
RHINO_TOKEN。可能有两类:
RHINO_COMPUTE_TIMEOUT 限制。检查:
RHINO_COMPUTE_TIMEOUT。处理:
含义:请求体超过 Compute 限制。默认上限常见约 50 MB。
处理:
[System.Environment]::SetEnvironmentVariable('RHINO_COMPUTE_MAX_REQUEST_SIZE', '104857600', 'Machine')
然后重启服务。
但提高限制不是首选方案。更好的方式:
检查:
检查顺序:
/sdk 是否列出自定义端点?排错时记录以下信息:
| 项目 | 内容 |
|---|---|
| 时间 | 发生错误的精确时间。 |
| Compute URL | 例如 http://server:80/。 |
| 端点 | 例如 /grasshopper 或自定义路径。 |
| HTTP 状态码 | 401、500、timeout 等。 |
| 请求体大小 | byte 或 MB。 |
| Rhino/Compute 版本 | 从 /version 或日志获取。 |
| 子进程数量 | /activechildren 或启动参数。 |
| API Key 状态 | 是否配置,不记录真实 key。 |
| GH 定义版本 | 文件名、版本号、最后修改时间。 |
| 插件清单 | 相关第三方插件版本。 |
| 日志片段 | 异常堆栈或关键错误行。 |
练习 1:本地启动 Compute,访问 /version、/healthcheck、/sdk。
练习 2:配置 RHINO_COMPUTE_KEY,用错误 key 发起 POST,确认返回 401。
练习 3:创建一个 Hops 函数,输入两个数字,输出相加结果。分别在本地和远程 Compute 上求解。
练习 4:把一个 Grasshopper 定义改造成无交互版本,移除所有依赖当前 Rhino 文档选择的步骤。
练习 5:写一个自定义 Compute 端点,输入 Curve 和系数,输出调整后的面积,并确认 /sdk 中可见。
练习 6:构造一个超时或大请求体场景,观察日志,再调整 RHINO_COMPUTE_TIMEOUT 或 RHINO_COMPUTE_MAX_REQUEST_SIZE。