Je rencontre des problèmes lors de la réception de caractères non-ascii incorrects provenant d'un client Delphi 7 qui envoie un code XML encodé en utf-8 à un paramètre C# WebService dans un String. Avec un client .Net, les caractères sont reçus sans problème. J'ai essayé beaucoup de choses, et rien ne semblait fonctionner, j'ai donc décidé de suivre la conversation SOAP avec Wireshark. Avec le client .Net, XML pour l'enveloppe SOAP est utf-8 codé comme suit:Soap Envelope Header dans Delphi 7 n'inclut pas l'encodage utf-8. Comment puis-je le modifier?
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> .....
Cependant, avec l'en-tête SOAP Delphi 7, la tête de codage ne sont pas inclus, comme suit:
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> .....
Inclus dans le corps SOAP, un paramètre XML avec des caractères non-ascii qui apparaît comme ?? à l'intérieur du service Web C# après avoir reçu la méthode du client Delphi, et cela me semble la seule explication logique. Quand je vérifie le XML dans Delphi juste avant de l'envoyer, il est parfaitement encodé mais, à la réception, je reçois ??
Sur l'unité importée en utilisant l'importateur WSDL, il spécifie utf-8, comme vous pouvez le voir ci-dessous:
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.
Que puis-je faire pour changer l'encodage du XML pour l'enveloppe SOAP? Des idées quoi d'autre pourrait être faux? Il me semble logique que, si le XML pour l'enveloppe SOAP n'est pas correctement encodé en utf-8, alors mon XML dans ce XML ne sera pas lu correctement
Tks tellement pour votre temps
Vous êtes génial! J'ai regardé partout! Tks tellement – Pascal