برای استفاده از این مزایا باید سرویس Microsoft SharePoint Foundation User Code Service فعال باشد .
استفاده از Sandbox Solution نیازمند 3 چیز است :
1 - User Code Service یا SPUCHostService.exe : این سرویس وظیفه مدیریت کدهای Sandbox روی سرور و میزبانی درخواستهای Sandbox به سرور را دارد.
2 - Sandbox Worker Process یا SPUCWorkerProcess.exe : این سرویس برای مدیریت پردازش کدهای اجرایی Sandbox استفاده میشود خصوصا در مورارد امنیتی (فرض کنید درون کد حلقه بی نهایتی وجود داشته باشد. اگر بار اجرایی آن بر روی w3wp.exe باشد ، باعث متوقف شدن کارکرد تمام پروسه میشود. بار این مسئولیت بر دوش SPUCWorkerProcess.exe میباشد )
3 - Sandbox Worker Process Proxy یا SPUCWorkerProcessProxy.exe : این سرویس برای اجرای کدهای Client Object Model در sandbox استفاده میشود.
می توانید ارتباط پردازههای فوق را در نمودار زیر مشاهد کنید :
با توجه به این توضیحات به دلیل استفاده از Sandbox میپردازیم :
1 - sandbox Solutionها امن هستند.
2 - sandbox Solutionها میتوانند مانیتور شوند.
3 - sandbox Solutionها حداقل تاثیر را روی هم دارند.
4 - sandbox Solutionها عملیات I/O کمی روی فایلهای سیستمی دارند
5 - sandbox Solutionها امکان debugging دارند
6 - sandbox Solutionها امکان توسعه ، انتشار و به روز رسانی دارند
7 - sandbox Solutionها امکان تعریف Policy برای CAS ایجاد میکند (Code Access Security برای قابل اطمینان ساخت کد ها)
8 - sandbox Solutionها امکان اعتبار سنجی به کمک کلاس SPSolutionValidator را میدهد.
9 - sandbox Solutionها امکان تعریف SLA های مختلف را میدهد.
چه قسمت هایی توسط Sandbox Solution پشتیبانی میشود :
هنگام ایجاد یک پروژه از نوع sandbox در ویژوال استودیو ، یکسری امکانات از برنامه نویس سلب میشود و محدودیتهای برای استفاده از کلاسها برای وی اعمال میشود .موارد زیر ، از جمله مواردی هستند که توسعه دهنده میتواند از آنها در sandbox استفاده کند :
Add-SPSolution c:\code\SharePointProject2\bin\debug\SharePointProject2.wsp
stsadm –o addsolution –name SharePointProject2.wsp
این روزها زیرنویسهای فارسی فیلمهای روز دنیا را راحت میشود در اینترنت یافت، اما مشکلات زیادی هم به همراه این نوع فایلها وجود دارند:
- گاها با فیلم دریافت شده هماهنگ نیستند.
- عموما با فرمت windows-1256 تهیه میشوند که برای استفاده از آنها در سیستمهای مختلف بهتر است به UTF8 تبدیل شوند.
- اکثر برنامههای موجود برای کار با زیر نویسها و ویرایش آنها، درکی از یونیکد ندارند.
- عموما نیاز است جهت استفاده از آنها در یک جمع، تعدادی از سطور آنها را با حفظ شماره بندی فایل، حذف کرد!
و ...
به همین جهت نیاز به یک برنامهی جمع و جور جهت کار با زیر نویسها داشتم که نتیجهی آن تهیهی برنامهی زیر شد:
الف) تغییر encoding فایل دریافتی به UTF-8
هنگام گشودن اکثر فایلهای زیر نویس فارسی با تصویر زیر روبرو خواهید شد:
برای تبدیل آن به فرمت یونیکد تنها کافی است بر روی دکمهی To UTF-8 کلیک کنید. در این حالت نتیجه به صورت زیر خواهد بود:
ب) هماهنگ سازی زیر نویس با فیلم دریافتی
ممکن است دیالوگهای زیر نویس دریافتی شما به اندازهی مدت زمان خاصی، از دیالوگهای فیلم در حال پخش، عقبتر یا جلوتر باشند. در این حالت ابتدا باید این مدت زمان را با گوش فرا دادن به ابتدای فیلم و مقایسهی آن با اولین شمارهی زیرنویس، پیدا کنید. مثلا پس از بررسی متوجه شدهاید که به کلیه زمانهای زیرنویس جاری باید 7 ثانیه اضافه گردد. اینکار را مطابق تصویر ذیل میتوان انجام داد:
ج) یکی کردن زمانهای دو زیر نویس با هم
گاهی از اوقات مشکلات زمانی یک زیرنویس وخیمتر از مورد ب است. به این معنا که شمارههای مختلف آن، زمانهای کاملا بیربطی داشته و به صورت هماهنگ، قابل افزایش یا کاهش نیستند. در این حالت ابتدا زیر نویس مورد نظر را در برنامه باز کنید. سپس یک زیر نویس خوب انگلیسی هماهنگ با فیلم را نیز پیدا کنید و از طریق دکمهی Merge times به برنامه معرفی نمائید. در این حالت به صورت خودکار زمانهای صحیح از زیر نویس دوم به زیر نویس اول منتقل خواهند شد.
د) یکی کردن دو فایل زیر نویس با هم
ممکن است فیلم دریافتی تنها از یک فایل تشکیل شده باشد، اما شما فقط توانستهاید زیر نویس مرتبط با نگارش دو سی دی این فیلم را پیدا کنید. بنابراین نیاز است تا این دو فایل زیر نویس یکی شوند با این شرط که زمانهای سی دی دوم از انتهای سی دی اول در فایل نهایی یکی شدهی تولیدی شروع گردد.
برای این منظور ابتدا فایل زیرنویس سی دی اول را در برنامه باز کرده و سپس به گزینهی join files در برنامه مراجعه کنید. در اینجا ابتدا مسیر فایل زیرنویس سی دی 2 را مشخص نمائید. برنامه سعی خواهد کرد تا زمان آغاز قسمت دوم را بر اساس آخرین زمان سی دی اول و اولین زمان سی دی دوم حدس بزند و نمایش دهد. یا میتوانید این مقدار پیش فرض را پذیرفته و بر روی دکمهی join کلیک نمائید و یا امکان تغییر دستی آن هم میسر است.
ه) حذف و یا ویرایش ردیفها
به دلایل نامشخصی اشخاصی که سعی در ترجمهی زیرنویسها میکنند عموما علاقمندند که به متن اصلی وفادار بمانند. به همین دلیل نیاز به جرح و تعدیل زیرنویسهای تهیه شده برای نمایش در یک جمع خانوادگی وجود دارد. گزینهی جستجوی موجود در بالای ردیفهای زیرنویس باز شده در برنامه، امکان نمایش ردیفهایی را که حاوی متن وارد شده است، به صورت خودکار دارد.
در این حالت اگر نیاز است سطری حذف شود، آنرا انتخاب نموده و بر روی دکمهی Delete row کلیک نمائید. در این حالت علاوه بر حذف ردیف، کلیه شمارههای موجود در زیر نویس نیز به صورت خودکار مجددا تولید و مرتب خواهند شد. (کلیک راست بر روی هر ردیف نیز این گزینه را نمایش میدهد)
یا اگر مشغول به ویرایش متنی شدید، پس از ویرایش، کلیک کردن بر روی دکمهی Save را فراموش نکنید (در حالت حذف نیازی به اینکار نیست).
ز) پیدا کردن زیرنویس یک فایل بر اساس امضای دیجیتال آن
سایت opensubtitles.org یک API را جهت پیدا کردن زیرنویسی مطابق با هش یک فایل ویدیویی ارائه داده است، که در برنامهی جاری، کلاینتی برای آن تهیه شده است:
فقط کافی است فایل ویدیویی خود را در این قسمت انتخاب نمائید. برنامه هش فایل را محاسبه کرده و سپس با کمک سرویس XML-RPC سایت opensubtitles.org سعی در یافتن زیرنویس هماهنگ با آن خواهد کرد. در اینجا دیگر مهم نیست نام فایل انتخابی چیست؛ امضای دیجیتال آن مهم است. برای دریافت موارد مورد نظر، ابتدا آنها را تیک زده و سپس بر روی دکمهی دریافت کلیک کنید. کلیک راست بر روی ردیف مورد نظر نیز این امکان دریافت را لحاظ کرده است.
همچنین قسمتی هم برای آپلود زیرنویس به این سایت پیش بینی شده است (لطفا مصرف کنندهی صرف یا به قولی لیچر نباشید!)
در اینجا انتخاب فایل ویدیویی، فایل زیرنویس هماهنگ با آن و همچنین زبان زیر نویس الزامی است. از فایل ویدیویی جهت محاسبهی هش آن برای یافتن سادهتر زیرنویسها در دفعات آتی استفاده میگردد.
پیشنیاز استفاده از این برنامه، نصب دات نت فریم ورک 4 است که اگر از ویندوز 7 استفاده میکنید، جزو به روز رسانیهای اختیاری آن است و در حالت کلی نسخهی کامل 32 بیتی و 64 بیتی آن از این آدرس قابل دریافت است.
سه نکته مهم حین توزیع برنامههای ASP.NET 4.0 بر روی IIS 6.0 نسبت به سایر نگارشهای قبلی وجود دارند که باید در نظر گرفته شوند:
الف) پس از اتقای برنامه از نگارشهای قبلی به دات نت 4 (با فرض اینکه دات نت 4 بر روی سرور نصب است)، پیغام 404 یا به عبارتی فایل مورد نظر بر روی سرور یافت نشد را دریافت میکنید (با تمام فایلهای موجود):
در کنسول IIS ، ذیل قسمت Web Services Extensions ، باید دو مورد از حالت prohibited خارج شوند:
- All unknown ISAPI extensions
- ASP.NET 4.0
ب) پس از اجرای برنامه پیغام غیر معتبر بودن تگهای جدید فایل Web.Config را ملاحظه میکنید:
- در برگهی خواص سایت در IIS 6.0 ، اکنون امکان انتخاب ASP.NET 4.0 هم میسر است که حتما باید این مورد انتخاب گردد (تا دات نت سه و نیم این نام تنها ASP.NET 2.0 بود). در غیر اینصورت تگهای جدید فایل Web.Config شناخته نخواهند شد.
ج) بلافاصله پس از اجرای برنامه، پیغام Server Application Unavailable قابل مشاهده است:
نکتهی مهم دیگری که به همراه برنامههای دات نت 4 باید به آن توجه داشت، ضرورت اجرای آنها در یک پروسه جدید است. پروسه جدید در IIS 6.0 به معنای یک Application pool جدید است. به عبارتی اگر هم اکنون بر روی IIS 6.0 شما برای مثال 2 برنامهی دات نت سه و دات نت 4 قصد استفاده از یک Application pool را داشته باشند، پیغام Server Application Unavailable ظاهر خواهد شد، زیرا نمیتوان این دو نگارش را تحت یک پروسه اجرا کرد. برای حل این مشکل باید یک Application pool جدید و اختصاصی را جهت برنامهی ASP.Net 4.0 خود تعریف و انتساب دهید.
هزینه استفاده از دات نت فریم ورک چقدر است؟
هزینه استفاده از دات نت فریم ورک چقدر است؟
خواندنیهای 12 خرداد
امنیت
توسعه وب
ویندوز 7
Silverlight و WPF
PHP
دات نت فریم ورک
سی شارپ
دلفی
شیرپوینت
متفرقه
دستور update-package به صورت خودکار تمام وابستگیهای یک پروژه را به روز میکند و این به روز رسانی شامل تبدیل یک پروژهی MVC 4 به 5 نیز میشود. اما ... اگر نخواهیم اتفاق بیفتد چطور؟ برای رفع این مشکل دستور update-package -safe را صادر کنید. سوئیچ safe سبب میشود تا اگر نگارش 4 بستهای مورد استفادهاست، دیگر به نگارش 5 آن مراجعه نکند.
ارتباطات بلادرنگ و SignalR
در اینجا کلمه بلادرنگ به معنای ارسال اطلاعات از طرف سرور به کلاینتها با فاصله زمانی بسیار کوتاهی از به روز رسانی اطلاعات صورت گرفته در سمت سرور است.
نمونهای از این برنامهها شامل موارد ذیل هستند:
- اطلاع رسانی همزمان به گروهی از کاربران
- جستجوهای زنده و به روز رسانیهایی از این دست
- نمایش بلادرنگ قیمتها و وضعیت تجاری محصولات و سهامها
- بازیهای تعاملی
- برنامههای گروهی و تعاملی (مانند برنامههای Chat)
- برنامههای شبکههای اجتماعی (برای مثال پیام جدیدی دارید؛ شخص خاصی آنلاین یا آفلاین شد و امثال آن)
بنابراین به صورت خلاصه قصد داریم به ارائه بازخوردها و اطلاع رسانیهای بلادرنگ یا نسبتا سریع و به روز از سمت سرور به کلاینتها برسیم.
برای مثال یک دیتاگرید را درنظر بگیرید. دو کاربر در شبکه صفحه یکسانی را گشودهاند و یکی از آنها مشغول به ویرایش و یا حذف اطلاعات است. در ارتباطات بلادرنگ کاربر یا کاربران دیگر نیز باید (یا بهتر است) در زمانیکه گرید یکسانی را گشودهاند، بلافاصله آخرین تغییرات را ملاحظه کنند. یا حتی حالتی را درنظر بگیرید که شخصی SQL Server management studio را گشوده و در آنجا مشغول به تغییر اطلاعات گردیده است. در این حالت نیز بهتر است آخرین تغییرات بلافاصله به اطلاع کاربران رسانده شوند.
معرفی الگوی Push service
البته باید دقت داشت که الگوی push service یک الگوی رسمی ذکر شده در گروههای مرسوم الگوهای طراحی نیست، اما مفهوم آن سرویسی است که چندین کار ذیل را انجام میدهد:
الف) پذیرش اتصالات از چندین مصرف کننده. مصرف کنندهها در اینجا الزاما محدود به کلاینتهای وب یا دسکتاپ نیستند؛ میتوانند حتی یک سرور یا سرویس دیگر نیز باشند.
ب) قادر است اطلاعات را به مصرف کنندههای خود ارسال کند. این سرویس میتواند یک برنامه ASP.NET باشد یا حتی یک سرویس متداول ویندوز.
ج) در اینجا چندین منبع خارجی مانند یک بانک اطلاعاتی یا تغییرات رخ داده توسط یک سخت افزار که میتوانند سبب بروز رخدادهایی در push service گردند نیز میتواند وجود داشته باشند. هر زمان که تغییری در این منابع خارجی رخ دهد، مایل هستیم تا مصرف کنندهها را مطلع سازیم.
پروتکل HTTP و ارتباطات بلادرنگ
پروتکلی که در ارتباطات بلادرنگ مبتنی بر SignalR مورد استفاده قرار میگیرد، HTTP است و از قابلیتهای Request و Response آن در اینجا بیشترین بهره برده میشود. پیاده سازی Push عموما بر مبنای یکی از روشهای متداول زیر است:
1) Periodic polling
به این معنا که مثلا هر 10 ثانیه یکبار، کاری را انجام بده؛ مانند ارسال متناوب: آیا تغییری رخ داده؟ آیا تغییری رخ داده؟ و .... به همین ترتیب. این روش اصلا بهینه نبوده و منابع زیادی را خصوصا در سمت سرور مصرف خواهد کرد. برای مثال:
function getInfo() { $.ajax("url", function ( newInfo){ if ( newInfo != null) { // do something with the data } }); // poll again after 20 seconds setTimeout(getInfo,20000); } // start the polling loop getInfo();
2) Long polling
به آن HTTP Streaming یا Comet هم گفته میشود. این روش نسبتا هوشمند بوده و کلاینت اتصالی را به سرور برقرار خواهد کرد. سرور در این حالت تا زمانیکه اطلاعاتی را در دسترس نداشته باشد، پاسخی نخواهد داد. برای نمونه:
function getNewInfo(){ $.ajax("url", function (newinfo) { // do something with the data // start the new request getNewINfo(); }); } // start the polling loop getNewInfo();
این روش نسبت به حالت Periodic polling بهینهتر است اما نیاز به اتصالات زیادی داشته و همچنین تردهای بسیاری را در سمت سرور به خود مشغول خواهد کرد.
3) Forever frame
فقط در IE پشتیبانی میشود. در این روش یک Iframe مخفی توسط مرورگر تشکیل شده و از طریق آن درخواستی به سرور ارسال میشود. سپس سرور متناوبا با تزریق اسکریپتهایی به این Iframe سبب فراخوانی مجدد وضعیت خود میگردد. در این روش نیز به ازای هر درخواست و پاسخ، ارتباطات گشوده و بسته خواهند شد.
4) Server Sent Events یا SSE
این مورد جزو استاندارد HTML5 است. در اینجا اتصالی برقرار شده و دادهها از طریق اتصالات HTTP منتقل میشوند.
var eventSrc = new EventSource("url"); // register event handler for the message eventSrc.addEventListener( "message",function (evt) { //process the data });
تنها تفاوت آن با حالت long polling در این است که پس از ارائه پاسخ به کلاینت، اتصال را قطع نمیکند. Long polling نیز اتصال را باز نگه میدارد، اما این اتصال را بلافاصله پس از ارائه پاسخ، میبندد.
5) Web sockets
Web sockets در سکوی کاری ویندوز، تنها در ویندوزهای 8، ویندوز سرور 2012 و دات نت 4 و نیم پشتیبانی میشود. هرچند این روش در حال حاضر به عنوان بهترین روش Push مطرح است اما به دلیل محدودیتی که یاد شد، مدتی طول خواهد کشید تا استفاده گستردهای پیدا کند.
var socket = new WebSocket("url"); socket.onmessage = function (msg) { var newInfo = msg.data; // do something with the data } // client can also send request to server socket.send(.... )
بلی. اگر به وضعیت فعلی سکوی کاری ASP.NET نگاه کنیم:
SignalR را میتوان مشاهده کرد که در گروه ساخت سرویسهای آن قرار گرفته است. همانطور که ملاحظه میکنید، این سرویس جدید آنچنان وابستگی به سایر اجزای آن نداشته و میتواند خارج از ASP.NET نیز مورد استفاده قرار گیرد.
SignalR چیست؟
SignalR راه حلی است سمت سرور برای نوشتن push services. همچنین به همراه کتابخانههای سمت کاربری است که ارتباطات push services را در انواع و اقسام سکوهای کاری میسر میسازد. SignalR سورس باز بوده و برای اعمال غیرهمزمان (asynchronous) بهینه سازی شده است.
SignalR بر اساس مدل ذهنی اتصالات ماندگار (persistent connections) طراحی شده است. اتصالات ماندگار را باید به عنوان اتصالاتی سریع و غیرطولانی درنظر گرفت. در اینجا Signal یک اتصال است که اطلاعاتی به آن ارسال میگردد و هدف، انتقال قطعات کوچکی از اطلاعات است و هدف، ارسال حجم عظیمی از اطلاعات نیست. برای مثال اطلاع رسانی سریعی صورت گیرد که تغییراتی رخ داده است و سپس ادامه کار و دریافت اطلاعات واقعی توسط فرآیندهای متداول مثلا HTTP GET انجام شود. البته باید دقت داشت SignalR نیز نهایتا از یکی از 5 روش push بررسی شده در این قسمت استفاده میکند. اما بر اساس تواناییهای کلاینت و سرور، به صورت هوشمند بهترین و بهینهترین انتخاب را به کاربر ارائه میدهد.
اتصالات ماندگار قسمت سطح پایین SignalR را تشکیل میدهند. سطح بالاتر آن که این مفاهیم را به شکلی کپسوله شده ارائه میدهد، Hubs نام دارد که پایه اصلی دوره جاری را تشکیل خواهد داد.
همانطور که عنوان شد، SignalR سورس باز بوده و دارای مخزن کدی عمومی در GitHub است. همچنین بستههای تشکیل دهندهی آن از طریق NuGet نیز قابل دریافت هستند. این بستهها شامل هسته SignalR و کلاینتهای آن مانند کلاینتهای WinRT، سیلورلایت، jQuery، ویندوز فون8 و امثال آن هستند.
شروع کار با SignalR
تیم SignalR مثالی مقدماتی از نحوه کار با SignalR را به صورت یک بسته NuGet ارائه دادهاند که از طریق آدرس و فرمان ذیل قابل دریافت است:
PM> Install-Package Microsoft.AspNet.SignalR.Sample
پس از دریافت مثال، یکبار پروژه را کامپایل کرده و سپس بر روی فایل StockTicker.html آن کلیک راست نموده و گزینه مشاهده در مرورگر را انتخاب کنید. همچنین برای اینکه این مثال را بهتر مشاهده کنید، بهتر است دو وهله از مرورگر را باز کرده و آدرس باز شده را در آن بررسی کنید تا اعمال تغییرات همزمان به کلاینتهای متفاوت را بهتر بتوان بررسی و مشاهده کرد.