اشکال از Importer ورژن های قبلی دلفی هست که با هر نوع WSDLی سازگاری کامل نداره.
من مورد شما رو روی دو نسخه XE و 7 تست کردم.
یونیت ساخته شده در ورژن 7 یک خط لازم داره:
InvRegistry.RegisterInvokeOptions(TypeInfo(TivaUse rAccountSoap), ioDocument);
به همین دلیل بود که پارامتر هاتون رو نمی تونستید دریافت کنید.
متن کامل یونیت رو براتون می گذارم.
کافیه اون رو در اختیار برنامه نویس هاتون قرار بدید.
روی دلفی 7 و دلفی XE هر دو جواب گرفتم.
موفق باشید.
unit tivauseraccount;
interface
uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;
type
TivaUserAccountSoap = interface(IInvokable)
['{72E54176-A5D4-8E9D-B1E1-1ABA56831FAC}']
function TestDelphi(const test: WideString): WideString; stdcall;
function UpdateTivaUserPass(const lastuser: WideString; const lastpass: WideString; const user: WideString; const pass: WideString): WideString; stdcall;
function GetCreditInfo(const username: WideString; const password: WideString): WideString; stdcall;
function SendSMS(const username: WideString; const password: WideString; const messagebodies: WideString; const sender: WideString; const recipientNumbers_ARRAY: WideString): WideString; stdcall;
function SendSMSWithId(const username: WideString; const password: WideString; const messagebodies: WideString; const sender: WideString; const recipientNumbers_ARRAY: WideString): WideString; stdcall;
function GetMessageStatus(const Refrences: WideString): WideString; stdcall;
function GetMessageStatusWithId(const SendId: WideString): WideString; stdcall;
function SendPPSMS(const username: WideString; const password: WideString; const messagebodies_Array: WideString; const sender: WideString; const recipientNumbers_ARRAY: WideString): WideString; stdcall;
function SendPPSMSWithId(const username: WideString; const password: WideString; const messagebodies_Array: WideString; const sender: WideString; const recipientNumbers_ARRAY: WideString): WideString; stdcall;
function DeliveryRefresh(const username: WideString; const password: WideString): WideString; stdcall;
function GetLastDeliveryStatus(const username: WideString; const password: WideString): WideString; stdcall;
function GetUserInfo(const username: WideString; const password: WideString): WideString; stdcall;
function UserPermission(const username: WideString; const password: WideString): WideString; stdcall;
function GetUnReadReceivedSMS(const username: WideString; const password: WideString; const phonenumber: WideString): WideString; stdcall;
function GetReceivedSMSWithStatus(const username: WideString; const password: WideString; const phonenumber: WideString; const status: Integer): WideString; stdcall;
function GetTopReceivedSMS(const username: WideString; const password: WideString; const phonenumber: WideString; const status: Integer; const TopSender: Integer): WideString; stdcall;
function GetReceivedSMSWithDate(const username: WideString; const password: WideString; const phonenumber: WideString; const status: Integer; const FromDate: WideString; const ToDate: WideString): WideString; stdcall;
function NumberConfirm(const username: WideString; const password: WideString; const number: WideString): WideString; stdcall;
end;
function GetTivaUserAccountSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): TivaUserAccountSoap;
implementation
function GetTivaUserAccountSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): TivaUserAccountSoap;
const
defWSDL = 'http://webservice.tivasms.ir/tivauseraccount.asmx?wsdl';
defURL = 'http://webservice.tivasms.ir/tivauseraccount.asmx';
defSvc = 'TivaUserAccount';
defPrt = 'TivaUserAccountSoap';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as TivaUserAccountSoap);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
initialization
InvRegistry.RegisterInterface(TypeInfo(TivaUserAcc ountSoap), 'http://webservice.TivaSMS.ir', 'utf-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(Tiv aUserAccountSoap), 'http://webservice.TivaSMS.ir/%operationName%');
{Here was your problem in old versions}
InvRegistry.RegisterInvokeOptions(TypeInfo(TivaUse rAccountSoap), ioDocument);
end.