Использование SOAP Rails Webservice не работает в Delphi 2009, но работает нормально в Delphi 2006 - PullRequest
1 голос
/ 07 декабря 2009

У меня есть мыльный веб-сервис, написанный на RubyOnRails, и клиент, написанный на Delphi. Клиент и сервер хорошо взаимодействуют, используя Delphi 2006, но компиляция с более новым Delphi 2009 приводит к «краху» сервера Rails.

Это запрос (сгенерированный встроенным 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

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" в Delphi 2009 отличается, но я не знаю, как это изменить.

Ответы [ 2 ]

2 голосов
/ 08 декабря 2009

Я нашел решение. После сравнения запросов, которые были в основном одинаковыми (в Delphi 2006 было еще несколько разрывов строк и отступов в XML), я обнаружил разницу в HTTP-заголовке (используя Wireshark)

Delphi 2006: Content-Type: text / xml
Delphi 2009: Content-Type: text / xml; кодировка = "UTF-8"

Решение:

RIO.HTTPWebNode.UseUTF8InHeader := False; 

Значение по умолчанию для этого свойства было изменено с Delphi 2006 на Delphi 2009

Вывод: Кажется, это ошибка в Ruby (на Rails). Он работал с обеими версиями Delphi с локальной установкой веб-сервиса на компьютере с Windows. Проблема возникла только на рабочей машине под управлением Linux.

0 голосов
/ 08 декабря 2009

Трудно сказать без дополнительной информации ...
Вы только что перекомпилировали код или повторно импортировали WSDL в D2009?
Есть большая вероятность, что вы получите 1, используя WideString, когда другая простая строка.
И у вас может быть разница между неявным и явным преобразованием строк, которое вы пропустили.

...