PDA

View Full Version : سوال: پاسخ یک وب سرویس رو چطور مدیریت کنیم؟



hp1361
پنج شنبه 12 بهمن 1391, 19:33 عصر
سلام

وب سرویس که ازش استفاده میکنم اگه جواب رو پیدا کنه یک کلاس برمی گردونه و در غیر اینصورت یک استثنا!

حالا چطور بفهمم جواب برگشته یا استثنا؟

در داخل try هم میزارم خودش پیغام رو استثنا رو بصورت showmessage نشان میده!


ممنون

BORHAN TEC
پنج شنبه 12 بهمن 1391, 20:34 عصر
دیروز آقای بهروز عباسی یک فیلم آموزشی در رابطه با مدیریت استثناها ساختند که باید از مباحث گفته شده در آن کمک بگیرید:
http://barnamenevis.org/showthread.php?327108-&p=1689232&viewfull=1#post1689232

hp1361
پنج شنبه 12 بهمن 1391, 21:11 عصر
سلام

ممنون.اما من مدیریت استثناها رو بلد بودم!

سوال من اینه که وب سرویس وقتی جواب میده جواب استثناش مثل استثنا ویندوز اپلیکیشنه یا یک استرینگ مثلا! اگه مثل استثنا ویندوز اپلیکیشن نیست چطور مدیریتش کنیم؟

BORHAN TEC
جمعه 13 بهمن 1391, 00:25 صبح
سوال من اینه که وب سرویس وقتی جواب میده جواب استثناش مثل استثنا ویندوز اپلیکیشنه یا یک استرینگ مثلا! اگه مثل استثنا ویندوز اپلیکیشن نیست چطور مدیریتش کنیم؟
منظورتون از استثنای ویندوز اپلیکیشن چیه؟ آیا وب سرویس نمونه ای برای تست دارید؟ از آنجایی که احتمالاً امکان تست نخواهم داشت لطفاً دقیقتر توضیح دهید چون با این توضیحات کوتاه برای جواب دادن باید علم غیب داشت!

hp1361
جمعه 13 بهمن 1391, 00:54 صبح
سلام

شرمنده ام چون نمیدونم چیارو باید بگم!

نویسنده وب سرویس لیست Exception ها رو بهم داده. توی wsdl هم Exception از نوع ERemotableException وجود داره

اما وقتی یک سرویس رو با پارامتر اشتباه ارسال میکنم (مقدار اشتباه یعنی جستجویه چیزی در بانک که وجود نداره و وب سرویس باید یک exception براش پس بفرسته) با اینکه در بلوک try except قرار دادم و چیز خاصی هم در قسمت except ننوشتم پیغام مربوط به exception بصورت showmessage و فارسی نمایش داده میشه!(شماره مورد نظر پیدا نشد)

کجا باید این exception رو مدیریت کنم که چیزی نمایش داده نشه بلکه من براش کد بنویسم

ممنون

hp1361
جمعه 13 بهمن 1391, 13:25 عصر
سلام

کسی نمی دونه چرا showmessage نمایش داده میشه؟

سعید صابری
جمعه 13 بهمن 1391, 22:08 عصر
مقدار اشتباه یعنی جستجویه چیزی در بانک که وجود نداره و وب سرویس باید یک exception براش پس بفرسته

وقتی چیزی در بانک پیدا نشد استثنا رخ نمیده. زمانی استثنا رخ میده که بخواهیم در فیلدی که وجود نداره جستجو کنیم نه مقداری که وجود ندارد.شاید مشکل شما اینجا باشه

hp1361
شنبه 14 بهمن 1391, 08:51 صبح
سلام

وب سرویس مورد استفاده اینطور تعریف شده که اگر رکوردی یافت شد پاسخ بده و اگر یافت نشد یک Exception پس بفرسته.

اگر یوزر نیم و پسورد اشتباه باشه هم یک exception میفرسته.

توی فایل wsdl وب سرویس مذکور هم یک کلاس exception تعریف شده

با اینکه توی بلوک try exception قرار میدم باز هم خودش پیغام ارسالی از سمت سرور رو نمایش میده!

حالا چطور باید کنترلش کرد؟

hassan_reza
شنبه 14 بهمن 1391, 09:09 صبح
اون exception چه ربطی داره به exception دلفی!!!؟
اون exception یکسری قرارداد هست بین سرور و کلاینت و شما با یه case یا if ساده می توانید آنها را مدیریت کنید.
در اصل exception ارسالی از سمت وب سرویس یه نوع پیامه نه چیز دیگه ای.

hp1361
شنبه 14 بهمن 1391, 09:22 صبح
سلام

خوب اگه پیامه چرا خودش انگار که تعریف کرده باشی Showmessage پیغام نمایش داده میشه؟ در حالی که من کدی بصورت showmessage ننوشتم!

BORHAN TEC
شنبه 14 بهمن 1391, 10:06 صبح
مسئله بر سر ShowMessage نیست. برای این که اون پیام نشمایش داده نشه خیلی راحت میشه از یک بلوک try/except استفاده کرد به این شکل:
try
// کدهای شما
except
// این قسمت را خالی بگذارید
end;
مسئله مهمی که در برنامه شما وجود داره اینه که اون استثناها رو نمیشه توسط شرطهای مبتنی بر استثناهای مشتق شده از کلاس Exception در دلفی مدیریت کرد و طبق اون، عملیات مناسب را انجام داد. البته من دارم روی این موضوع تحقیق می کنم. خیلی جالبه، توی پیامی که دلفی نشون میده میگه که استثنای ERemotableException رخ داده ولی با این حال بازم نمیشه اون رو به صورت کامل هندل کرد. البته وقتی که وب سرویس با دلفی درست میشه به راحتی میشه این استثنا رو هندل کرد ولی اگر با دات نت ساخته بشه اینطور نیست! خیلی جالبه، چون خود من هم با وجود مدتی کار در این زمینه تا به حال با چنین مشکلی مواجه نشده بودم!

hp1361
شنبه 14 بهمن 1391, 12:24 عصر
سلام

آقای عشایری، مشکل من مربوط به این نمیشه که پیش فرض یک exception اینه که در دیالوگ باکس نمایش داده بشه؟



Message contains the text string to display in the exception dialog box when the exception is raised.

Message stores the error-message string to display when the exception is raised. All Exception constructors expect a string parameter to store in Message. Message text can be hard-coded as a parameter to an Exception constructor, created as dynamic parameter, or loaded from a resource file as a static or dynamically formatted parameter.


ممنون

hp1361
دوشنبه 30 بهمن 1391, 16:06 عصر
سلام مجدد

دوستان آیا مشکل از این نیست که برنامه نویس در وب سرویس نام استثنا رو Exception گذاشته؟


Exception = class(ERemotableException)
private
Fmessage_: string;
Fmessage__Specified: boolean;
procedure Setmessage_(Index: Integer; const Astring: string);
function message__Specified(Index: Integer): boolean;
published
property message_: string Index (IS_OPTN or IS_UNQL) read Fmessage_ write Setmessage_ stored message__Specified;
end;


وقتی در ویژوال استودیو خواستم ازش استفاده کنم این پیغام رو داد:



'Exception' is an ambiguous reference between 'System.Exception' and 'ConsoleApplication1.ServiceWS.Exception'


?

hp1361
دوشنبه 30 بهمن 1391, 16:36 عصر
بالاخره تونستم ارور رو کنترل کنم!

این کد رو نوشتم و جواب داد:


except
on E: System.SysUtils.Exception do
begin
mmo_TestResult.Lines.Add('تست با شکست مواجه گردید');
mmo_TestResult.Lines.Add(E.Message)
end;

BORHAN TEC
دوشنبه 30 بهمن 1391, 17:04 عصر
مطمئنی که این درست کار میکنه؟ یعنی الان با این کد میشه به رشته ای که اون استثنای سمت سرور ایجاد می کنه (مثلاً "نام کاربری اشتباه است") دسترسی داشت؟

hp1361
دوشنبه 30 بهمن 1391, 17:09 عصر
سلام

بله!

فقط نمیدونم چطور مقایسه کنم اگر فلان exception رخ داد فلان پیغام رو نشون؟

چطور باید انجام داد؟

BORHAN TEC
دوشنبه 30 بهمن 1391, 19:56 عصر
اگه به پیام رشته ای مربوط به این Exception ها میشه دسترسی داشت میتونید با پردازش پیامهای رشته ای آنها کارهای مناسب را انجام دهید.