سلام
وب سرویس که ازش استفاده میکنم اگه جواب رو پیدا کنه یک کلاس برمی گردونه و در غیر اینصورت یک استثنا!
حالا چطور بفهمم جواب برگشته یا استثنا؟
در داخل try هم میزارم خودش پیغام رو استثنا رو بصورت showmessage نشان میده!
ممنون
سلام
وب سرویس که ازش استفاده میکنم اگه جواب رو پیدا کنه یک کلاس برمی گردونه و در غیر اینصورت یک استثنا!
حالا چطور بفهمم جواب برگشته یا استثنا؟
در داخل try هم میزارم خودش پیغام رو استثنا رو بصورت showmessage نشان میده!
ممنون
دیروز آقای بهروز عباسی یک فیلم آموزشی در رابطه با مدیریت استثناها ساختند که باید از مباحث گفته شده در آن کمک بگیرید:
https://barnamenevis.org/showthread.p...=1#post1689232
سلام
ممنون.اما من مدیریت استثناها رو بلد بودم!
سوال من اینه که وب سرویس وقتی جواب میده جواب استثناش مثل استثنا ویندوز اپلیکیشنه یا یک استرینگ مثلا! اگه مثل استثنا ویندوز اپلیکیشن نیست چطور مدیریتش کنیم؟
منظورتون از استثنای ویندوز اپلیکیشن چیه؟ آیا وب سرویس نمونه ای برای تست دارید؟ از آنجایی که احتمالاً امکان تست نخواهم داشت لطفاً دقیقتر توضیح دهید چون با این توضیحات کوتاه برای جواب دادن باید علم غیب داشت!سوال من اینه که وب سرویس وقتی جواب میده جواب استثناش مثل استثنا ویندوز اپلیکیشنه یا یک استرینگ مثلا! اگه مثل استثنا ویندوز اپلیکیشن نیست چطور مدیریتش کنیم؟
سلام
شرمنده ام چون نمیدونم چیارو باید بگم!
نویسنده وب سرویس لیست Exception ها رو بهم داده. توی wsdl هم Exception از نوع ERemotableException وجود داره
اما وقتی یک سرویس رو با پارامتر اشتباه ارسال میکنم (مقدار اشتباه یعنی جستجویه چیزی در بانک که وجود نداره و وب سرویس باید یک exception براش پس بفرسته) با اینکه در بلوک try except قرار دادم و چیز خاصی هم در قسمت except ننوشتم پیغام مربوط به exception بصورت showmessage و فارسی نمایش داده میشه!(شماره مورد نظر پیدا نشد)
کجا باید این exception رو مدیریت کنم که چیزی نمایش داده نشه بلکه من براش کد بنویسم
ممنون
سلام
کسی نمی دونه چرا showmessage نمایش داده میشه؟
وقتی چیزی در بانک پیدا نشد استثنا رخ نمیده. زمانی استثنا رخ میده که بخواهیم در فیلدی که وجود نداره جستجو کنیم نه مقداری که وجود ندارد.شاید مشکل شما اینجا باشهمقدار اشتباه یعنی جستجویه چیزی در بانک که وجود نداره و وب سرویس باید یک exception براش پس بفرسته
سلام
وب سرویس مورد استفاده اینطور تعریف شده که اگر رکوردی یافت شد پاسخ بده و اگر یافت نشد یک Exception پس بفرسته.
اگر یوزر نیم و پسورد اشتباه باشه هم یک exception میفرسته.
توی فایل wsdl وب سرویس مذکور هم یک کلاس exception تعریف شده
با اینکه توی بلوک try exception قرار میدم باز هم خودش پیغام ارسالی از سمت سرور رو نمایش میده!
حالا چطور باید کنترلش کرد؟
اون exception چه ربطی داره به exception دلفی!!!؟
اون exception یکسری قرارداد هست بین سرور و کلاینت و شما با یه case یا if ساده می توانید آنها را مدیریت کنید.
در اصل exception ارسالی از سمت وب سرویس یه نوع پیامه نه چیز دیگه ای.
سلام
خوب اگه پیامه چرا خودش انگار که تعریف کرده باشی Showmessage پیغام نمایش داده میشه؟ در حالی که من کدی بصورت showmessage ننوشتم!
مسئله بر سر ShowMessage نیست. برای این که اون پیام نشمایش داده نشه خیلی راحت میشه از یک بلوک try/except استفاده کرد به این شکل:
try
// کدهای شما
except
// این قسمت را خالی بگذارید
end;
مسئله مهمی که در برنامه شما وجود داره اینه که اون استثناها رو نمیشه توسط شرطهای مبتنی بر استثناهای مشتق شده از کلاس Exception در دلفی مدیریت کرد و طبق اون، عملیات مناسب را انجام داد. البته من دارم روی این موضوع تحقیق می کنم. خیلی جالبه، توی پیامی که دلفی نشون میده میگه که استثنای ERemotableException رخ داده ولی با این حال بازم نمیشه اون رو به صورت کامل هندل کرد. البته وقتی که وب سرویس با دلفی درست میشه به راحتی میشه این استثنا رو هندل کرد ولی اگر با دات نت ساخته بشه اینطور نیست! خیلی جالبه، چون خود من هم با وجود مدتی کار در این زمینه تا به حال با چنین مشکلی مواجه نشده بودم!
سلام
آقای عشایری، مشکل من مربوط به این نمیشه که پیش فرض یک 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.
سلام مجدد
دوستان آیا مشکل از این نیست که برنامه نویس در وب سرویس نام استثنا رو 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'
?
بالاخره تونستم ارور رو کنترل کنم!
این کد رو نوشتم و جواب داد:
except
on E: System.SysUtils.Exception do
begin
mmo_TestResult.Lines.Add('تست با شکست مواجه گردید');
mmo_TestResult.Lines.Add(E.Message)
end;
مطمئنی که این درست کار میکنه؟ یعنی الان با این کد میشه به رشته ای که اون استثنای سمت سرور ایجاد می کنه (مثلاً "نام کاربری اشتباه است") دسترسی داشت؟
سلام
بله!
فقط نمیدونم چطور مقایسه کنم اگر فلان exception رخ داد فلان پیغام رو نشون؟
چطور باید انجام داد؟
اگه به پیام رشته ای مربوط به این Exception ها میشه دسترسی داشت میتونید با پردازش پیامهای رشته ای آنها کارهای مناسب را انجام دهید.