customsd 服务未命中服务器以进行 GetSessionId 调用
customsd service does not hit server for GetSessionId call
这基本上是 Can not add account for custom Sonos service 的副本,但没有公认的答案,我无法添加评论来询问他们是否解决了他们的问题。
我继承了一个项目,正在尝试添加开发服务。我已经通过 /customsd.htm 配置了它,将 header 策略设置为 Session ID,让安全和不安全的端点都在工作。
当我去添加频道时,我看到了 strings.xml 的请求。但是,我从来没有看到任何请求 getSessionId。与此同时,SONOS 报告 "Account Not Found. ***** server did not recognize your login information." 我可以使用 SoapUI 发出请求,并且我得到了有效的响应。
如果值得一提,我正在使用 SONOS 的测试版程序,版本为 6.2,构建 31926010(Mac 桌面应用程序)。
更新:
虽然我不确定这里有什么有用的东西,但查看 [deviceIP]:1400/support/aggregate
上的日志,我看到了以下内容。请注意,已编辑的 URL 和 IP 会解析。 IP 用于负载均衡器,URL 在它后面。
Feb 28 11:07:42 Sonos[84168] <![CDATA[<]]>Error<![CDATA[>]]>: (SCLib) dns(1): [redacted URL] -<![CDATA[>]]> [redacted IP]
Feb 28 11:07:42 Sonos[84168] <![CDATA[<]]>Error<![CDATA[>]]>: (SCLib) control_client(1): getSessionId failed, res = 1000, tvStart = 1456679262 s 250163 us, m_tvConnectDone = 1456679282 s 250162 us, m_tvDone = 1456679302 s 250162 us, tvNow = 1456679262 s 509982 us
Feb 28 11:07:42 Sonos[84168] <![CDATA[<]]>Error<![CDATA[>]]>: (SCLib) soap(1): - param username = [redacted username]
更新#2:
我通过 Wireshark 检查了数据包,生产服务和开发服务的行为似乎相同,只是对于生产服务,控制器/我的计算机在服务器挂了。附加图像中以红色标出的该过程不会发生在 customd 服务中。
我还尝试在 customsd 配置中使用生产服务端点,但该请求以同样的方式失败。 FWIW,所有 ssl_validation 测试都顺利通过,各种内容测试也是如此。
因为缺少尾部斜线...
我终于解决了这个问题,它非常小。在 customsd 配置中,我的端点 url 没有尾部斜杠。添加它们使一切正常。
当我解密控制器为生产服务和注册到生产端点的 customsd 服务对服务器发出的调用时,我终于意识到了这一点。 customsd 服务发出的调用返回负载均衡器的 400 错误。调用之间的唯一区别是 headers,特别是:
制作服务:POST / HTTP/1.1
开发服务:POST HTTP/1.1
LB 正确地说调用无效。添加尾部斜线使一切正常。
就其价值而言,我非常确定没有尾部斜杠的 URL 既可以通过 curl 工作,也可以通过 SoapUI 工作。但是,Sonos 控制器需要它们。
这基本上是 Can not add account for custom Sonos service 的副本,但没有公认的答案,我无法添加评论来询问他们是否解决了他们的问题。
我继承了一个项目,正在尝试添加开发服务。我已经通过 /customsd.htm 配置了它,将 header 策略设置为 Session ID,让安全和不安全的端点都在工作。
当我去添加频道时,我看到了 strings.xml 的请求。但是,我从来没有看到任何请求 getSessionId。与此同时,SONOS 报告 "Account Not Found. ***** server did not recognize your login information." 我可以使用 SoapUI 发出请求,并且我得到了有效的响应。
如果值得一提,我正在使用 SONOS 的测试版程序,版本为 6.2,构建 31926010(Mac 桌面应用程序)。
更新:
虽然我不确定这里有什么有用的东西,但查看 [deviceIP]:1400/support/aggregate
上的日志,我看到了以下内容。请注意,已编辑的 URL 和 IP 会解析。 IP 用于负载均衡器,URL 在它后面。
Feb 28 11:07:42 Sonos[84168] <![CDATA[<]]>Error<![CDATA[>]]>: (SCLib) dns(1): [redacted URL] -<![CDATA[>]]> [redacted IP]
Feb 28 11:07:42 Sonos[84168] <![CDATA[<]]>Error<![CDATA[>]]>: (SCLib) control_client(1): getSessionId failed, res = 1000, tvStart = 1456679262 s 250163 us, m_tvConnectDone = 1456679282 s 250162 us, m_tvDone = 1456679302 s 250162 us, tvNow = 1456679262 s 509982 us
Feb 28 11:07:42 Sonos[84168] <![CDATA[<]]>Error<![CDATA[>]]>: (SCLib) soap(1): - param username = [redacted username]
更新#2:
我通过 Wireshark 检查了数据包,生产服务和开发服务的行为似乎相同,只是对于生产服务,控制器/我的计算机在服务器挂了。附加图像中以红色标出的该过程不会发生在 customd 服务中。
我还尝试在 customsd 配置中使用生产服务端点,但该请求以同样的方式失败。 FWIW,所有 ssl_validation 测试都顺利通过,各种内容测试也是如此。
因为缺少尾部斜线...
我终于解决了这个问题,它非常小。在 customsd 配置中,我的端点 url 没有尾部斜杠。添加它们使一切正常。
当我解密控制器为生产服务和注册到生产端点的 customsd 服务对服务器发出的调用时,我终于意识到了这一点。 customsd 服务发出的调用返回负载均衡器的 400 错误。调用之间的唯一区别是 headers,特别是:
制作服务:POST / HTTP/1.1
开发服务:POST HTTP/1.1
LB 正确地说调用无效。添加尾部斜线使一切正常。
就其价值而言,我非常确定没有尾部斜杠的 URL 既可以通过 curl 工作,也可以通过 SoapUI 工作。但是,Sonos 控制器需要它们。