PDA

View Full Version : سوال: یک مشکل در ارتباط به دیتابیس SQL SERVER 2005



mehrdad201
جمعه 15 آبان 1388, 16:34 عصر
با عرض سلام خدمت همه دوستان عزیز

من یه برنامه نوشتم به زبان سی شارپ که با یه دیتابیس روی اینترنت ارتباط برقرار میکنه و یه سری رکوردها رو حذف و اضافه و ویرایش میکنه.

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

میخواستم از دوستان با تجربه بپرسم که برای ارتباط یه برنامه ویندوزی با دیتابیس اس کیو ال روی اینترنت ایا راه جایگزینی هست که این محدودیت ها رو نداشته باشه ؟؟

خواهش میکنم راهنماییم کنید.

saied_genius
جمعه 15 آبان 1388, 16:39 عصر
از وب سرويس استفاده کن.

يک جستجو کن اگر نتيجه نگرفتي در خدمتم. (ولي خدا وکيلي جستجو کن!)

موفق باشيد.

mehrdad201
جمعه 15 آبان 1388, 17:56 عصر
اتفاقا قبل از اینکه شما پاسخ بدی من به گزینه وب سرویس رسیده بودم.

در تاپیک ASP.NET هم پست زدم اما جناب راد پاکش کرد(به دلیل عنوان نامناسب)

سوالم در مورد وب سرویس اینه که خروجیش هر نوع داده ای میتونه باشه ؟ البته تست کردم دیدم دیتا تیبل رو روی لوکال هاست ساپورت میکنه.

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

ایا راهی برای جلوگیری از این خطاها هست ؟

mehrdad201
جمعه 15 آبان 1388, 18:50 عصر
متاسفانه به نظر میرسه که مستقیما نمیتونه نوع داده ای دیتا تیبل رو منتقل کنه

یه همچین اروری میده


Server was unable to process request. ---> There was an error generating the XML document. ---> Cannot serialize the DataTable. DataTable name is not set.



من خودم هم سرچ میکنم اما اگه دوستان میدونن چاره این مشکل چیه ممنون میشم راهنماییم کنند.

esmartiz_red
جمعه 15 آبان 1388, 19:27 عصر
بله دوست عزیز شما می تونی با استفاده از وب سرویس نوع داده رو به صورت dataset و datatable هم دریافت کنی و به نظر من راه خوبیه

saied_genius
شنبه 16 آبان 1388, 11:01 صبح
متاسفانه به نظر میرسه که مستقیما نمیتونه نوع داده ای دیتا تیبل رو منتقل کنه

یه همچین اروری میده


Server was unable to process request. ---> There was an error generating the XML document. ---> Cannot serialize the DataTable. DataTable name is not set.

من خودم هم سرچ میکنم اما اگه دوستان میدونن چاره این مشکل چیه ممنون میشم راهنماییم کنند.

بايد در هنگام ساختن datatabe نام به آن بدهيد:


= new Datatable("Tablename");

اما در مورد حجم اطلاعات، من نمي دونم دقيقاً منظورتان از حجم چقدره ، من الان مدتي است با وب سرويس کار مي کنم و همه جور خروجي از آن مي گيرم (dataset, datatable, datarow , ...) ولي کلاً از نظر استاندارد کار درستي نيست برگرداندن اطلاعات به صورت datatable يا dataset يا هر نوع داده net. ، به نظرم بهتره ، مثلاً داده را رمز کنيد و به صورت string برگردانيد و هنگام خواندن دو باره رمز گشايي کنيد.

سوالي بود در خدمتم.


موفق باشيد.

mehrdad201
شنبه 16 آبان 1388, 12:53 عصر
البته صحبت شما در مورد رمزنگاری دقیقا درسته. من از نوع دیتا ست استفاده میکنم برای خروجی.


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

میخوام وب سرویس طوری باشه که هر کسی نتونه ازش استفاده کنه. یک برنامه ویندوزی فقط مجاز به استفاده از وب سرویس هست.

در پایان میخواستم ببینم ایا از نوع داده ای بایت یا استریم هم میشه به عنوان پارامتر برای توابع وب سرویس استفاده کرد؟ مثلا فرض کنید میخوام بایتهای تشکیل دهنده یک تصویر رو به تابع وب سرویس ارسال کنم.

ممنونم از راهنماییتون

saied_genius
شنبه 16 آبان 1388, 13:01 عصر
حساسيت به IP به نظر من کار جالبي نيست، استفاده از username و password بهتر است.

حتي نياز به username هم نيست (البته بستگي به نوع سرويس دهي تان دارد).

من خودم فقط از password استفاده مي کنم.

در مورد خروجي هم ، چون ما در اصل از web method استفاده مي کنم ، نه از خود سرويس ، مشکلي در خروجي نداريم و استفاده از stream فکر مي کنم بد نباشد.

سوالي بود در خدمتم.

موفق باشيد.

mehrdad201
شنبه 16 آبان 1388, 14:49 عصر
ممنونم
در مورد شیوه اعتبار سنجیتون که فقط از پسورد استفاده میکنید برام توضیح میدید!؟

اگه میشه با یه مثال کوچولو :)

saied_genius
شنبه 16 آبان 1388, 14:56 عصر
ببينيند ، من براي وب سرويسم فقط از password استفاده مي کنم ، چون کسي که اجازه استفاده از وب سرويس را دارد اجازه استفاده از تمامي web method ها دارد.(البته بستگي به شرايط دارد ، در اين مورد به اين صورت است.)

يک string به عنوان password ميگيرد و ژک مي کند در صورت اشتباه بودن يک object خالي بر مي گرداند.

مثلاً web method من خروجي dataset دارد ، پس از چک کردن کلمه عبور اجازه استفاده از web method به او داده مي شود ، در غير اينصورت يک dataset خالي را بر وي گرداند . (مثلاًً
return new dataset();)

البته اشتباه نشود ، اين فقط پارامتر چک کردن براي استفاده از web method است و براي query گرفتن و غيره ، پرامترهاي مورد نظر بايد وارد شود.

سوالي بود در خدمتم.

موفق باشيد.

esmartiz_red
شنبه 16 آبان 1388, 15:08 عصر
می تونی از اعتبار سنجی iis استفاده کنی تو گوگل سرچ کن مطلب زیاد هست

mehrdad201
شنبه 16 آبان 1388, 15:53 عصر
اینطور که متوجه شدم شما در هر بار فرخوانی وب سرویس یا متدهاش پسورد رو دریافت و اعتبار سنجی میکنید ؟ درسته ؟


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

========
یک سوال دیگه.. یا تابع که ویژگی وب متد رو داره با یه تابع که این ویژگی رو نداره ، هر دو در داخل یک وب سرویس چه تفاوتهایی با هم دارند ؟

ممنونم

mehrdad201
شنبه 16 آبان 1388, 15:55 عصر
می تونی از اعتبار سنجی iis استفاده کنی تو گوگل سرچ کن مطلب زیاد هست


ممنون

حتما در موردش سرچ میکنم. فقط به من بگید چون کلاینت من ویندوز فورم هست ایا در این سطح قابل استفاده هست ؟

saied_genius
شنبه 16 آبان 1388, 16:22 عصر
اینطور که متوجه شدم شما در هر بار فرخوانی وب سرویس یا متدهاش پسورد رو دریافت و اعتبار سنجی میکنید ؟ درسته ؟


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

========
یک سوال دیگه.. یا تابع که ویژگی وب متد رو داره با یه تابع که این ویژگی رو نداره ، هر دو در داخل یک وب سرویس چه تفاوتهایی با هم دارند ؟

ممنونم

مي شود آن طور عمل کرد ، ولي به نظر من چک کردن روي هر web method بهتره تا روي کل وب سرويس

موفق باشيد.

mn_zandy63
شنبه 16 آبان 1388, 22:41 عصر
یک سوال دیگه.. یا تابع که ویژگی وب متد رو داره با یه تابع که این ویژگی رو نداره ، هر دو در داخل یک وب سرویس چه تفاوتهایی با هم دارند ؟

ممنونم

تابعی که ویژگی webmethod رو نداره از طریق کلاینت قابل دسترس نیست.
یعنی هر تابعی که بخوای کلاینتهات بهش دسترسی داشته باشن، یا به عبارتی وب سرویست publish کنه، باید ویژگی webmethod رو داشته باشه.
موفق باشی

esmartiz_red
شنبه 16 آبان 1388, 23:10 عصر
به طور کلی دوست عزیز شما با یه کم مطالعه و جستجو متوجه می شید که بزرگترین ضعف وب سرویس ها همین امنیت اونهاست چون امن کردن اونا کار سختیه
شاید برای کسی که از علوم هک زیاد آگاهی نداشته باشه با سخت باشه که یه وب سرویس که با روش های فوق امن شده نفوذ کنه اما یه نفر حرفه ای تر به راحتی می تونه من هم قبلا همین مشگل رو داشتم و خیلی راجعبه اون تحقیق کردم
روش دوستان روش خوبیه اما روش کاملی نیست و خود ماکروسافت هم استفاده از اعتبارسنجی iis رو پیشنهاد کرده
در مورد ویندوز فرم هم هیچ گونه مشگلی نداره
من خودم از روی یه مقاله عمل کردم اگر پیداش کردم می زارم اینجا تا شما هم استفاه کنی
اما با یه جستجو در گوگل برای امنیت در وب سرویس مقالات و روش های زیادی پیدا می کنی
موفق باشید:چشمک:

mehrdad201
یک شنبه 17 آبان 1388, 00:19 صبح
ممنونم دوست عزیز

حتما این کار رو خواهم کرد. منتها خواستم اول از دوستان با تجربه سوال کنم تا الکی به بیراهه نرم.

در مورد اعتبار سنجی IIS، این قضیه ربطی به هاستینگ شیر یا هاستینگ وی پی اس (یا اختصاصی) که نداره ؟؟!؟!؟

کلا در هر هاست دات نتی ما امکان این نوع اعتبار سنجی رو داریم ؟!

ببخشید چون اطلاعاتم در این زمینه بسیار پایین هست سوالاتم سطحشون خیلی اماتوریه

esmartiz_red
یک شنبه 17 آبان 1388, 00:50 صبح
از iis باید این کارو انجام بدی حالا اگر خود شما اجازه داشتین که می تونید اگر نه از ادمین می خواین این کارو برای شما انجام بده
من یه نگاه می ندازم در این مورد اطلاع می دم

esmartiz_red
یک شنبه 17 آبان 1388, 00:56 صبح
دوست عزیز لینک های زیر رو ببین روش های خوبی پیشنهاد کردن
در مورد iis هم براتون مقاله می زارم
http://www.codeproject.com/KB/cpp/SecurityTokens.aspx
http://www.programminglearn.com/392/authentication-and-security-mechanisms-in-aspnet-web-applications

mehrdad201
پنج شنبه 21 آبان 1388, 11:42 صبح
esmartiz_red (http://barnamenevis.org/forum/member.php?u=49708) عزیز

اون مقاله ای که میخواستید بذارید رو پیدا کردید ؟