Dj *_*j S 5 macos applescript soap web-services
我目前正在使用AppleScript编辑器.我在那里运行以下代码:
tell application "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL"
call soap {method name:"CelsiusToFahrenheit", method namespace uri:"http://www.w3schools.com/webservices/", parameters:{Celsius:50 as string}, SOAPAction:"http://www.w3schools.com/webservices/CelsiusToFahrenheit"}
end tell
Run Code Online (Sandbox Code Playgroud)
如果我执行上面的代码,我会得到一个"错误"字符串(这不是我的预期).生成的请求如下:
<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:CelsiusToFahrenheit xmlns:m="http://www.w3schools.com/webservices/">
<Celsius xsi:type="xsd:int">50</Celsius>
</m:CelsiusToFahrenheit>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
如果我像这样编辑请求(我使用Fiddler来编辑请求):
<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<CelsiusToFahrenheit xmlns="http://www.w3schools.com/webservices/">
<Celsius xsi:type="xsd:int">50</Celsius>
</CelsiusToFahrenheit>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
我收到"122",这是正确的答案.
我的问题是:
瘦者:
\n\n该功能中的一个错误call soap忽略了正确地为调用提供的参数进行命名空间标记:方法名称元素以 为前缀m:,但参数元素却没有。
解决方法是显式地在参数名称前加上m:;前缀。在上面的示例中,使用|m:Celsius|而不是Celsius- 请注意,需要封闭的|符号,这样您就可以使用这样的名称,否则会破坏解析。
警告:如果苹果修复了这个错误,这个解决方法有可能会被破坏。
\n\n将解决方法应用到上面的示例中可以得到:
\n\ntell application "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL"\n call soap {method name:"CelsiusToFahrenheit", \xc2\xac\n method namespace uri:"http://www.w3schools.com/webservices/", \xc2\xac\n parameters:{|m:Celsius|:50 as string}, \xc2\xac\n SOAPAction:"http://www.w3schools.com/webservices/CelsiusToFahrenheit"}\nend tell\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n\n
\n- (...)“callsoap”函数使用的 SOAP 格式是旧格式吗?
\n
简而言之:AppleScript 使用 SOAP 1.1架构,虽然底层的 API 也支持 SOAP 1.2,但您无法从AppleScript中选择它((您只能使用 Carbon 从 C 语言中进行选择)进行选择))
\n\n如上所述,SOAP XML 构造有一个错误,这就是调用不起作用的原因。(Web 服务位于http://www.w3schools.com/webservices/tempconvert.asmx确实支持 1.1,同时也支持 1.2)。
\n\ncall soap以下是有关和的重要性和维护状态的一些线索call xml-rpc:
这些功能在独立于 AppleScript 语言指南的文档中进行了描述中进行了描述,即使它们似乎是语言本身的一部分(在任何外部词典中都找不到它们)
该文档于 2001 年编写(从 OSX 10.1 开始;2005 年仅进行了微小修订;添加了可能过时的 Web 服务 URL 的警告:))。
\n\n\n'2. 有没有办法解决这个问题(例如,删除请求中的“:m”或“m:”,或者通过在“调用soap”方法中设置参数来通过代码使用不同的SOAP格式?
\n
(请参阅上面的解决方法。)
\n\n根据文档状态线索,我不会屏息等待苹果的更新或修复——这很遗憾,因为这些功能看起来真的很方便。
\n| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |