PDA

View Full Version : تبدیل برنامه به وب سرویس



sg.programmer
سه شنبه 10 مرداد 1396, 22:32 عصر
سلام
من یک برنامه ویندوزی سی شارپ دارم که بر روی شبکه لن کار میکنه و با دیتابیس SQL
حالا این برنامه می بایست در چند شهر از این برنامه استفاده کنند راه حل استفاده اشتراکی چگونه هست؟
آیا دیتابیس بر روی سرور تحت وب قرار بگیره کافی هست؟
آیا الازمی به استفاده از وب سرویس هست؟ طریقه تبدیلش چگونه می باشد؟
آیا با ایجاد یک شبکه اینترانت حل خواهد شد؟
و مواردی از این دست: چه راه کاری وجود داره؟
تشکر

رامین مرادی
چهارشنبه 11 مرداد 1396, 10:31 صبح
همه مواردی که گفتید قابل اجرا هست
ما خودمون بین شعباتمون *** راه اندازی کردیم(اینترانت) یه سرور اصلی تو یکی از شعباتمون هست.و دیتابیسمون روش نصب هست و به عنوان فایل سرور هم استفاده میشه.

mrali.jalali
چهارشنبه 11 مرداد 1396, 12:59 عصر
می تونی یک آی پی ولید بگیری و تنظیم کنی که دایرکت بشه روی سرورته (وی پی ان یا مستقیم) سایر شعب از طریق اینترنت به سرور و برنامه ت وصل میشن .

محمد آشتیانی
چهارشنبه 11 مرداد 1396, 13:44 عصر
سلام
اینکه دیتابیس روی سرور قرار بگیره و کلاینت ها مستقیم بهش کانکت بشن ایده خوبی نیست از هیچ جهت ، راه درست پیاده سازی یک وب سرویس هست و کلاینت های شما باید با وب سرویس ارتباط برقرار کنن و فقط سرویس هست که با دیتابیس در ارتباطه
در مورد تبدیل هم ، بنده از ماهیت برنامه شما و نحوه پیاده سازیش اطلاعی ندارم ، اما قطعا نیازه که تغییراتی انجام بدید در برنامتون.

sg.programmer
چهارشنبه 11 مرداد 1396, 14:18 عصر
می تونی یک آی پی ولید بگیری و تنظیم کنی که دایرکت بشه روی سرورته (وی پی ان یا مستقیم) سایر شعب از طریق اینترنت به سرور و برنامه ت وصل میشن .

آیا میشه بدون وب سرویس اینکار را انجام داد؟

sg.programmer
چهارشنبه 11 مرداد 1396, 14:19 عصر
همه مواردی که گفتید قابل اجرا هست
ما خودمون بین شعباتمون *** راه اندازی کردیم(اینترانت) یه سرور اصلی تو یکی از شعباتمون هست.و دیتابیسمون روش نصب هست و به عنوان فایل سرور هم استفاده میشه.

آیا بدون وب سرویس کار میکنه؟

sg.programmer
چهارشنبه 11 مرداد 1396, 14:23 عصر
سلام
اینکه دیتابیس روی سرور قرار بگیره و کلاینت ها مستقیم بهش کانکت بشن ایده خوبی نیست از هیچ جهت ، راه درست پیاده سازی یک وب سرویس هست و کلاینت های شما باید با وب سرویس ارتباط برقرار کنن و فقط سرویس هست که با دیتابیس در ارتباطه
در مورد تبدیل هم ، بنده از ماهیت برنامه شما و نحوه پیاده سازیش اطلاعی ندارم ، اما قطعا نیازه که تغییراتی انجام بدید در برنامتون.


مینویتد بگید چرا ایده خوبی نیست؟ ==> اینکه دیتابیس روی سرور قرار بگیره و کلاینت ها مستقیم بهش کانکت بشن ایده خوبی نیست از هیچ جهت

سرویس باید در کجا قرار بگیره؟ ==> راه درست پیاده سازی یک وب سرویس هست و کلاینت های شما باید با وب سرویس ارتباط برقرار کنن و فقط سرویس هست که با دیتابیس در ارتباطه

حدود 30 فرم و 15 جدول که انواع و اقسام کارها در آن انجام میشه (گزارشگیری - افزودن و ویرایش و...) ==> بنده از ماهیت برنامه شما و نحوه پیاده سازیش اطلاعی ندارم

در نهایت تشکر مهندس

محمد آشتیانی
چهارشنبه 11 مرداد 1396, 15:13 عصر
مینویتد بگید چرا ایده خوبی نیست؟ ==> اینکه دیتابیس روی سرور قرار بگیره و کلاینت ها مستقیم بهش کانکت بشن ایده خوبی نیست از هیچ جهت

بخاطر اینکه امنیت دیتای شما به خطر میفته (این یک دلیل)



سرویس باید در کجا قرار بگیره؟ ==> راه درست پیاده سازی یک وب سرویس هست و کلاینت های شما باید با وب سرویس ارتباط برقرار کنن و فقط سرویس هست که با دیتابیس در ارتباطه

دیتابیس و سرویس روی سرور قرار میگیرن ، هم میشه روی یک سرور باشن و هم سرورهای مجزا (این به سیاست شما ، حجم کاری و امکاناتتون برمیگرده)



حدود 30 فرم و 15 جدول که انواع و اقسام کارها در آن انجام میشه (گزارشگیری - افزودن و ویرایش و...) ==> بنده از ماهیت برنامه شما و نحوه پیاده سازیش اطلاعی ندارم

شما احتمالا جای جای کدتون کوئری زدین و دسترسی به دیتابیس دارین ، اگر اینطوره تغییرات زیادی باید بدید ، در کدتون (کلاینت ها) هیچ کد دسترسی به دیتابیسی نباید باشه و هرچی مورد نیازه باید از طریق صدا زدن متد های سرویس تامین بشه.

ali_md110
چهارشنبه 11 مرداد 1396, 15:26 عصر
اساس کار وب سرویس ها بر اساس دریافت و ارسال پیام هست از طریق پروتکل های استانداردی مثل Http.
بدین معنی که وب سرویس منتظر می مونه تا کلاینت ها بهش وصل بشه و بنا به درخواست کلاینت به آن ها پاسخ بده
یعنی کاربران شما فقط یک سری کوئری ارسال میکنند و جواب مناسب دریافت میکنند در واقع نیاز نیست بدونند در پس زمینه سرویس دهنده چه کارایی انجام میشه
حالا طبق گفته های شما
مینویتد بگید چرا ایده خوبی نیست؟ ==> اینکه دیتابیس روی سرور قرار بگیره و کلاینت ها مستقیم بهش کانکت بشن ایده خوبی نیست از هیچ جهت

اگر کلاینهتای شما مستقیم به دیتابیس سرور وصل بشند نیاز هست که نرم افزار همه کلاینتها از چگونگی ساختار بانک اطلاعاتی و رویه ها و بقیه منابع اطلاعاتی و اینکه نسخه بانک شما چی هست حتی اینکه سیستم عامل چی هست اطلاع داشته باشند و اندک تغییر توی سرور مستلزم اینه که کلاینها هم بروز بشن
ولی در روش وب سرویس فقط یک سری داده بصورت xml ارسال شده و کابر اونو دریافت و طبق نیازش ازش استفاده میکنه
و محدودیتی هم نداره و کلاینتها روی هر سیستم عامل و با هر زبان برنامه نویسی میتونن استفاده بکنند

یعنی این 30 فرم شما و گزارشات شما فقط از کوئریهای آماده شده وب سرویس استفاده میکنه
امیدوارم مطلب رسونده باشم

sg.programmer
چهارشنبه 11 مرداد 1396, 18:10 عصر
تشکر آقای محمد آشتیانی (http://barnamenevis.org/member.php?12815-%D9%85%D8%AD%D9%85%D8%AF-%D8%A2%D8%B4%D8%AA%DB%8C%D8%A7%D9%86%DB%8C) و ali_md110

(http://barnamenevis.org/member.php?18325-ali_md110)فقط یک سوال : آیا اگه دیتایس را روی سرور قرار بدم و کلاینت ها با همون روش قبلی به اون سرور متصل کنم مشکی پیش خواهد آمد به جز مواردی که گفتید (امنیت - تغییر کلاینتها - نسخه بانک و..)

رامین مرادی
پنج شنبه 12 مرداد 1396, 07:51 صبح
بخاطر اینکه امنیت دیتای شما به خطر میفته (این یک دلیل)



دیتابیس و سرویس روی سرور قرار میگیرن ، هم میشه روی یک سرور باشن و هم سرورهای مجزا (این به سیاست شما ، حجم کاری و امکاناتتون برمیگرده)



شما احتمالا جای جای کدتون کوئری زدین و دسترسی به دیتابیس دارین ، اگر اینطوره تغییرات زیادی باید بدید ، در کدتون (کلاینت ها) هیچ کد دسترسی به دیتابیسی نباید باشه و هرچی مورد نیازه باید از طریق صدا زدن متد های سرویس تامین بشه.

خب من خودم مستقیما وصل میشم . اما روش کد نویسیم لایه بندی شده هست . که تمام کوئری هام توسط یک لایه به نام DATAACCESS انجام میشه و نتیجه رو بر میگردونه به لایه های پایین..
اگه تصمیم بگیرم برم سمت وب سرویس باید رو این لایه تغییرات انجام بشه دیگه درسته؟ چون کوئری هام فقط و فقط توسط این لایه انجام میشه با دو تا متد .

ali_md110
جمعه 13 مرداد 1396, 02:13 صبح
خب من خودم مستقیما وصل میشم . اما روش کد نویسیم لایه بندی شده هست . که تمام کوئری هام توسط یک لایه به نام DATAACCESS انجام میشه و نتیجه رو بر میگردونه به لایه های پایین..
اگه تصمیم بگیرم برم سمت وب سرویس باید رو این لایه تغییرات انجام بشه دیگه درسته؟ چون کوئری هام فقط و فقط توسط این لایه انجام میشه با دو تا متد .
در وب سرویس به ازای هر درخواست یک متد نوشته میشه شما میتونید مندهای crud رو از لایه هاتون رفرنس بگیرید و توی لایه وب سرویس استفاده کنید نیازی یه هیچ گونه تکرار یا دوباره کاری ندارید
ولی رایج شده که متدهای async await استفاده میشه اگر شما بصورت همزمان متد نوشته باشید sync
ممکنه تغییراتی نیاز باشه بدید
اگر الگوی Repository استفاده کرده باشید خیلی مشکلات کمتر هست

رامین مرادی
جمعه 13 مرداد 1396, 08:05 صبح
در وب سرویس به ازای هر درخواست یک متد نوشته میشه شما میتونید مندهای crud رو از لایه هاتون رفرنس بگیرید و توی لایه وب سرویس استفاده کنید نیازی یه هیچ گونه تکرار یا دوباره کاری ندارید
ولی رایج شده که متدهای async await استفاده میشه اگر شما بصورت همزمان متد نوشته باشید sync
ممکنه تغییراتی نیاز باشه بدید
اگر الگوی Repository استفاده کرده باشید خیلی مشکلات کمتر هست
شرمنده زیاد متوجه نشدم. من مبتدی هستم. من تو لایه دیتا اکسسم یه متد دارم که یه رشته اس کیو ال دریافت میکنه و اجرا میکنه مثلا اینسرت. اگه صحیح اجرا شد یک مقدار درست برمیگردونه اگه نه یک مقدار غلط. حالا نمیشه همینو تو وب سرویس اجرا کرد؟
یا مثلا من یه تابع دیگه دارم باز دستور اس کیو ال میگیره مثل سلکت اونو اجرا میکنه و به صورت دیتا تیبل برمیگردونه. حالا با وب سرویس اینو به صورت ایکس ام ال نمیشه بر گردوند و تبدیل کرد به دیتا تیبل؟

sg.programmer
جمعه 13 مرداد 1396, 22:29 عصر
اگه ممکنه یک سمپلی در این زمینه قرار بدید (طریقه نوشتن وب سرویس واستفاده کردن اون) یایک کتاب

ali_md110
شنبه 14 مرداد 1396, 01:52 صبح
این لینک راهنمایی خوبی کرده
در اخرش نحوه دسترسی به یک وب سرویس با یک نرم افزار win phone اومده که شما میتونید همه جوره پلتفرمی جایگذینش کنید مثلا یک ویندوز فرم یا wpf یا یک وب اپلیکشن دیگه
https://support.microsoft.com/en-us/help/2778398/creating-simple-service-with-asp-net-mvc-web-api-to-be-accessed-by-win

vB.N3T
شنبه 14 مرداد 1396, 11:05 صبح
به نام خدا
راه حل تمامی دوستان صحیح و به جا هستش
اگه سیستم شما یک سامانس و میخایی از این حالت خارجش کنی و بری سمت وب سرویس .بد نیست شاید از سیلولایت استفاده کنی
شاید یه کمی زمانتو بگیره برای شروع اما دقیقا با وب سرویس کار میکنه (البته این یه پیشنهاد بودش)

ali_md110
شنبه 14 مرداد 1396, 13:27 عصر
silver light توسط ماکروسافت دیگه پشتیبانی نمیشه و تا نسخه 5 اون بیشتر ارائه نشد
تقریبا 7 سالی هست کنار گذاشته شده و به نظر من پیشنهاد خوبی نیست
در ضمن مصرف حافظه سیلور لایت زیاد هست

بجای اون ماکروسافت web api رو ارائه داده که بسیار انعطاف داره

مهرداد صفا
شنبه 14 مرداد 1396, 13:34 عصر
سلام.
اگر به صورت سه لایه کار کرده باشید می تونید لایه های DAL و BLL رو بدون اینکه نیاز به تغییرات زیادی داشته باشید به سرور انتقال بدید و فقط نیاز دارید که لایه وب سرویس رو به صورت یک Wrapper روی لایه BLL قرار بدید و متود های BLL رو در وب سرویس پیاده سازی کنید تا رابط بین کلاینت و پایگاه داده باشه.
گرفتن فرمان های SQL از سمت کلاینت به هیچ وجه کار صحیحی نیست و میتونه مشکلات امنیتی متعددی رو براتون به همراه داشته باشه.

محمد آشتیانی
شنبه 14 مرداد 1396, 13:45 عصر
شرمنده زیاد متوجه نشدم. من مبتدی هستم. من تو لایه دیتا اکسسم یه متد دارم که یه رشته اس کیو ال دریافت میکنه و اجرا میکنه مثلا اینسرت. اگه صحیح اجرا شد یک مقدار درست برمیگردونه اگه نه یک مقدار غلط. حالا نمیشه همینو تو وب سرویس اجرا کرد؟
یا مثلا من یه تابع دیگه دارم باز دستور اس کیو ال میگیره مثل سلکت اونو اجرا میکنه و به صورت دیتا تیبل برمیگردونه. حالا با وب سرویس اینو به صورت ایکس ام ال نمیشه بر گردوند و تبدیل کرد به دیتا تیبل؟

سلام
برنامه شما در واقع n-tier نیست ، در برنامه چند لایه ، در لایه Presentation و Business نباید اثری از کوئری و کلا Data Access باشه و هرچه هست باید در لایه Data قرار بگیره.

رامین مرادی
شنبه 14 مرداد 1396, 13:46 عصر
سلام.
اگر به صورت سه لایه کار کرده باشید می تونید لایه های DAL و BLL رو بدون اینکه نیاز به تغییرات زیادی داشته باشید به سرور انتقال بدید و فقط نیاز دارید که لایه وب سرویس رو به صورت یک Wrapper روی لایه BLL قرار بدید و متود های BLL رو در وب سرویس پیاده سازی کنید تا رابط بین کلاینت و پایگاه داده باشه.
گرفتن فرمان های SQL از سمت کلاینت به هیچ وجه کار صحیحی نیست و میتونه مشکلات امنیتی متعددی رو براتون به همراه داشته باشه.

خب میشه دلیل اینکه نباید از سمت کلاینت گرفت رو بدونم؟
منظورتون اس کیو ال اینجکشن هست که ممکنه اتفاق بی افته؟؟
خب اگه منظورتون اینه اونوقت تو حالت وب سرویس هم میشه رشته خاصی برای اینجکت فرستاد.
اگه هم منظورتون رشته اتصال و این چیزاس که تو هیچ لایه ای جر دیتا اکسس تعریف نشده. حالا این دیتا اکسس بره سمت وب سرویس و جایگزین بشه خب هیچکس نمیتونه رشته اتصالو پیدا کنه

رامین مرادی
شنبه 14 مرداد 1396, 13:48 عصر
سلام
برنامه شما در واقع n-tier نیست ، در برنامه چند لایه ، در لایه Presentation و Business نباید اثری از کوئری و کلا Data Access باشه و هرچه هست باید در لایه Data قرار بگیره.
خب صحیح میفرمایید . الان من منظورم اینه اجرا کننده دستوراتم تو وب سرویس باشه فقط.

مهرداد صفا
شنبه 14 مرداد 1396, 16:20 عصر
خب میشه دلیل اینکه نباید از سمت کلاینت گرفت رو بدونم؟
منظورتون اس کیو ال اینجکشن هست که ممکنه اتفاق بی افته؟؟
خب اگه منظورتون اینه اونوقت تو حالت وب سرویس هم میشه رشته خاصی برای اینجکت فرستاد.
اگه هم منظورتون رشته اتصال و این چیزاس که تو هیچ لایه ای جر دیتا اکسس تعریف نشده. حالا این دیتا اکسس بره سمت وب سرویس و جایگزین بشه خب هیچکس نمیتونه رشته اتصالو پیدا کنه

با این کار شما در واقع دارید مدیریت کامل دیتابیس رو در اختیار کلاینت ها قرار میدید تا به راحتی بتونند فرمان های CRUD رو بدون هیچ محدودیتی از طریق درخواست هایی که به وب سرویس می فرستند اجرا کنند
که با توجه به سطح دسترسی یوزر، می تونه برای کل دیتابیس های روی سرور هم خطرناک باشه. در مورد injection از طریق رشته ها وضع فرق داره، شما می تونید با رعایت چند نکته کوچیک احتمال حمله رو تا حد خیلی زیادی کاهش بدید در حالیکه در این حالت راه رو کامل باز گذاشتید.
علاوه بر این شما نیاز دارید که به صورت چند لایه کار کنید و لایه BLL رو حتما روی سرور پیاده سازی کنید، از UI نباید کد SQL به سمت سرور بره و لایه UI باید به کلی از بحث "دسترسی به داده" جدا باشه تا مباحث مربوط به authorization و permission قبل از اجرا شدن SQL روی دیتابیس، در لایه BLL بررسی بشن.
فرض کنید که یک کاربر معمولی قصد داشته باشه متود های مربوط به "مدیریت" رو از طریق اتصال به وب سرویس اجرا کنه! چه اتفاقی می افته؟ اینها چیز هایی که باید وب سرویس قبل از اجرای دستورات بررسی کنه و ضرورت وجود لایه BLL رو نشون میده.

hosaini
جمعه 03 شهریور 1396, 14:50 عصر
باسلام خدمت دوستان گرامی
من هم یه مدته به فکر راه اندازی وب سرویس و اتصال به برنامه های ویندوزی هستم تو این زمینه چند تا ابهام واسم به وجود آمده که میخاستم سئوال کنم
1-به طور مثال چه جوری میشه یه کامپیوتر که روش اس کیو ال نصب هست رو تنظیم کنیم واسه وب سرویس
2-بعد از تنظیم چه جوری میشه بهش از طریق وب سرویس کانکت کرد ممنون میشم جواب بدین