PDA

View Full Version : سوال: اشتراک گذاری لیست از داده ها بین چند پروژه



arman_Delta2002
پنج شنبه 04 بهمن 1397, 10:31 صبح
سلام.
من یک لیست از webSocket دارم که کلاس داخلی فریم ورک است و نمیشه سریالایزش کرد
حالا میخوام از یک لایه دیگه به داده های موجود در این لیست دسترسی داشته باشم.
راهی هست که بشه کلاس داخلی فرم ورک رو سریالایز کرد ؟
یا میشه از یک پروژه دیگه به ایتم های اون لیست دسترسی داشت؟(بیخودی نگین استاتیکش کن چون وقتی ادد رفرنس میشه به پروژه دیگه لیست ها متفاوت هست تو یک پروژه لیست داده داره ولی تو پروژه دیگه لیست خالی است):متفکر: :گیج:

Mahmoud.Afrad
پنج شنبه 04 بهمن 1397, 14:59 عصر
یا به صورت پراپرتی و یا متدهایی برای دسترسی به لیست بایست بنویسید که قابل دسترس از خارج کلاس باشد.

arman_Delta2002
دوشنبه 08 بهمن 1397, 19:12 عصر
یا به صورت پراپرتی و یا متدهایی برای دسترسی به لیست بایست بنویسید که قابل دسترس از خارج کلاس باشد.


ایا باز هم پروپرتی به صورت استاتیک باشه؟ بیشتر دوست داشت با این سوال ازت تشکر کنم. که پاسخ دادی تو استک اورفلو پرسیدم کسی جواب نداد!
https://stackoverflow.com/questions/54387877/how-to-inject-serializable-attribute-to-system-net-websockets-websocket

Mahmoud.Afrad
دوشنبه 08 بهمن 1397, 20:49 عصر
ایا باز هم پروپرتی به صورت استاتیک باشه؟ بیشتر دوست داشت با این سوال ازت تشکر کنم. که پاسخ دادی تو استک اورفلو پرسیدم کسی جواب نداد!
https://stackoverflow.com/questions/54387877/how-to-inject-serializable-attribute-to-system-net-websockets-websocket

سوالتون توی استک کامل هست ولی اینجا ناقص. یکبار به فارسی کامل توضیح بدید.

arman_Delta2002
سه شنبه 09 بهمن 1397, 07:38 صبح
من مثال اماده کردم
یک کلاس دارم (Class1) و از اون یک لیست دست کردم در پروژه LL و در 2 پروژه مجزا یکی ویندوز فرم و یکی wpf . میخوام مثلا تو ویندوز فرم به لیست اضافه کنم ولی تو پروژه wpf جواب بگیرم یا برعکس
دقت داشته باشین نمیشه Class1 رو سریالایز کرد!(چون وب سوکت سریالایز نمیشه!)
149699

تو اسک اور فلو هم این رو گفتم:
چون من برنامه نویسی لایه ای انجام میدم نیاز دارم لیست وب سوکت ها بین پروژه هام به اشتراک گذاشته بشه
هر کلاینت(android) وصل میشه به پروژه Asp.netCore و یک وب سوکت به لیستی در لاجیک لایر اضافه میشه.
من میخوام که کاربر ها رو از طریق پروژه WPF مدیریت کنم مثلا به فلان کاربر پیامی بفرستم یا به یک دسته خواص
ولی چون لاجیک لایر من add Refrence میشه به پروژه wpf در واقع یک لایه لاجک مجزا از اونی که به asp.netcore متصله سازته میشه و همیشه لیست موجود(لاجیک) در wpf خالی هست با این که لیست موجود (لاجیک)در asp.netCore داده دارد.
خواستم از طریق WCF سرویس این مشکل رو حل کنم ولی باز چون کلاس وب سوکت سریالایزبل نیست موقه برگشت داده سرویس خطا میده و میگه نمیتونه وب سوکت رو متقل کنه !

و چون وب سوکت سریالایز نیست نمیشه به صورت ارایه ای از بایت در بیارم و در پایگاه داده یا فایل ذخیره و بازیابی کنم !
خواستم اتریبیوت سریالایز به وب سوکت اضافه کنم جواب نداد !
سورس یک وب سوکت رو گیر اوردم روی تمام کلاس اش اتریبیوت سریالایز گذاشتم ولی چون باز کلاس های دیگه ای از سیستم مثل IPAddress و ... سریالایزبل نبودن باز خطا میداد و نمیشد !
149700
تو تصویر بالا لیست سوکت ها رو لایه لاجیک داده بقیه پروژه ها باید از اون بخونن

یه سوالی که واسم پیش اومده اینه که مگه تمام داده های کامپیوتر 0 و 1 نیست؟ پس چرا یک کلاس مزخرف رو نمیشه به 0 و 1 در سی شارپ تبدیل کرد و باز بازیابیش کرد ؟!

چه راه کاری میدونین که میشه این مشکل رو حل کرد ؟
احتمال زیاد من کلا مشکل رو بد حل کردم ! و یه راه کار بهتر وجود داره.

hamid_hr
سه شنبه 09 بهمن 1397, 10:58 صبح
خب websocket یک سری خصوصیات داره که ست میشه
اون خصوصیات رو توی یک کلاس ذخیره و سریالیزه کنید و ادامه کار
مثلا IP, Port, ....

arman_Delta2002
سه شنبه 09 بهمن 1397, 14:05 عصر
خب websocket یک سری خصوصیات داره که ست میشه
اون خصوصیات رو توی یک کلاس ذخیره و سریالیزه کنید و ادامه کار
مثلا IP, Port, ....
یعنی باید برای کلاینت ها سرور دریافت بنویسم؟

Mahmoud.Afrad
سه شنبه 09 بهمن 1397, 14:41 عصر
در این حالت بهترین کار این هست که یک پروژه class library ایجاد کنید (مثلا به نام common ). توی این پروژه اینترفیس و کلاسی ایجاد کنید که بتونه مشخصات کلاینتها رو نگهداری کنه و البته بشه سریالایزش کرد. هر چیزی که سرور و برنامه در اون مشترک هستند را میتونید به این پروژه اضافه کنید.
پروژه بالا رو در هر دو پروژه asp , wpf به رفرنس اضافه کنید. برای ارسال لیست کلاینتها از لیستی از این کلاس استفاده کنید.

hamid_hr
سه شنبه 09 بهمن 1397, 14:44 عصر
یعنی باید برای کلاینت ها سرور دریافت بنویسم؟
ببینین شما میگین سریالیزه نمیشه
بیاین خصوصیاتشو توی یک کلاس که خودتون درستش کردن بریزین و اونو سیریالیزه کنید و بفرستید برای اون نرم افزار دیگه خودتون و اونجا دوباره شی وب سوکت را ایجاد و خصوصیاتی رو که دریافت کرده اید رو ست کنید و ادامه کار

arman_Delta2002
چهارشنبه 10 بهمن 1397, 07:22 صبح
ببینین شما میگین سریالیزه نمیشه
بیاین خصوصیاتشو توی یک کلاس که خودتون درستش کردن بریزین و اونو سیریالیزه کنید و بفرستید برای اون نرم افزار دیگه خودتون و اونجا دوباره شی وب سوکت را ایجاد و خصوصیاتی رو که دریافت کرده اید رو ست کنید و ادامه کار

میشه گفت خوصویت خواصی نداره مثل ادرس ایپی کلاینت یا پورت اتصال کلاینت
از طرف کاربر یک کلاس {System.Net.WebSockets.ManagedWebSocket} دریافت میشه که فقط اطلاعات تایم اوت و utf و ... رو داره !

arman_Delta2002
چهارشنبه 10 بهمن 1397, 07:27 صبح
در این حالت بهترین کار این هست که یک پروژه class library ایجاد کنید (مثلا به نام common ). توی این پروژه اینترفیس و کلاسی ایجاد کنید که بتونه مشخصات کلاینتها رو نگهداری کنه و البته بشه سریالایزش کرد. هر چیزی که سرور و برنامه در اون مشترک هستند را میتونید به این پروژه اضافه کنید.
پروژه بالا رو در هر دو پروژه asp , wpf به رفرنس اضافه کنید. برای ارسال لیست کلاینتها از لیستی از این کلاس استفاده کنید.

خیلی دوست داشتم این کار رو بکنم ولی هیچی نداره که بشه ازش استفاده کرد یه نگاه به کلاس {System.Net.WebSockets.ManagedWebSocket} بندازین متوجه میشن !

arman_Delta2002
پنج شنبه 11 بهمن 1397, 07:53 صبح
آیا میشه یک سرور سوکت معمولی داشت و با وب سوکت کلاینت بهش وصل شد؟
آیا میشه به این روش برنامه چت به صورت وب سایتی هم نوشت؟

arman_Delta2002
شنبه 13 بهمن 1397, 21:33 عصر
هیچ راهی واسه نگه داری و ارسال مجدد داده ها وجود نداره!
من آیپی و پورت کلاینت رو دارم ولی نمیشه یک کانکشن کلاینت ساخت واسه ارسال پیام چون پروپرتی هاش نوع Get هست و Set نداره .
وب سوکت های مختلفی رو تست کردم
هیچ کدوم سریالایز نمیشن!
و هیچکدوم نمیشه داده جدید ست کرد تا به کلاینت پاسخ برگردونه !
مگر این که هر کلاینت یک سرور هم باشه ! واقاً مسخره است!

arman_Delta2002
یک شنبه 14 بهمن 1397, 08:20 صبح
تنها راهی که به ذهنم میرسه اینه که یه لاجیک تو سرویس وب سوکت درست کنم و یک اکانت با دسترسی مدیر بهش کانکت کنم هر سری خواستم یک سری دستورات رو لاجیک بفرسته از طریق این اکانت و جواب رو دریافت کنه واقا مسخره است !
سرعت پایین میاد
کد نویسی اشغال

Mahmoud.Afrad
دوشنبه 15 بهمن 1397, 09:58 صبح
سرور را نوشتید؟ تحت چه نوع پروژه ای ؟

مدیر(wpf) چه کارهایی میتونه انجام بده؟

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

arman_Delta2002
سه شنبه 16 بهمن 1397, 13:02 عصر
سرور را نوشتید؟ تحت چه نوع پروژه ای ؟

مدیر(wpf) چه کارهایی میتونه انجام بده؟

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

سرور را نوشتید؟ بله.
تحت چه نوع پروژه ای ؟WCF service(جهت انجام کارهای اصلی پروژه درج و ویرایش ثبت) و asp.netCore(سوکت جهت ارسال نوتیفیکیشن به موبایل کاربر)
مدیر(wpf) چه کارهایی میتونه انجام بده؟ تنظیمات کلی رو ویرایش میکنه (مانند حد نساب امتیاز کاربر و ...) و ارسال نوتیفیکیشن به یک کاربر خواص یا گروهی از کاربران که در حال حاظر آنلاین هستن. و لیست کاربران انلاین رو نشون میده
مدیریت (WPF) کاری با کانفیگ های سرور نداره و فقط با داده های پایگاه داده و کلاینت های متصل کار داره و یک برنامه تحت ویندوز هست که فقط روی یک کامپیوتر خواص نصب میشه .

Mahmoud.Afrad
سه شنبه 16 بهمن 1397, 20:00 عصر
سوالتون مربوط به asp.net هست. تاپیک رو منتقل میکنم.

قطعا باید کاربران احراز هویت کنید. مدیر هم یک کاربر با سطح دسترسی خاص هست.

اگر از فریمورک SiignalR استفاده کنید نیاز به سر و کله زدن مستقیم با وبسوکت ندارید. مدیریت کاربران و ... راحت انجام میشه. یک نگاهی به مستنداتش بندازید. برای کانکت شدن wpf از این کلاینت (https://docs.microsoft.com/en-us/aspnet/core/signalr/dotnet-client) و برای اندروید از این پکیج (https://docs.microsoft.com/en-us/aspnet/core/signalr/java-client)میتونید استفاده کنید.

برای ثبت و ویرایش و ... هم میتوننید در همون پروژه asp.net core کد بنویسید. به مرور کدهای wcf را منتقل کنید به پروژه asp.net core و پروژه wcf را حذف کنید.