Kendo UI
- معرفی Kendo UI
- بررسی ساختار ویجتهای وب Kendo UI
- کار با Kendo UI DataSource
- صفحه بندی، مرتب سازی و جستجوی پویای اطلاعات به کمک Kendo UI Grid
- استفاده از Kendo UI templates
- فرمت کردن اطلاعات نمایش داده شده به کمک Kendo UI Grid
- فعال سازی عملیات CRUD در Kendo UI Grid
- استفاده ازExpressionها جهت ایجاد Strongly typed view در ASP.NET MVC
- اعتبار سنجی ورودیهای کاربر در Kendo UI
- Kendo UI MVVM
- یکپارچه سازی سیستم اعتبارسنجی ASP.NET MVC با Kendo UI validator
- بررسی ویجت Kendo UI File Upload
- استفاده از ویجت آپلود KendoUI بصورت پاپ آپ
- رسم نمودار توسط Kendo Chart
- استفاده از Kendo UI TreeView به همراه یک منبع داده راه دور
- ایجاد Drop Down Listهای آبشاری توسط Kendo UI
- فعال سازی قسمت آپلود تصویر و فایل Kendo UI Editor
فواید استفاده از فریمورک Seneca
- فریمورک Seneca کدنویسی برای ایجاد درخواستها، ارسال پاسخ به درخواستهای رسیده و تبدیل دادهها را که از روتینهای هر سرویسی میتوانند باشند، سادهتر میکند.
- فریمورک Seneca با معرفی ایده Actionها و Pluginها که جلوتر توضیح داده خواهند شد، روند تبدیل کامپوننتهای یک برنامه Monolithic را به نوع سرویسی، تسهیل میکند. روندی که به صورت عادی میتواند کاری طاقت فرسا باشد و نیاز به Refactoring زیادی دارد.
- سرویسهای نوشته شده با زبانهای برنامهنویسی مختلف یا فریمورکهای متفاوت میتوانند با سرویسهای نوشته شده توسط فریمورک Seneca در ارتباط و تبادل باشند.
نصب فریمورک Seneca
{ "name": "seneca-example", "dependencies": { "seneca": "0.6.5", "express": "latest" } }
var seneca = require("seneca")();
Actionها
seneca.add({role: "accountManagement", cmd: "login"}, function(args, respond){ }); seneca.add({role: "accountManagement", cmd: "register"}, function(args, respond){ });
seneca.act({role: "accountManagement", cmd: "register", username: "parham", password: "12345!"}, function(error, response){ }); seneca.act({role: "accountManagement", cmd: "login", username: "parham", password: "12345!"}, function(error, response){ });
Pluginها
function account(options){ this.add({init: "account"}, function(pluginInfo, respond){ console.log(options.message); respond(); }) this.add({role: "accountManagement", cmd: "login"}, function(args, respond){ }); this.add({role: "accountManagement", cmd: "register"}, function(args, respond){ }); } seneca.use(account, {message: "Plugin Added"});
module.exports = function(options){ this.add({init: "account"}, function(pluginInfo, respond){ console.log(options.message); respond(); }) this.add({role: "accountManagement", cmd: "login"}, function(args, respond){ }); this.add({role: "accountManagement", cmd: "register"},function(args, respond){ }); return "account"; } seneca.use("./account.js", {message: "Plugin Added"});
Serviceها
var seneca = require("seneca")(); seneca.use("./account.js", {message: "Plugin Added"}); seneca.listen({port: "9090", pin: {role: "accountManagement"}});
seneca.client({port: "9090", pin: {role: "accountManagement"}});
در اینجا هم موارد port و pin اختیاری هستند. اگر سرویسی که میخواهیم ثبت کنیم در سرور دیگری باشد، بایستی خاصیت host و با مقدار آدرس IP سرور مورد نظر در زمان ثبت، اعمال شود. سوالی که باقی میماند این است که یک سرویس چطور Actionی از یک سرویس دیگر را فراخوانی میکند؟
در بخش Actionها آمد که برای فراخوانی یک Action از متد act، از نمونهی Seneca استفاده میکنیم. رفتار Seneca به این صورت است که ابتدا بر اساس امضای Action درخواست شده، Actionهای محلی را که به سرویس جاری اضافه شدهاند، جستجو میکند. اگر تطبیقی نیافت به سراغ Actionهای ثبت شده خارجی که دارای خاصیت pin هستند، خواهد رفت و در نهایت اگر آنجا هم موردی نیافت، برای تک تک سرویسهایی که آنها را ثبت کرده، اما خاصیت pin را ندارند، درخواستی را ارسال میکند.
برای اطلاعات بیشتر به بخش مستندات فریمورک Seneca رجوع کنید.
کتابخانه FlipBook
کتابخانه Motion Slider
- نصب ماژول
- فعال سازی ماژول
نکته ای که در مورد ماژولهای native وجود دارد این هست که این ماژولها دسترسی بدون محدودیتی به منابع سروری دارند و از این رو حتما باید این نکته را دقت کنید که ماژول native شما از یک منبع مورد اعتماد دریافت شده باشد.
نصب یک native module
- ویرایش دستی فایل کانفیگ و از نسخه IIS7.5 به بعد هم میتوانید از configuration editor هم استفاده کنید.
- استفاده از محیط گرافیکی IIS
- استفاده از خط فرمان با دستور Appcmd
%windir%\system32\inetsrv\config\applicationhost.config
کسی که نیاز به دسترسی به این مسیر و انجام تغییرات دارد باید در بالاترین سطح مدیریتی سرور باشد.
<globalModules> <addname="DefaultDocumentModule"image="%windir%\system32\inetsrv\defdoc.dll"/> <addname="DirectoryListingModule"image="%windir%\system32\inetsrv\dirlist.dll"/> <add name="StaticFileModule"image="%windir%\system32\inetsrv\static.dll"/> ... </globalModules>
<add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" /> <add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" /> <add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" /> <add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
<modules runAllManagedModulesForAllRequests="true"/>
شکل زیر هم نمونه ای حالت مجتمع هست:
در کل امروزه دیگر استفاده از روش کلاسیک راهکار درستی نیست و این ویژگی تنها به عنوان یک سازگاری با نمونه کارهای قدیمی است.
- ISAPI filters
- globalModules
- handlers
- modules
پردازشهای Async در Entity framework 6
- در EF استثناءها چند سطحی هستند. نیاز است inner exception را جهت مشاهدهی اصل و علت واقعی خطا بررسی کرد. در مثال شما فقط سطح استثناء بررسی شده و نه اصل آن.
احتمالا خطای اصلی timeout است. این مورد به مباحث قفل گذاری روی رکوردها مرتبط است. تراکنشهای طولانی همزمانی را آغاز کردهاید که دسترسی سایر کاربران را به جداول، تا پایان کار آن تراکنشها، محدود میکنند.
- در کارهای چند ریسمانی برای دسترسی امن به عناصر UI، باید از روشهای Synchronization استفاده کرد.