نمایش نتایج 1 تا 12 از 12

نام تاپیک: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

  1. #1
    کاربر دائمی آواتار hp1361
    تاریخ عضویت
    دی 1384
    محل زندگی
    تهران
    پست
    750

    چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    با سلام

    من با کد زیر استثناء در زمان اتصال به سرور Datasnap رو هندل میکنم


    procedure TForm2.btn_1Click(Sender: TObject);
    begin
    try
    ClientModule1.SQLConnection1.Open;
    except
    on E: TDBXError do
    begin
    if (e.errorcode=TDBXErrorCodes.AuthorizationFailed) then
    ShowMessage('hello');
    end;
    end;

    end;


    و نام کاربری رو عمدا اشتباه وارد میکنم اما چیزی که برمیگردونه مقدار None=0 هستش در حالیکه انتظار AuthorizationFailed=113 رو دارم!. حالا اگر دستور نمایش پیام ارور رو بدم ، پیغام به صورت زیر هستش!

    errormessage.png

    مشکل کجاست و چطور بتونم مدیریتش کنم؟

    ممنون

    پ.ن: در زمان نوشتن این کدا اشتباها AuthorizationFailed رو AuthenticationFailed می خوندم و انتظار هندل داشتم! و فکر میکردم باید کد 113 برگردونه در حالیکه کد 0 بر میگردوند و کد 0 برابر با None بود.
    آخرین ویرایش به وسیله hp1361 : جمعه 30 فروردین 1392 در 19:54 عصر

  2. #2
    کاربر دائمی آواتار tomalaki
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    شیراز
    سن
    37
    پست
    156

    نقل قول: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    منم همین مشکل رو دارم

  3. #3

    نقل قول: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    سلام
    واقعاً یادم رفت که این تاپیک رو بررسی کنم.
    برای مدیریت کردن قضایایی از این دست قبلاً آقای andreano lanusse روشی را در لینک زیر توضیح داده بودند(برای مشاهده باید از روشهای غیر رایج استفاده کنید!):
    http://www.andreanolanusse.com/en/da...pip-transport/

  4. #4
    کاربر دائمی آواتار hp1361
    تاریخ عضویت
    دی 1384
    محل زندگی
    تهران
    پست
    750

    نقل قول: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    سلام

    خوب وقتی پیام بالا نمایش داده میشه آیا به این معنی نیست که یک Exception از سمت سرور به سمت کلاینت ارسال شده؟

    اگه آره چرا پس نمیتونم هندلش کنم؟

    اگه نه پس این پیغام برا چیه؟

    ممنون

  5. #5

    نقل قول: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    سلام
    خوب وقتی پیام بالا نمایش داده میشه آیا به این معنی نیست که یک Exception از سمت سرور به سمت کلاینت ارسال شده؟
    دقیقاً همینطوره
    اگه آره چرا پس نمیتونم هندلش کنم؟
    اگه نه پس این پیغام برا چیه؟
    ، در یک مورد خاص اینقدر سوال عجیب و غریب می پرسید که آدم هنگ میکنه چی رو باید جواب بده!

    اینطوری نمیشه، باید یک مثال بزنم. در مواقعی شما نیاز دارید که بنا به شرایط پیش آمده یک ErrorCode رو از برنامه سرور به یک کلاینت ارسال کنید. کلاس TDBXError طوری پیاده سازی شده که میتونه یک ErrorCode رو هم شامل بشه(بهتره که به پیاده سازیش نگاهی بیاندازید). نیازی نیست که حتماً از کلاس TDBXError استفاده کنید بلکه خودتان می توانید یک کلاس استثنا را با ساختاری شبیه آن و با نام دیگری بسازید و ازش استفاده کنید. در یک مثال ساده در زیر نحوه فرستان کد خطا از سرور به کلاینت را نشان داده ام.
    برای نمونه این کد ساده را در رویداد OnUserAuthenticate کامپوننت DSAuthenticationManager در برنامه سرور بنویسید:
    procedure TServerContainer1.DSAuthenticationManager1UserAuth  enticate
    (Sender: TObject; const Protocol, Context, User, Password: string;
    var valid: Boolean; UserRoles: TStrings);
    begin
    valid := False;
    if User = 'ali' then
    valid := True
    else
    raise TDBXError.Create(113, 'نام کاربری و/یا رمز عبور اشتباه است');
    end;

    حالا در سمت کلاینت از کدی مثل کد زیر استفاده کن و یه فاتحه برای اموات ما بخون(!):
    procedure TForm2.Button1Click(Sender: TObject);
    begin
    try
    ClientModule1.SQLConnection1.Params.Values['DSAuthenticationUser'] := 'MyInvalidUser!';
    ClientModule1.SQLConnection1.Open;
    except
    on E: TDBXError do
    ShowMessage(IntToStr(E.ErrorCode));
    end;
    end;

    موفق باشید...
    آخرین ویرایش به وسیله BORHAN TEC : جمعه 30 فروردین 1392 در 10:37 صبح

  6. #6
    کاربر دائمی آواتار hp1361
    تاریخ عضویت
    دی 1384
    محل زندگی
    تهران
    پست
    750

    نقل قول: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    سلام

    بسیار ممنون از پاسخ و صبر و حوصله شما

    با مثال شما من خیلی ذهنم بازتر شد. البته اگه بخاطر بیارید من در مورد استفاده از یک وب سرویس خاص خیلی مشکل داشتم که یجورایی با چیزی مثل مثال شما قبلا حلش کردم.

    مشکل الان من اینه که این استثنائی که الان از سمت سرور داره میاد(تصویر بالا) مگه این نیست؟


    AuthorizationFailed


    اگه اره پس چرا کد ارور 0 برمیگردونه

    اگه نه یعنی برای این ارور کدی نزاشتن برادرای Embarcadero؟

    ممنون

  7. #7

    نقل قول: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    سلام
    البته اگه بخاطر بیارید من در مورد استفاده از یک وب سرویس خاص خیلی مشکل داشتم که یجورایی با چیزی مثل مثال شما قبلا حلش کردم.
    متاسفانه به خاطر نمیارم.
    مشکل الان من اینه که این استثنائی که الان از سمت سرور داره میاد(تصویر بالا) مگه این نیست؟...
    نه، Authentication با Authorization فرق داره! اگه به صورت ساده بخوام بگم Authorization زیر مجموعه ای از Authentication است. اگر شما اجازه ورود به یک خانه را داشته باشید به این میگن Authentication . اینکه شما اجازه ورود به اتاق های خانه را داشته باشید یا نه بحث Authorization پیش میاد. به کلام ساده برای رسیدن به مرحله Authorization باید ابتدا از مرحله Authentication عبور کرده باشیم. این فرق بین این دو بود در حالت کلی!
    اگه اره پس چرا کد ارور 0 برمیگردونه

    اگه نه یعنی برای این ارور کدی نزاشتن برادرای Embarcadero؟
    این که عدد 0 رو برمیگردونه برای من هم کمی عجیبه. در هر صورت من در این مورد هنوز راه حل دیگری را پیدا نکرده ام و بعید هم میدانم فعلاً بجز راه حلی که ارائه کردم راه حل دیگری وجود داشته باشد. اگر شما راه حل دیگری پیدا کردید من خوشحال می شوم که اطلاع دهید.

    موفق باشید...
    آخرین ویرایش به وسیله BORHAN TEC : جمعه 30 فروردین 1392 در 10:42 صبح

  8. #8
    کاربر دائمی آواتار hp1361
    تاریخ عضویت
    دی 1384
    محل زندگی
    تهران
    پست
    750

    نقل قول: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    سلام

    اشتباه از من بود.وقتی در قسمت Authorization ورودی رو اشتباه وارد کردم Exception هندل شد.

    اما کماکان با این Authentication مشکل پابرجاست!

    چرا برای Authorization کد ارور تعریف کردن اما برای Authentication نه؟

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

    فقط به من بگید چطور بفهمم این 113 از کجا اومده و پیغامش توی کدوم یونیته.(وقتی از تابعی که اوتورایز نشده برای کاربر استفاده کنم این کد پس میده)

    ممنون

  9. #9
    کاربر دائمی آواتار hp1361
    تاریخ عضویت
    دی 1384
    محل زندگی
    تهران
    پست
    750

    نقل قول: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    سلام مجدد

    خودم گشتم و اینارو پیدا کردم

    اول این



    procedure TDSServer.Connecting(const ConnectEventObject: TDSConnectEventObject);
    var
    LDSSession: TDSSession;
    begin
    LDSSession := TDSSessionManager.GetThreadSession;
    if LDSSession <> nil then
    if not LDSSession.Authenticate(ConnectEventObject.ServerC onnectionHandler.AuthenticateEventObject,
    ConnectEventObject.ConnectProperties) then
    raise TDBXError.Create(0, SAuthenticationFailed);

    if Assigned(FConnectEvent) then
    FConnectEvent(ConnectEventObject);
    end;



    یعنی اگه Authenticate نشه این SAuthenticationFailed باید رخ بده!که داریم:


    SAuthenticationFailed = 'Authentication manager rejected user credentials. This may due to invalid combination of DS user name and password';
    اما در بخش تعریف کد برای ارور ها اینو باز داریم:



    /// <summary>Error codes for DBXError exceptions</summary>

    TDBXErrorCodes = class
    const
    ///<summary>Successful completion.</summary>
    None = $0000;


    یعنی صفر هم برای None تعریف شده و هم برای SAuthenticationFailed

    آیا این باگ نیست؟ یا برداشت من اشتباهِ ؟
    آخرین ویرایش به وسیله hp1361 : جمعه 30 فروردین 1392 در 12:39 عصر

  10. #10

    نقل قول: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    سلامی مجدد
    آیا این باگ نیست؟ یا برداشت من اشتباهِ ؟
    برداشت شما اشتباه نیست. به نظر من هم بهتر بود که یک کد خطای منحصر به فرد هم برای Authentication تعریف می کردند، چون کد خطای 0 زیاد مناسب این کار نیست. سعی می کنم که این مورد را گزارش کنم.

  11. #11
    کاربر دائمی آواتار tomalaki
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    شیراز
    سن
    37
    پست
    156

    نقل قول: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    نقل قول نوشته شده توسط Object Pascal مشاهده تاپیک

    ShowMessage(IntToStr(E.ErrorCode));

    با این دستور کد 113 رو نشون میده. من از E.Message استفاده کردم درست شد. اما یه Remote Error هم ظاهر شده. نمیشه کاریش کرد اونم نباشه؟

    04-19-2013 9-51-06 PM.png

  12. #12

    نقل قول: چگونه استثناء در زمان اتصال به سرور Datasnap را هندل کنیم؟

    با این دستور کد 113 رو نشون میده. من از E.Message استفاده کردم درست شد. اما یه Remote Error هم ظاهر شده. نمیشه کاریش کرد اونم نباشه؟
    شما به ساختار Case اعتقاد دارید؟!
    procedure TForm2.Button1Click(Sender: TObject);
    begin
    try
    ClientModule1.SQLConnection1.Params.Values['DSAuthenticationUser'] := 'MyInvalidUser!';
    ClientModule1.SQLConnection1.Open;
    except
    on E: TDBXError do
    Case E.ErrorCode of
    113: ShowMessage('نام کاربری و/یا رمز عبور اشتباه است');
    end;
    end;
    end;

تاپیک های مشابه

  1. درخواست زمان از سیستم سرور به فرمت 24 ساعته ...
    نوشته شده توسط احد در بخش C#‎‎
    پاسخ: 3
    آخرین پست: چهارشنبه 17 فروردین 1390, 12:46 عصر
  2. ارور زمان اتصال به سرور
    نوشته شده توسط آرام جان گل در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: یک شنبه 29 فروردین 1389, 11:53 صبح
  3. مشکل در اتصال به سرور در برنامه ای که با SQLServer است
    نوشته شده توسط nasr در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: شنبه 10 مرداد 1383, 09:39 صبح
  4. اتصال یک سرور محلی به یک ÷روکسی سرور
    نوشته شده توسط reza5 در بخش شبکه و Networking‌
    پاسخ: 1
    آخرین پست: چهارشنبه 19 فروردین 1383, 09:30 صبح
  5. اتصال به سرور از طریق حساب ویندوز
    نوشته شده توسط داش اکل در بخش مسائل مرتبط با نصب و راه اندازی
    پاسخ: 5
    آخرین پست: دوشنبه 14 مهر 1382, 10:10 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •