View Full Version : سوال: نحوه پاس دادن کلاس دریافتی از وب سرویس در DataSnap
hp1361
یک شنبه 19 مرداد 1393, 11:38 صبح
سلام
من در برنامه ام باید از وب سرویس استفاده کنم که توابع اون یک کلاس بر میگردونه. حالا به چه طریقی این کلاس رو باید پاس بدم؟
باید یک کلاس شبیه اون در برنامه تعریف کنم و مقادیر پروپرتی های کلاس وب سرویس رو بهشون نگاشت کنم. یا نه خود کلاس دریافتی رو مستقیما به کلاینت پاس بدم؟
ممنون
BORHAN TEC
یک شنبه 19 مرداد 1393, 12:33 عصر
با سلام
نحوه انجام کار خیلی واضح در لینک زیر توضیح داده شده:
http://edn.embarcadero.com/article/41338
پیشنهاد می کنم که برنامه سرور و کلاینت رو حتماً و حتماً با یک نسخه دلفی کامپایل کنی و مثلاً طوری نباشه که سرور با XE6 و کلاینت با XE5 کامپایل کنی.
موفق باشی...
hp1361
یک شنبه 19 مرداد 1393, 12:53 عصر
ممنون از پاسخ آقای عشایری
برنامه از وب سرویس یک کلاس person= class(TRemotable) دریافت میکنه(دقت بشه که کلاس person هستش و نه TPerson (حالا برنامه نویس وب سرویس اینطوری نوشته!)).
حالا من در TServerMethods2 و در تابع GetPerson نتیجه برگشتی از وب سرویس رو باید پاس بدم یا نه یک کلاس مثلا TPerson داشته باشم و اینجا ایجاد کنم و مقادیر رو نظیر به نظیر نگاشت بدم و حالا این کلاس ایجاد شده رو پاس بدم؟
حالت اول
function TServerMethods2.GetPerson(const aFirst, aLast: string): person;
begin
Result := GetWS.GetByFirstAndLast(aFirst,aLast);
end;
حالت دوم
function TServerMethods2.GetPerson(const aFirst, aLast: string): TPerson;
var
APerson:person;
BPerson:TPerson;
begin
APerson := GetWS.GetByFirstAndLast(aFirst,aLast);
BPerson:=TPerson.Create;
BPerson.FirstName:=APerson.FirstName;
BPerson.LastName:=APerson.LastName;
BPerson.Email:=APerson.Email;
Result:=BPerson;
end;
ممنون
hp1361
یک شنبه 19 مرداد 1393, 12:54 عصر
ممنون از پاسخ آقای عشایری
برنامه از وب سرویس یک کلاس person= class(TRemotable) دریافت میکنه(دقت بشه که کلاس person هستش و نه TPerson (حالا برنامه نویس وب سرویس اینطوری نوشته!)).
حالا من در TServerMethods2 و در تابع GetPerson آیا نتیجه برگشتی از وب سرویس رو باید پاس بدم و در کلاینت هم از همین کلاس استفاده کنم(با توجه به اینکه نوع کلاس TRemotable هستش)؟ یا نه یک کلاس مثلا TPerson داشته باشم و اینجا ایجاد کنم و مقادیر رو نظیر به نظیر نگاشت بدم و حالا این کلاس ایجاد شده رو پاس بدم؟
حالت اول
function TServerMethods2.GetPerson(const aFirst, aLast: string): person;
begin
Result := GetWS.GetByFirstAndLast(aFirst,aLast);
end;
حالت دوم
function TServerMethods2.GetPerson(const aFirst, aLast: string): TPerson;
var
APerson:person;
BPerson:TPerson;
begin
APerson := GetWS.GetByFirstAndLast(aFirst,aLast);
BPerson:=TPerson.Create;
BPerson.FirstName:=APerson.FirstName;
BPerson.LastName:=APerson.LastName;
BPerson.Email:=APerson.Email;
Result:=BPerson;
end;
ممنون
BORHAN TEC
یک شنبه 19 مرداد 1393, 13:28 عصر
اصلاً نیازی به استفاده از حالت دوم نیست. :لبخندساده:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.