PDA

View Full Version : تغییر SOAPRequest در وب سرویس



arkia
شنبه 27 آبان 1391, 21:00 عصر
من از یک وب سرویس استفاده می کنم اما وقتی خروجی xml ش رو با fiddler نگاه میکنم توش انکودینگ مشخص نشده چطور میشه تویHTTPRIO مقدار، encoding یک SOAPRequest را به utf-8تغییر داد؟

چیزی که ارسال میشه:

<?xml version="1.0"?>


چیزی که نیاز دارم:

<?xml version="1.0" encoding="UTF-8"?>


من این کد ها رو نوشتم اما متاسفانه کار نکرد:

RIO.HTTPWebNode.UseUTF8InHeader:=true;
RIO.Converter.Encoding:='utf-8';


به این فکر رسیدم که soaprequest رو تغییر بدم اما نمیدونم کجا و چطور...

با تشکر از راهنمایی های شما.

Felony
یک شنبه 28 آبان 1391, 05:36 صبح
HTTPRIO1.Converter.Encoding:='UTF-8';
HTTPRIO1.Converter.Options:= HTTPRIO1.Converter.Options + [soUTF8InHeader];

این هم برای نسخه های قدیمی : http://www.borlandtalk.com/httprio-utf8-delphi-6-enterprise-vt71044.html

تو نسخه های جدید باید مشکلتون با همون کد بالا حل بشه چون داده ها به صورت Stream مبادله میشن و احتمالا این مورد در اونها لحاظ شده ولی میتونی تو رویداد BeforeExecute مقدار SOAPRequest رو بگیری و تو یک StringStream بریزی و اون مورد لینک بالا رو روی DataString حاصل لحاظ کنی و در آخر دوباره اون StringStream رو به SOAPRequest اختصاص بدی ، شاید جواب بده .

arkia
یک شنبه 28 آبان 1391, 14:56 عصر
HTTPRIO1.Converter.Encoding:='UTF-8';
HTTPRIO1.Converter.Options:= HTTPRIO1.Converter.Options + [soUTF8InHeader];

این هم برای نسخه های قدیمی : http://www.borlandtalk.com/httprio-utf8-delphi-6-enterprise-vt71044.html

تو نسخه های جدید باید مشکلتون با همون کد بالا حل بشه چون داده ها به صورت Stream مبادله میشن و احتمالا این مورد در اونها لحاظ شده ولی میتونی تو رویداد BeforeExecute مقدار SOAPRequest رو بگیری و تو یک StringStream بریزی و اون مورد لینک بالا رو روی DataString حاصل لحاظ کنی و در آخر دوباره اون StringStream رو به SOAPRequest اختصاص بدی ، شاید جواب بده .

من با دلفی7 انجامش میدم، کد بالا که جواب نمیده اینجا هم همین کد رو خودم گذاشته بودم (http://barnamenevis.org/showthread.php?369025) اما نمیدونم چطوری ازش استفاده کنم به خاطر همین میخوام soaprequest رو بخونم و خودم دستی تغییرش بدم اما مشکل من اینه که شیء httprio از یونیتی که wsdl importer تولید کرده اومده و نمیتونم رویداد واسش تعریف کنم (http://barnamenevis.org/showthread.php?369025). چون non visual هستش با اون روش ها هم قبلا تست کرده بودم (به خاطر پارامتر هاش) ...

حتی یونیت rio.pas رو هم آپدیت کردم باز نشد (http://cc.embarcadero.com/Download.aspx?id=24535)