Заголовок конверта Soap в Delphi 7, не включая кодировку utf-8.Как я могу изменить это? - PullRequest
2 голосов
/ 11 октября 2010

У меня проблемы с получением недопустимых символов, отличных от ascii, от клиента Delphi 7, отправляющего XML-код в формате utf-8 на C # WebService в параметре String.С клиентом .Net символы принимаются без проблем.Я много чего перепробовал, и ничего не получалось, поэтому я решил проследить разговор SOAP с Wireshark.В клиенте .Net XML для конверта SOAP кодируется в формате utf-8 следующим образом:

POST //TesteService/ServicoAgente.asmx HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3615)
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://example.com/ValidarTransacao"
Host: 192.168.254.2
Content-Length: 1530
Expect: 100-continue
Connection: Keep-Alive

HTTP/1.1 100 Continue

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body> .....

Однако в заголовке SOAP Delphi 7 заголовок кодирования не включается следующим образом:

POST /TesteService/ServicoAgente.asmx HTTP/1.1
SOAPAction: "http://example.com/ValidarTransacao"
Content-Type: text/xml
User-Agent: Borland SOAP 1.2
Host: 192.168.254.1
Content-Length: 1548
Connection: Keep-Alive
Cache-Control: no-cache

<?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"><SOAP-ENV:Body> .....

В качестве параметра внутри тела SOAP содержится мой XML с некоторыми не-ascii символами, который отображается как ??внутри веб-службы C # после того, как я получил метод от клиента Delphi, и это кажется мне единственным логическим объяснением.Когда я проверяю XML в Delphi прямо перед отправкой, он прекрасно кодируется, но на принимающей стороне я получаю ??.
На модуле, импортированном с помощью средства импорта WSDL, он указывает utf-8, как вы можете видеть ниже:

initialization
  InvRegistry.RegisterInterface(TypeInfo(TesteAgentSoap), 'http://example.com/', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(TesteAgentSoap), 'http://example.com/%operationName%');
  InvRegistry.RegisterInvokeOptions(TypeInfo(TesteAgentSoap), [ioDefault, ioDocument, ioHasReturnParamNames, ioHasNamespace]);

end.

Что я могу сделать, чтобы изменить кодировку XML для конверта SOAP?Есть идеи, что еще может быть не так?Мне кажется логичным, что, если XML для конверта SOAP неправильно закодирован как utf-8, тогда мой XML внутри этого XML не будет правильно читаться
Так много за ваше время

Ответы [ 2 ]

3 голосов
/ 11 октября 2010

Если вы используете HTTPRio / HTTPWebNode, возможно, это поможет:

  • установите для HTTPRIO.Converter.Options.soUTF8InHeader значение True
  • установите для HTTPWebNode.UseUTF8InHeader значение True

(найдено здесь )

0 голосов
/ 11 октября 2010

Если я вас правильно понимаю, вы пытаетесь понять, как добавить строку utf-8 в конверт SOAP? Боюсь, я не думаю, что это так просто (но чтобы быть уверенным, вы могли бы изменить поток XML мыла и протестировать его).

Delphi до Delphi 2009 не поддерживала Unicode и поэтому не кодировала элементы, выходящие как UTF-8, поскольку сам Delphi не был. Некоторые европейские символы могут быть хорошо представлены в delphi, но внешне его можно догадаться.

Лучше всего обновиться до версии Delphi, поддерживающей Unicode, или, если это невозможно, использовать библиотеку Unphode Delphi, например TNT .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...