MarkLogic调用xdmp:http-put报SVC-SOCCONN连接超时错误求助
XQuery执行xdmp:http-put报SVC-SOCCONN超时排查方案
问题现象
在Query控制台执行配置了digest认证的HTTP PUT请求代码时,触发SVC-SOCCONN报错,套接字连接阶段超时。
问题代码
xquery version "1.0-ml"; xdmp:http-put("http://example.com:8007/v1/documents?uri=my.xml", <options xmlns="xdmp:http"> <authentication method="digest"> <username>xxxx</username> <password>yyyyy</password> </authentication> <headers> <Content-type>application/xml</Content-type> <Accept>application/xml</Accept> </headers> </options>, <mydata>this is xml for the PUT body</mydata>)
完整报错
[1.0-ml] SVC-SOCCONN: xdmp:http-put("http://example.com:8007/v1/documents?uri=my.xml", ........., this is xml for the PUT body) -- Socket connect error: wait xx.xxx.xxx.xxx:49860: Timeout
该错误发生在TCP套接字连接阶段,提示等待目标地址xx.xxx.xxx.xxx:49860时连接超时,请求还未进入认证、HTTP协议交互阶段,优先排查网络连通性问题,不要先纠结digest认证配置。
排查解决步骤
- 第一步先做基础连通性校验:登录MarkLogic服务所在的主机,直接用
telnet 目标域名 8007、curl -v 目标地址测试到服务端8007端口的连通性,排查主机防火墙、云安全组、网络ACL是否拦截了出方向到8007端口的请求,这是这类超时最常见的原因。 - 校验地址解析正确性:对比报错里的xx.xxx.xxx.xxx和你预期的目标服务IP,如果不一致,说明DNS解析错误,可临时把目标地址换成真实服务IP测试,排查hosts配置、DNS服务器的解析规则问题。
- 检查目标服务状态:确认目标8007端口对应的HTTP应用服务正常运行,没有崩溃、端口监听在127.0.0.1导致外部无法访问、连接数打满拒绝新连接的情况。
- 排查MarkLogic侧网络配置:如果集群配置了HTTP代理,确认代理规则没有把目标地址的请求路由到无效节点;如果没有配置代理,确认MarkLogic进程的运行身份没有被主机安全策略限制外部网络访问权限。
- 连通性全部验证通过后再核对认证配置:确认目标服务确实开启digest认证,用户名密码匹配,如果服务配置了自定义realm,需要在认证配置块里补充
<realm>你的realm值</realm>参数,否则会出现认证失败(注意认证失败不会报SOCCONN错误,会报401相关的鉴权错误)。
内容的提问来源于stack exchange,提问作者Balan
相关产品推荐
相关产品推荐

