我正在尝试实现一个SMAPI服务,但是遇到了一些问题。
我构建了一个“假”服务,它为这些端点提供了硬编码的响应:
我遵循了添加自定义服务的说明,使所有功能都不受检查。
我在我的Sonos iPhone应用程序上看到了我的新测试服务,但是当我选择它时,我会看到屏幕上写着“无法浏览音乐”。
我真的不知道如何调试正在发生的事情,所以我觉得自己是在黑暗中捅人。我不想投机取巧地做一些可能与问题无关的改变--这似乎是浪费大量精力的良方。
有什么方法可以看到Sonos应用程序(客户端)的错误吗?,我已经检查了http://[device ip]:1400/support/aggregate
日志,但是没有看到任何关于我的服务域名的内容,也没有看到任何似乎相关的内容。
我知道(至少有一些)请求正在影响我的服务,特别是调用getLastUpdate
和getMetadata
。下面是日志的输出:
2016-02-23T18:55:24.316373+00:00 app[web.1]: Started POST "/soap/action" for 213.86.218.202 at 2016-02-23 18:55:24 +0000
2016-02-23T18:55:24.316485+00:00 app[web.1]: Started POST "/soap/action" for 213.86.218.202 at 2016-02-23 18:55:24 +0000
2016-02-23T18:55:24.431603+00:00 app[web.1]: Processing by SoapController#get_last_update as HTML
2016-02-23T18:55:24.431611+00:00 app[web.1]: Processing by SoapController#get_last_update as HTML
2016-02-23T18:55:24.438452+00:00 app[web.1]: params.inspect: {}
2016-02-23T18:55:24.438458+00:00 app[web.1]: params.inspect: {}
2016-02-23T18:55:24.447855+00:00 app[web.1]: Rendered vendor/bundle/ruby/2.2.0/gems/wash_out-0.10.0/app/views/wash_out/document/response.builder (7.6ms)
2016-02-23T18:55:24.447907+00:00 app[web.1]: Rendered vendor/bundle/ruby/2.2.0/gems/wash_out-0.10.0/app/views/wash_out/document/response.builder (7.6ms)
2016-02-23T18:55:24.448279+00:00 app[web.1]: Completed 200 OK in 17ms (Views: 9.5ms | ActiveRecord: 0.0ms)
2016-02-23T18:55:24.457801+00:00 app[web.1]: Started POST "/soap/action" for 213.86.218.202 at 2016-02-23 18:55:24 +0000
2016-02-23T18:55:24.448327+00:00 app[web.1]: Completed 200 OK in 17ms (Views: 9.5ms | ActiveRecord: 0.0ms)
2016-02-23T18:55:24.464365+00:00 app[web.1]: Processing by SoapController#get_metadata as HTML
2016-02-23T18:55:24.457861+00:00 app[web.1]: Started POST "/soap/action" for 213.86.218.202 at 2016-02-23 18:55:24 +0000
2016-02-23T18:55:24.464428+00:00 app[web.1]: Processing by SoapController#get_metadata as HTML
2016-02-23T18:55:24.465101+00:00 app[web.1]: params.inspect: {"id"=>"root", "index"=>0, "count"=>100}
2016-02-23T18:55:24.465154+00:00 app[web.1]: params.inspect: {"id"=>"root", "index"=>0, "count"=>100}
2016-02-23T18:55:24.472056+00:00 app[web.1]: Rendered vendor/bundle/ruby/2.2.0/gems/wash_out-0.10.0/app/views/wash_out/document/response.builder (3.4ms)
2016-02-23T18:55:24.472049+00:00 app[web.1]: Rendered vendor/bundle/ruby/2.2.0/gems/wash_out-0.10.0/app/views/wash_out/document/response.builder (3.4ms)
2016-02-23T18:55:24.472248+00:00 app[web.1]: Completed 200 OK in 8ms (Views: 6.9ms | ActiveRecord: 0.0ms)
2016-02-23T18:55:24.472251+00:00 app[web.1]: Completed 200 OK in 8ms (Views: 6.9ms | ActiveRecord: 0.0ms)
任何帮助都将是非常感谢的!
UPDATE这里是通过SoapUI向我的假服务发出请求的输出:
getLastUpdate
http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd="http://www.w3.org/2001/XMLSchema”xmlns:tns="">http://www.sonos.com/Services/1.1"> 目录“最后更新2016-02-18 11:52:30用户: Rob最近更新的收藏夹2016-02-18 12:01:00 getSessionId
http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd="http://www.w3.org/2001/XMLSchema”xmlns:tns="">http://www.sonos.com/Services/1.1"> user0001 getMetadata
http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd=http://www.w3.org/2001/XMLSchema”xmlns:tns="">http://www.sonos.com/Services/1.1"> 2 some_id_1标题1音频/MP4曲目列表摘要案文1。some_id_2标题2音频/MP4曲目列表摘要文本2。 getExtendedMetadata
http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd="http://www.w3.org/2001/XMLSchema”xmlns:tns=">http://www.sonos.com/Services/1.1"> some_id_1标题1音频/MP4曲目列表摘要文本1。 getMediaMetadata
http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd="http://www.w3.org/2001/XMLSchema”xmlns:tns="">http://www.sonos.com/Services/1.1"> 伪曲目音频/mp4音轨艺术家:12345巴赫“satisfaction.jpg经典459真假 getMediaURI
http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd="http://www.w3.org/2001/XMLSchema”xmlns:tns="">http://www.sonos.com/Services/1.1"> https://sonos.therocketfuel.com/audio/960bpm.m4a 发布于 2016-02-25 13:14:19
解决方案
我终于弄明白了,基本上我的服务是返回有效的XML,但是对于WSDL模式来说,这是不正确的。
我使用SoapUI进行了调试,如下所示:
- Project name: whatever you like
- Initial WSDL: points to where your service serves up the WSDL
- Check both "Create Requests" and "Create TestSuite"
如果您正在使用Ruby,请提供额外的详细信息
此外,这里还有一些更多的细节,可以帮助在这种情况下的人,特别是如果您正在构建您的服务在Ruby.
Ruby中SOAP服务的工具不如Java (甚至PHP)好。我使用的是输出 gem,虽然它是一个全新的SOAP服务,但它的表达能力不足以让您定义与官方Sonos匹配的类型映射等。我也无法让它生成正确的XML响应(它遗漏了所需的关键xmlns
属性,或者不会命名空间所有元素)。
我通过使用模板手动为XML响应提供服务来解决这一问题,因为这是最简单的方法。您可以使用.xml.erb
模板,也可以将xml builder
语法与.xml.builder
模板一起使用。实际上,您可以以任何您想要的方式生成XML,例如to_xml
或其他演示程序类型库。
对于WSDL,我转而使用官方的,只需将底层的服务地址更改为我的服务提供这个修改的WSDL的位置。
发布于 2016-02-23 22:45:43
您是否尝试过使用SoapUI,添加端点并直接命中它以查看您要返回的是什么?
https://stackoverflow.com/questions/35585961
复制相似问题