PDA

View Full Version : سوال: ایجاد وب سرویس



Quantum3629
سه شنبه 14 اردیبهشت 1395, 18:57 عصر
سلام دوستان
من همچین سئوالی رو تو یه جای دیگه از تالار پرسیدم ولی به یک جواب قطعی نرسیدم
من درگیر یک پروژه ای ام که بانک اطلاعاتی اش رو با firebird طراحی کردم و روی سرور در حال اجراست و یک نرم افزار رو هم برای کاربران طراحی کردم که تحت شبکه lan به بانک و سرور وصل هستن. از طرفی کاربرانی دارم که از طریق اینترنت و وب سایت پروژه باید بتونند به یکسری از اطلاعاتشون (مثل دیدم پروفایل و یکسری چیزای دیگه) دسترسی داشته باشند . همچنین اینکه یک برنامه دیگه ای دارم که با ++C و کیوت دارم طراحی میکنم و اون هم باید یکسری اطلاعات رو واسه دیتابیس بفرسته و پاسخ ها دریافت کنه . یکسری مطالبی برای لایه واسط سرچ کردم مثل طراحی و پیاده سازی وب سرویس با soap یا استفاده از کامپوننت indy ولی به جمع بندی خاصی در این رابطه نرسیدم که کدومشون بهتر و امنیتشون بالاتره و یا اینکه مثلا اگه بخوام یک لایه واسط روی سرور با indy طراحی کنم که بتونه با کلاینت های خارجی ارتباط برقرار کنه و سوکت پروگرامینگی که در کیوت باید برای ارتباط با این سرور طراحی کنم مشکل خاصی بوجود نمیاره؟
در ضمن تو نرم افزار اصلی که واسه کاربران داخلی طراحی کردم از firedac استفاده میکنم

Valadi
چهارشنبه 15 اردیبهشت 1395, 01:54 صبح
soap یک پروتکل xml و http هست و معماری آن سه لایه می باشد و کمتر مشکل داره و امنیتش بالاست اما سوکت نسبت soap مشکل تر و باید برای هرچیزی کد نویسی کنی مثل امنیتش و ...
درکل بنظرم از soap استفاده کنی بهتره حتی می تونی در اندروید استفاده کنی

Quantum3629
چهارشنبه 15 اردیبهشت 1395, 03:44 صبح
ممنون از پاسختون جناب ولدی
نمونه پروژه بانک اطلاعاتی که soap طراحی کرده باشین ندارین؟؟

Mask
چهارشنبه 15 اردیبهشت 1395, 04:13 صبح
در ادامه فرمایشات دوستان:
بنده برای این امور پیشنهادم دیتا اسنپ هست. تو نت هم کلی براش نمونه سورس هست. همین دیروز اقای عشایری فیلم نمونه و جالبی رو برای این مبحث قرار دادند.
http://chapmanworld.com/wp-content/uploads/2015/07/DatasnapTutorial_MSSQL.mp4?_=1
http://chapmanworld.com/2015/07/17/datasnap-firedac-and-mssql-tutorial/
اما بنده در پروژه هام برای کار با وب سرویس از HttpServer مجموعه ایندی استفاده میکنم. این روش رو به این خاطر دوست دارم و انتخاب کردم، که از ابتدا تا انتهای کار مدیریتش با خودمه و همه کاره رو خودم انجام میدم.
در حال حاظر هم برنامه اندروید و یه برنامه IOS داره با همین وب سرویس من براحتی در بانک اطلاعاتی کار میکنه.

Valadi
چهارشنبه 15 اردیبهشت 1395, 07:25 صبح
ممنون از پاسختون جناب ولدی
نمونه پروژه بانک اطلاعاتی که soap طراحی کرده باشین ندارین؟؟
در این زمینه کار زیاد انجام دادم

Mahmood_M
چهارشنبه 15 اردیبهشت 1395, 08:03 صبح
یک موضوعی خیلی تعیین کننده ست تو این مورد، اینه که شما با کاربرانتون به غیر از بحث بانک اطلاعاتی چه ارتباط دیگه ای دارید ؟
مثلا زمانی هست که شما یک سرور دارید، بانک اطلاعاتی داخلش قرار داره و کاربران صرفا باید به بانک وصل بشن و فقط ارتباطشون برقرار بشه
در این صورت می تونید از DataSnap استفاده کنید یا از Soap و XML و ... یا اینکه کلا اتصال Remote و مستقیم به بانک داشته باشید
اما زمانی هست که کاربران باید با هم تعامل داشته باشن که ربطی به بانک نداره، مثلا برای هم پیام بفرستند، یا مثلا دستوری رو در سرور اجرا کنند، فایلی ارسال کنند یا هر چیز دیگه ای که ارتباط چندانی با بانک نداره، اینجا شما باید یک نرم افزار میانی برای مدیریت کاربرها قرار بدید به عنوان سرور و ارتباط بین کاربرها رو برقرار کنه، در این صورت پیشنهاد بنده استفاده از TCP Socket ( یا UDP ) با Indy هستش
می تونید مثلا دستورات رشته ای تعریف کنید و با این دستورات بین کلاینت ها و سرور ارتباط داشته باشید، یوزرها وارد سیستم بشن، اطلاعاتشون ذخیره بشه، آنلاین بودن یا نبودنشون، وضعیت فعلیشون و خیلی چیزهای دیگه
برای برخی از این موارد می تونید از Web Service مثل Soap استفاده کنید اما چند نکته رو درنظر بگیرید :
سرعت TCP Socket از Soap بیشتره
برای ارتباط با Soap شما باید اطلاعات بیشتری ارسال کنید، یعنی حجم اطلاعاتی که ارسال می کنید خیلی بیشتر از چند کارکتر هست که توی TCP Socket ارسال میشه
حالا فرض کنید شما یک سیستم چت راه انداختید بین کاربران که از طریق اینترنت به سرور وصل میشن، مطمئن باشید بعد از چند روز کاربر ها از کندی سیستم و تموم شدن حجم اینترنتشون شکایت می کنن
اما امنیت در TCP باید توسط خودتون برنامه ریزی بشه، مثلا دستورات کد بشن و بعد ارسال بشن و ...
ارتباط از طریق TCP شدیدا ترافیک مصرفی رو کاهش میشه، مثلا من در سرور SP تعریف می کنم و فقط با ارسال نام SP ( و چند کاکتر دیگه ) به عنوان یک دستور، در سرور اون رو اجرا می کنم و فقط نتایج دوباره از طریق سرور ارسال میشه

می تونید یک سیستم ترکیبی ایجاد کنید، مثلا ورود و خروج و تعامل کاربران توسط TCP Socket انجام بشه و ارتباط با بانک و بروز رسانی اطلاعات و ... توسط DataSnap یا Soap

اینها رو جواب به همون سوال تعیین می کنه : " شما با کاربرانتون ( یا کاربران با همدیگه ) به غیر از بحث بانک اطلاعاتی چه ارتباط دیگه ای دارید ؟ "

Quantum3629
چهارشنبه 15 اردیبهشت 1395, 13:39 عصر
ممنون از راهنمایی هاتون
در این سیستم کاربران فقط از طریق اینترنت باید به پروفایلی که دارند تو دیتابیس وصل میشند و یکسری اطلاعاتشون رو ببینند . همچنین خرید اینترنتی دارند که تو وب سایت باید انجام بشه و بعد از اینکه خرید اینترنتی انجام شد کاربر بتونه تو پروفایلش مبلغ حسابش رو ببینه که شارژ شده.یعنی بعد از ارتباط موفق با وب سرویس بانک حسابش تو دیتابیس ما شارژ میشه یا باید بتونه مثلا گزارش های اونا رو ببینه.
سئوال دیگه ای که دارم اینه که من یه پروژه دیگه ای دارم که با کیوت در حال پیاده سازیشم و اون هم باید از طریق اینترنت به دیتابیس وصل بشه و اینکه اگر با ابزارهایی اون میان افزار رو روی دیتابیس طراحی کنم که کاربرها بخوان باهاش ارتباط برقرار کنند مشکل خاصی بوجود نمی آره؟؟

Mahmood_M
چهارشنبه 15 اردیبهشت 1395, 14:29 عصر
می تونید به همون روش ترکیبی عمل کنید
یوزرها با Indy و TCP Socket مدیریت بشن و برای مشاهده اطلاعاتشون که در DataBase وجود داره از DataSnap استفاده کنید
برخی موارد هم توی بانک هست ولی برای نمایش به کاربر نیازی به Select نیست و یا ارتباط به وسیله DataSnap یا Soap
مثلا فرض کنید کاربر می خواد موجودی حسابش که در بانک سرور ذخیره شده رو دریافت کنه، در این صورت شما به جای ارتباط با بانک می تونید با یک درخواست ساده با سوکت فقط مقدار رو دریافت کنید و به کاربر نمایش بدید، مثلا کلاینت دستور رو ارسال کنه، سرور به صورت Local اطلاعات رو Select می کنه و فقط مقدار مورد نیاز رو به کلاینت می فرسته، هم سرعت بیشتری خواهید داشت و هم حجم اطلاعات رد و بدل شده به شدت پایین میاد و در ترافیک صرفه جویی میشه
( این روش با Soap هم قابل پیاده سازیه اما سرعت کمتر و ترافیک مصرفی بیشتری داره )
موارد مثل این زیاد هست توی سیستهای کلاینت سرور مخصوصا وقتی سرور اینترنتی دارید و مسایلی مثل ترافیک مصرفی خیلی اهمیت داره برای کاربران
وقتی شروع کنید به پیاده سازی سیستم، موارد زیادی رو مشاهده می کنید که اصلا ارتباطی با بانک اطلاعاتی ندارند و صرفا برای مدیریت یوزرها باید راه هایی ایجاد که در این مورد بهترین روش TCP Socket هست به دلایلی که اشاره شد

سئوال دیگه ای که دارم اینه که من یه پروژه دیگه ای دارم که با کیوت در حال پیاده سازیشم و اون هم باید از طریق اینترنت به دیتابیس وصل بشه و اینکه اگر با ابزارهایی اون میان افزار رو روی دیتابیس طراحی کنم که کاربرها بخوان باهاش ارتباط برقرار کنند مشکل خاصی بوجود نمی آره؟؟
مشکلی وجود نداره ، می تونید به سرور متصل بشید و درخواست ها رو ارسال و دریافت کنید

استفاده از حالت ترکیبی باعث میشه با تست کردن موارد مختلف به بهترین بازدهی برسید
هم در ارتباط با جداول، DataSnap سرعت و امنیت خوبی داره و هم در موارد دیگه TCP Socket می تونه سرعت و کیفیت ارتباط کاربرها رو بالا ببره

Quantum3629
پنج شنبه 16 اردیبهشت 1395, 04:40 صبح
ممنون از پاسختون
پس با این چیزایی که شما گفتید کاربران من از طریق سایت اینترنتی وصل به یک نرم افزاری (یا میان افزار) باید بشن که روی سروره که این سرور من باید روی اینترنت با ip valid ست شده باشه و اون نرم افزاره به صورت local به دیتابیس سرور من که تو شبکه lan قرار داره اتصال داره و درخواست ها رو از اینترنت (سایت اینترنتیه) میگیره و داده ها رو از دیتابیس واکشی میکنه و برای سایت اینترنتیه ارسال میکنه. درسته؟ که این ارتباط بین میان افزاره و دیتابیس سرور من از طریق DataSnap یا سوکت پروگرامینگ باشه و ارتباط سایت و میان افزاره هم بهتره از طریق سوکت باشه!!
همچنین برای پروژه کیوت هم ارتباط به صورت سوکت پروگرامینگ با میان افزاره ( یا همون وب سرویسه ) برقرار کنیم؟؟؟!!!

Mahmood_M
پنج شنبه 16 اردیبهشت 1395, 05:22 صبح
سایت اینترنتی نه دوست عزیز !
مگه قصد طراحی نرم افزار تحت ویندوز برای کاربران ندارید ؟
یک نرم افزار کلاینت و یک نرم افزار در سرور که کلاینت ها بهش وصل میشن
در مورد سایت صحبتی نشد

Quantum3629
پنج شنبه 16 اردیبهشت 1395, 07:04 صبح
تو تاپیک اول گفتم دیگه!!
سولوشن کار را اینجوری میتونم براتون بگم که ما تو این سیستم ما یک دیتابیس اصلی داریم و سه مدل نرم افزار داریم که باید با این دیتابیس کار کنن
1- کابران داخل مجموعه (مثلا شرکت) که باید مدیریت کار رو به عهده داشته باشند مثل ثبت نام ، گزارش گیری و یا چیزای دیگه که من اون رو با دلفی XE7 دارم طراحی میکنم و یک قسمتش هم انجام شده و داره کار میکنه و بانک اطلاعاتی رو هم که دارم FireBird که ارتباط نرم افزار با اون رو با FireDac طراحیش کردم و مشکلی تو این مورد ندارم
2- یک سری مشترکینی دارم که تو سامانه یا سیستم و مجموعه ما هستن و اطلاعاتشون تو نرم افزار و بانک اطلاعاتی ثبت شده و باید از طریق سایت اینترنتی بتونن داخل پروفایلشون بشن و بعضی اطلاعات رو بتونن ببینن (مثل پروفایل دانشجویی دانشگاه که شما دارید) و یا بتونن گزارشایی رو بگیرند و همچنین سایت به یک درگاه پرداخت الکترونیکی بانک (مثل بانک ملت و یا سامان و یا هر بانک دیگه ای )وصل میشه که کاربرها با پرداخت اینترنتی بتونن مثلا حسابشون رو شارژ کنند و به محض انجام تراکنش موفق و تایید تراکنش اطلاعاتش حساب و شارژشون تو دیتابیس ما آپدیت باید بشه و مشتریان تو همون صفحه سایت اینترنتی پروفایلشون بتونند ببینند.
3- یک نرم افزار دیگه ای هم دارم که با کیوت طراحی میشه و روی یک دستگاه نصب میشه و مشتریان مجموعه ما از طریق این دستگاه های مخصوص ما که در جاهای خاص هستند باید بتونن خرید کنند و این دستگاه ها هم باید به دیتابیس وصل بشه و تراکنش ها رو انجام بده

Mahmood_M
پنج شنبه 16 اردیبهشت 1395, 09:16 صبح
توضیحاتی که داده شد درمورد نسخه کلاینت تحت ویندوز بود، یعنی همون نسخه ای که کاربران داخل مجموعه استفاده می کنند
الان شما احتمالا به صورت مستقیم به بانک وصل شدید، می تونید برای ثبت اطلاعات در بانک از دستورات رشته ای با سوکت استفاده کنید ( مخصوصا اگر کاربران از طریق اینترنت وصل میشن ( نه شبکه داخلی )
اما برای سایت بحثش جداست، می تونید مستقیم به بانک وصل بشید، حساسیت خاصی در این مورد وجود نداره
اون دستگاه ها هم می تونن مستقیم یا اگر بشه با DataSnap وصل بشن، چون از نحوه عمل دستگاه اطلاع نداریم

Quantum3629
پنج شنبه 16 اردیبهشت 1395, 11:59 صبح
ممنون آقای Mahmood_M (http://barnamenevis.org/member.php?16833-Mahmood_M)
بیشتر مشکل من برای ارتباط بین دستگاه ها و ارتباط اون با دیتابیس هستش که تو بستر اینترنته که نمیدونم بهترین راه حل استفاده از وب سروریس با استفاده از SOAP یا پیاده سازی یک رابط نرم افزاری با سوکت پروگرامینگ با استفاده از کامپوننت های Indy . هر چند نرم افزاری با هیچکدوم از اینا طراحی نکردم

hamid-nic
پنج شنبه 16 اردیبهشت 1395, 13:48 عصر
ممنون آقای Mahmood_M (http://barnamenevis.org/member.php?16833-Mahmood_M)
بیشتر مشکل من برای ارتباط بین دستگاه ها و ارتباط اون با دیتابیس هستش که تو بستر اینترنته که نمیدونم بهترین راه حل استفاده از وب سروریس با استفاده از SOAP یا پیاده سازی یک رابط نرم افزاری با سوکت پروگرامینگ با استفاده از کامپوننت های Indy . هر چند نرم افزاری با هیچکدوم از اینا طراحی نکردم

کار و تشکیلات سخت افزارها چیه ؟ امکان اتصال پورت شبکه به اون ها هست ؟

Quantum3629
پنج شنبه 16 اردیبهشت 1395, 14:19 عصر
دستگاه از طریق اتصال طریق wifi و اینترنت باید نصب بشه

Quantum3629
شنبه 18 اردیبهشت 1395, 08:13 صبح
سلام دوستان
ارتباطم برقرار شد:لبخندساده::لبخندساده:
یک نرم افزار سروری با Indy طراحی کردم که ارتباط داره با دیتابیس سرور و از سمت دیگه هم منتظر کلاینت ها میمونه تا درخواست هاشون رو با QT ارسال کنند و همه چیز Ok شد.
ولی به یک مشکل دیگه ای برخورد کردم که وقتی نرم افزار رو سرور نصب میشه (سرور اینترنت داره و یک IP Valid) ست شده روش و باز هم ارتباط برقرار میشه ولی سرور وقتی میخواد پاسخی رو برای کلاینت برگردونه، چون کلاینت ها IPValid ندارن تو اینترنت پکت ها ارسال میشه واسه NaT شبکه که آی پی ISP هست و دیتایی به کلاینت ها ارسال نمیشه و نمیدونم دیگه چکار باید بکنم؟؟
:گیج::گیج::گیج: