使用AxMSTSCLib传递负载均衡信息时遇RD连接失败问题
解决RD会话代理负载均衡信息传递问题
问题分析
你遇到的“指定的连接场不存在”错误(ExtendedDisconnectReason: 1040),本质是手动处理负载均衡信息字节流时破坏了协议格式要求:
- 手动添加空格凑偶数字节,导致RD集合标识被篡改,代理无法识别
- 不添加空格则不符合TPKT协议的偶数长度要求,数据包无法正常发送
正确解决方案
无需手动处理字节流,直接使用MSTSCLib提供的官方属性配置负载均衡信息,控件会自动完成编码和字节对齐操作。
代码示例
var rd = new AxMsRdpClient11NotSafeForScripting(); // 设置RD会话代理服务器地址,而非单台目标RD服务器 rd.Server = "rd-broker.domain.local"; rd.UserName = "user"; // 获取高级设置接口,配置负载均衡信息 var advancedSettings = (MSTSCLib.IMsRdpClientAdvancedSettings7)rd.AdvancedSettings; // 替换为你的RD集合标识,格式与rdp文件完全一致 advancedSettings.LoadBalanceInfo = "tsv://MS Terminal Services Plugin.1.99999"; // 设置密码(非脚本安全模式下) var secured = (MSTSCLib.IMsTscNonScriptable)rd.GetOcx(); secured.ClearTextPassword = "password"; // 启动连接 rd.Connect();
关键注意事项
- Server地址必须指向RD代理服务器:若直接填写目标RD服务器,会绕过负载均衡逻辑
- 严格匹配集合标识格式:确保
tsv://MS Terminal Services Plugin.1.xxx中的xxx为你的RD集合ID,与rdp文件内的配置完全一致 - 依赖官方属性处理协议细节:控件会自动满足TPKT协议的字节对齐要求,无需手动修改字节流
错误码说明
DiscReason: 3:表示连接被服务器端主动断开ExtendedDisconnectReason: 1040:对应EDRC_RDSB_CONNECTION_BROKER_UNABLE_TO_FIND_FARM,即RD代理无法识别你传递的负载均衡信息中的连接场(集合)
内容的提问来源于stack exchange,提问作者StayMeaty
相关产品推荐
相关产品推荐

