我有一个用RubyOnRails编写的soap webservice和一个用Delphi编写的客户端。客户端和服务器使用Delphi 2006交流良好,但与新版Delphi 2009编译会导致Rails服务器“崩溃”。消费SOAP Rails Webservice在Delphi 2009中不起作用,但在Delphi 2006中正常
这是请求(产生通过内置在THTTPRIO):
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><NS1:IsValidCouponCode xmlns:NS1="urn:ActionWebService"><coupon_code xsi:type="xsd:string">1VK3K-7N45K-4V76W-JCS2F-NC125</coupon_code></NS1:IsValidCouponCode></SOAP-ENV:Body></SOAP-ENV:Envelope>
这是Rails的web服务的“响应”
Internal protocol error: Bad encoding name "UTF-8"
Backtrace:
/usr/lib/ruby/1.8/rexml/encoding.rb:31:in `encoding='
/usr/lib/ruby/1.8/rexml/source.rb:54:in `encoding='
/usr/lib/ruby/1.8/xsd/xmlparser/rexmlparser.rb:24:in `do_parse'
/usr/lib/ruby/1.8/soap/parser.rb:92:in `parse'
/usr/lib/ruby/1.8/soap/processor.rb:39:in `unmarshal'
[...]
所以它似乎很清楚,一些与“UTF- 8“编码在德尔福2009年是不同的,但我不知道如何改变这一点。
由于您没有指定如何调用web服务,因此有些猜测: 看起来您的请求没有指定编码,并且Rails接着期望使用UTF8编码。 我怀疑在Delphi 2009中它现在用UTF-16编码发送数据。 当你告诉我们你是如何实际发送请求到web服务的,那么我们可以试着解决它。 – 2009-12-07 17:09:01
我使用默认方式通过THTTPRio(为WSDL生成的Delphi接口)调用webservice – 2009-12-08 08:53:10
谢谢。现在你可以向我们提供服务运行的WSDL或公共URL吗? – 2009-12-08 09:42:10