نظرات مطالب
معماری لایه بندی نرم افزار #3
اگر مشخصات شخص به همراه درخواست ثبت می‌شود و مدخل ورودی به سیستم درخواست می‌باشد، همان روش اول اتفاق می‌افتد.
یعنی با ثبت درخواست، شخص نیز به صورت خودکار ثبت خواهد شد.
به این نکته توجه داشته باشید که روش دوم به این دلایل غلط می‌باشند:
1- طبق تعریفی که در معماری سرویس گرا شده است، هیچ متدی از سرویس، نباید به متد سرویس دیگری وابسته باشد
2- چون ثبت این دو آیتم باید با هم انجام شود، پس بهتر است در یک متد دو موجودیت ثبت شوند
3- و همینطور چون باید در یک تراکنش قرار بگیرند و تجربه نشان داده در هر عملیات بهتر است DataContext نمونه سازی گردد پس چندین کار که قرار است در یک مرحله انجام شوند بهتر است در یک متد سرویس انجام گیرند
نظرات مطالب
ASP.NET MVC #10
شما از برای تشکیل فرم از کد‌های سمت سرور استفاده کردید فقط صرف مطلب آموزشی بوده یا دلیل خاصی هم داشته
چون ما اکثرا برای ساخت وب سایت مرحله اول با html و css کار می‌کنیم و فرم‌ها و همه موارد بدین صورت ساخته میشن و حالا توی حالت webform یا php ما با همین اشیا کار می‌کردیم که هم خودمون راحت‌تر هستیم و هم کد در ظاهر آسان هست و مشابه خروجی نهایی
چرا فرم رو به همون شیوه ای که بعدا نمونه خروجیش رو نشون دادید ننوشتید؟ چون من علاقه زیادی به استفاده از اشیا و کنترل‌های سروری ندارم
نظرات مطالب
تغییر عملکرد و یا ردیابی توابع ویندوز با استفاده از Hookهای دات نتی
درسته توی apimonitor باید صبر کنیم فایل اجرایی کامل اجرا شه تا کامل لاگ رفتاریشو استخراج کنیم
ولی من میخوام در حین اجرای فایل با رسیدن به هر فراخوانی نرم افزار متوقف بشه پارامترای داخلشو بگیرم بعد فایل به اجرا ادامه بده. چجوری میتونم این کارو بکنم. نمیخوام هیچ تابعی رو تغییر بدم فقط میخوام مقادیر داخل apiها رو بگیرم
با easyhook در سی# نمیشه؟
من برای شناسایی بدافزار با استفاده از apimonitor لاگ رفتاری رو استخراج کردم از روش با استفاده از فراخوانیای سیستمی و پارامترای داخلش مدل ساختم و برای مرحله تشخیص میخوام یه فایل رو در حین اجرا تشخیص بدم بدافزار هست یا نه
فقط شما بفرمایید چجوری با رسیدن به هر فراخوانی من به دامش بندازم و اطلاعات درونشو بگیرم
ممنون
نظرات مطالب
استفاده از Lambda Expression در پروژه های مبتنی بر WCF
- اینکار اضافی است. چون xml را تبدیل به json می‌کنید؛ بعد json را تبدیل به xml.
+ خروجی serializer.Serialize از نوع XElement است. بنابراین در قسمت آرگومان جنریک JsonConvert.DeserializeObject باید XElement ذکر شود. مرحله بعدی آن فراخوانی serializer.Deserialize روی این خروجی است.
Expression<Func<Book, bool>> expression = x => x.Code > 2 && x.Code < 5;
var expressionSerializer = new Common.ExpressionSerializer();
var xml = expressionSerializer.Serialize(expression);
var xmlToJson = JsonConvert.SerializeObject(xml);
var xmlObject = JsonConvert.DeserializeObject<XElement>(xmlToJson);
var exp2 = expressionSerializer.Deserialize(xmlObject) as Expression<Func<Book, bool>>;
نظرات مطالب
توزیع پروژه‌های ASP.NET MVC بدون ارائه فایل‌های View آن
اگر یک فایل پروژه MVC رو باز کنید چنین تنظیمی داخل آن هست
<MvcBuildViews>false</MvcBuildViews>
با true کردن آن (که یک best practice محسوب میشه) هربار «از ابتدا» همین کاری که توسط razor generator انجام می‌شود، برای پیش کامپایل Viewها انجام خواهد شد.
بنابراین با استفاده از Razor generator به یک مزیت مهم دیگر هم خواهیم رسید:
بالا رفتن سرعت بررسی زمان کامپایل Viewها بدون نیاز به تغییر فایل پروژه. اگر تعداد Viewها زیاد باشد، تغییر MvcBuildViews به true خیلی زمانبر می‌شود تا حدی که پس از چندبار کامپایل پروژه، شاید مجبور به false کردن آن شویم. اما در حالت استفاده از Razor Generator واقعا سرعت بررسی بسیار بالاتر است؛ چون فایل‌های cs مورد نیاز سایر Viewها پیشتر تهیه شده و زمان تولید آن‌ها یک مرحله کاهش پیدا می‌کند.
نظرات مطالب
طراحی گردش کاری با استفاده از State machines - قسمت سوم
- مورد استفاده در هر شرکتی با بیش از یک نفر کارمند.
مانند گردش کاری درخواست:
  1. مساعده
  2. مرخصی
  3. ماموریت
  4. تائید ساعات کاری
  5. درخواست و تائید تشکیل یک جلسه
  6. پر کردن و تائید تایم شیت
و ... تمام کارهای یک سازمان یا شرکت
-  هدف آشنایی بصری شما با نحوه حل مسایل چند مرحله‌ای که در ابتدا ساده به نظر می‌رسند، اما 10 مرحله که به آن اضافه شود، مدیریت آن به روش‌های متداول طاقت فرسا خواهد شد.
- وجود این تصاویر، تولید کننده کد و امثال آن صرفا برای ساده کردن توضیح انبوهی متن، به همراه روشی برای حل آن بود.
نظرات مطالب
ASP.NET MVC #12
با سلام خدمت جناب نصیری
در خصوص این مبحث یک سوالی برایم پیش آمد:
همانطور که فرمودید در ساخت View های مختلف میتوان  از Helper های مختلف استفاده کرد. مثلا Html.DropDownListFor یا BeginForm و غیره ...
نهایتاً تمام این ها سمت سرور اجرا شده و نتیجه HTML برمیگرداند. حال به نظر شما مشکلی دارد پس از آنکه با استفاده از Helper های مختلف View نهایی تولید شد و دیگر قصد تغییر آن را نداشتیم، نتیجۀ HTML شده را جهت استفاده نهایی استفاده کنیم، یعنی در Vew نهایی که بر روی Host آپلود می شود، کد های HTML تولید شده در مرحله قبل را قرار دهیم.
با این کار دیگر لازم نیست سمت سرور  Viewها ساخته شوند و همه چیز آماده است؛ که میتواند باعث افزایش سرعت شود. آیا درست متوجه شدم؟
البته قسمت هایی مثل ActionLink ها که با توجه به موقعیت جاری ساخته میشوند به حالت قبل در View نوشته شوند.
نظرات مطالب
ASP.NET MVC #3
کلاس ProductController در پوشه Controllers اضافه می‌شود. این کلاس هم یک کلاس ساده دات نتی است با این تفاوت که با ارث بری از کلاس استاندارد Controller، مفهوم یک کنترلر را پیدا می‌کند.
مرحله بعد ایجاد View است برای متدهای این کنترلر. در این مورد در قسمت بعد با تصویر توضیح خواهم داد. البته نتیجه آن هم این خواهد بود که فایل‌های View آن در پوشه پیش فرض Views/Product قرار می‌گیرند.
بنابراین نام کنترلر Product است.
نام پوشه Viewهای پیش فرض آن مطابق قرارداد، Views/Product است.
اما این کنترلر باید تحت عنوان کلاسی به نام ProductController به پوشه Controllers اضافه شود.
نظرات مطالب
مدیریت فایلهای یک پروژه نرم افزاری با استفاده از Subversion
با سلام
قبل از هرچیز بابت این کتاب ازتون تشکر میکنم
من تو مرحله اجرای سرویس SVN به مشکل برمیخورم
Could not start the ... service on Local Computer
Error 1053: The service did not respond to the tart or control request in a timely fashi0n

ویندوزم سون 64 بیته
ارور بالا رو گوگل کردم و بعضی کارها رو هم انجام دادم مثله باز کردن پورت 3690 و اجرای سرویس با یوزر ادمین و...
ولی نشد
حتی اینستالری هم که ابتدای کتاب معرفی کردید موقع نصب ارور میده

ممنون از توجهتون
مطالب
لغو اجرای یک اکشن فیلتر برای یک اکشن خاص در MVC
بسیار پیش می‌آید که یک کنترلر را به یک اکشن فیلتر خاص مزین کنیم. در این صورت تمامی اکشن‌های موجود در کنترلر مربوطه مجاب به اجرای اکشن فیلتر مورد نظر می‌شوند. اما بسیار پیش می‌آید که نخواهیم یک اکشن خاص در کنترلر مذکور اکشن فیلتر مورد نظر را اجرا کند.
یک راهکار ساده اما (به نظر شخصی من) غیر منطقی این است که تک تک اکشن هایی را که می‌خواهیم اکشن فیلتر مورد نظر را اجرا کنند، مزین کنیم و اکشن‌هایی که نمی‌خواهیم اکشن فیلتر مورد نظر را اجرا کنند به اکشن فیلتر مورد نظر مزین نمی‌کنیم. اما فرض کنید تعداد اکشن‌های ما زیاد باشند؛ به نظر این روش غیر منطقی و غیر بهینه است.

یکی از مشکلاتی که در یکی از پروژه‌ها حدود سه روز وقت من را گرفت همین کار بود. زمانی که از یک تصویر امنیتی جهت مقابله با ربوت‌های استفاده میکردم به این مشکل برخورد کردم. کنترلر من به یک اکشن فیلتر فشرده سازی محتوا مزین بود. در نتیجه اکشنی که تصویر امنیتی را تولید میکرد نیز اکشن فیلتر فشرده سازی را اجرا می‌کرد و پس از فشرده سازی باعث می‌شد که تصویر امنیتی نشان داده نشود، چون فرمت تصویری آن بهم ریخته بود. یک راهکار را که پس از جستجو به آن رسیدم، جهت استفاده‌ی دوستان مطرح می‌کنم.

برای اینکه از اجرای چنین اکشن فیلتر هایی جلوگیری کنیم نیاز است کمی اکشن فیلتر مورد نظر را دستکاری کنیم.
برای این کار باید مراحل زیر را انجام داد:
1- ابتدا یک Attribute خالی را تعریف می‌کنیم.
2- سپس اکشن فیلتر دلخواهی را تعریف کرده و در زمان اجرا بررسی می‌کنیم اگر متد (اکشن) مورد نظر با Attribute تعریفی در مرحله یک مزین شده بود، در نتیجه اکشن فیلتر را اجرا نمی‌کنیم.
3- هر اکشنی را که نمی‌خواهیم اکشن فیلتر تعریفی مرحله 2 را اجرا کند، آن را به Attribute مرحله یک مزین میکنیم.
به این ترتیب می‌توانیم از اجرای اکشن فیلتر دلخواه روی متد‌ها یا اکشن‌های دلخواه جلوگیری کنیم. در ادامه نحوه‌ی تعریف آنها را در زیر مشاهده میکنید.

1- تعریف یک Attribute دلخواه مثلا با نام  DisableCompression
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class DisableCompression : Attribute { }
2- تعریف اکشن فیلتر دلخواه مثلا با نام CompressionFilter  

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class CompressionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        bool disabled = filterContext.ActionDescriptor.IsDefined(typeof(DisableCompression), true) ||
                        filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(DisableCompression), true);
        if (disabled)
            return;

        // کدهای دلخواه اکشن فیلتر مورد نظر
    }
}
3- در این مرحله هر اکشنی را که نمی‌خواهیم اکشن فیلتر CompressionFilter را اجرا کند به Attribute با نام DisableCompression  مزین میکنیم.

[CompressionFilter]
public abstract class BaseController : Controller
{
}

public class SomeController : BaseController
{
    public ActionResult WantThisActionCompressed()
    {
        // code
    }

    [DisableCompression]
    public ActionResult DontWantThisActionCompressed()
    {
        // code
    }
}

با این کار اکشن WantThisActionCompressed اکشن فیلتر CompressionFilter را اجرا می‌کند اما اکشن DontWantThisActionCompressed  چون مزین به DisableCompression شده‌است، پس در نتیجه اکشن فیلتر CompressionFilter  بر روی آن اجرا نخواهد شد.