اشتراکها
بازخوردهای پروژهها
خطا در اجرای پروژه
سلام و عرض ادب
ممنون از پاسخ
من همونطور که فرمودید دستور رو در کنسول ناگت اجرا کردم در حالیکه پروژه Decision.DataLayer انتخاب بود. نتیجه این شد:
PM> Update-Database Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Applying explicit migrations: [201510160239047_Initial, 201510182128076_AddCodeToArticle, 201510221124200_AddedScoreProperty, 201512220940192_RemoveUniqueOfTeacherTable, 201512221245065_RemoveConstraint, 201512221428430_removeNotification]. Applying explicit migration: 201510160239047_Initial. Configuration option 'filestream access level' changed from 2 to 2. Run the RECONFIGURE statement to install. System.Data.SqlClient.SqlException (0x80131904): FILESTREAM feature is disabled. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext`1 c) at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext) at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection) at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass30.<ExecuteStatements>b__2e() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation) at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements, DbTransaction existingTransaction) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable`1 operations, IEnumerable`1 systemOperations, Boolean downgrading, Boolean auto) at System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b() at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run() at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner) at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force) at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0() at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command) ClientConnectionId:ada71343-c349-41c6-8ac0-e9f983f57e85 Error Number:5591,State:3,Class:16 FILESTREAM feature is disabled.
همونطور که در خط آخر میبینید اروری وجود داره. و پروژه هم همچنان همون خطای قبل رو در اجرا داره.
یک نکتهی تکمیلی: روش محافظت از کلیدهای سیستم DataProtection با یک مجوز SSL
اگر برنامههای ASP.NET Core را اجرا کرده باشید، عموما در ابتدای آن یک پیام محافظت نشده بودن کلیدهای سیستم DataProtection را لاگ میکند. برای رفع این مشکل میتوان این مراحل را طی کرد:
الف) نیاز به یک مجوز SSL داریم که دارای private key هم باشد.
برای این منظور سه دستور زیر را صادر کنید تا یک فایل pfx مناسب سیستم DataProtection تولید شود:
این دستورات از openssl.exe برنامهی Git for windows استفاده میکنند. اگر فایل pfx نهایی دارای private key نباشد (روش فوق این مشکل را ندارد)، حین استفادهی از آن در برنامه، با خطاهایی مانند «کلید یافت نشد» و یا «access denied» مواجه میشوید.
ب) خواندن فایل pfx در برنامه
روش خواندن فایلهای pfx به صورت زیر است:
دو نکته در اینجا مهم هستند: اگر از IIS استفاده میکنید، روشن کردن گزینهی «Load user profile» را در Application pool برنامه فراموش نکنید، تا سیستم RSA به خوبی کار کند. همچنین در اینجا قسمت store.Add الزامی است. از این جهت که ASP.NET Core برای کار decryption کلیدها، فقط به اطلاعات X509Store سیستم مراجعه میکند و کاری به فایل pfx ما ندارد.
ج) معرفی مجوز تولید شده به سیستم
دراینجا آخرین مرحله، ذکر متد ProtectKeysWithCertificate به همراه مجوزی است که تولید کردیم:
اکنون اگر برنامه را اجرا کنید، از فایل pfx تولیدی، برای رمزنگاری کلیدهای سیستم DataProtection استفاده خواهد شد.
اگر برنامههای ASP.NET Core را اجرا کرده باشید، عموما در ابتدای آن یک پیام محافظت نشده بودن کلیدهای سیستم DataProtection را لاگ میکند. برای رفع این مشکل میتوان این مراحل را طی کرد:
الف) نیاز به یک مجوز SSL داریم که دارای private key هم باشد.
برای این منظور سه دستور زیر را صادر کنید تا یک فایل pfx مناسب سیستم DataProtection تولید شود:
"C:\Program Files\Git\usr\bin\openssl.exe" genrsa -out private.key 2048 "C:\Program Files\Git\usr\bin\openssl.exe" req -new -x509 -key private.key -out publickey.cer -days 1398 "C:\Program Files\Git\usr\bin\openssl.exe" pkcs12 -export -out idp.pfx -inkey private.key -in publickey.cer
ب) خواندن فایل pfx در برنامه
روش خواندن فایلهای pfx به صورت زیر است:
private static X509Certificate2 loadCertificateFromFile(string filePath, string password) { // NOTE: // You should check out the identity of your application pool and make sure // that the `Load user profile` option is turned on, otherwise the crypto susbsystem won't work. // For decryption the certificate must be in the certificate store. It's a limitation of how EncryptedXml works. using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser)) { store.Open(OpenFlags.ReadWrite); store.Add(new X509Certificate2(filePath, password, X509KeyStorageFlags.Exportable)); } return new X509Certificate2( filePath, password, keyStorageFlags: X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); }
ج) معرفی مجوز تولید شده به سیستم
دراینجا آخرین مرحله، ذکر متد ProtectKeysWithCertificate به همراه مجوزی است که تولید کردیم:
services .AddDataProtection() .SetDefaultKeyLifetime(...) .SetApplicationName(...) .ProtectKeysWithCertificate(loadCertificateFromFile("path ...", "123"));
بعد از ایجاد فایل Text template که در جلسه قبل با آن آشنا شدید، برای شروع قواعد زیر را در نظر بگیرید :
- تنظیمات مربوط به فایل Text template و نحوه تولید خروجی در ابتدای فایل و بین علامت <#@ و #> قرار میگیرد.
- هر متنی که بصورت معمول در فایل tt نوشته شود، به همان صورت در فایل خروجی قرار میگیرد.
- هر دستوری که در بین علامتهای <#= و #> قرار گیرد هنگام کامپایل اجرا شده و معادل آن در همان مکان متن قرار میگیرد.
- هر دستوری که بین علامتهای <# و #> قرار گیرد، هنگام کامپایل اجرا میشود. در این صورت دستورات نوشته شده در این قسمت فقط اجرا میگردد و معمولا برای استفاده در قسمتهای دیگر، داخل بلوک <#= #> نوشته میشود .
- برای تعریف کلاس یا متد جدید جهت استفاده در فایل tt میتوانیم کلاس را در بین علامت <#+ و #> قرار دهیم. در این صورت کلاس و متدهای نوشته شده در قسمتهای دیگر، داخل بلوک <#= #> و یا <# #> مورد استفاده قرار میگیرند.
اجازه دهید با یک مثال ساده قواعد اولیه را بررسی کنیم :
در این مثال، T در واقع متغیری است که در بلوک <# #> تعریف گردیده و در بلوک <#= #> مقدار آن استفاده میشود. خروجی فایل چیزی شبیه به دو خط زیر خواهد بود:
خروجی Text template بالا فایل Cs با محتوی
شبیه کد زیر خواهد بود: (روز نگارش مطلب البته دوشنبه است) فکر میکنم این 3 مثال ساده، تا حد زیادی قواعد اولیه T4 Text
Template را برای شما روشن کرده باشد. در
قسمت بعدی برخی قواعد تکمیلی را در این مورد خدمتتون ارائه میدم.
- تنظیمات مربوط به فایل Text template و نحوه تولید خروجی در ابتدای فایل و بین علامت <#@ و #> قرار میگیرد.
- هر متنی که بصورت معمول در فایل tt نوشته شود، به همان صورت در فایل خروجی قرار میگیرد.
- هر دستوری که در بین علامتهای <#= و #> قرار گیرد هنگام کامپایل اجرا شده و معادل آن در همان مکان متن قرار میگیرد.
- هر دستوری که بین علامتهای <# و #> قرار گیرد، هنگام کامپایل اجرا میشود. در این صورت دستورات نوشته شده در این قسمت فقط اجرا میگردد و معمولا برای استفاده در قسمتهای دیگر، داخل بلوک <#= #> نوشته میشود .
- برای تعریف کلاس یا متد جدید جهت استفاده در فایل tt میتوانیم کلاس را در بین علامت <#+ و #> قرار دهیم. در این صورت کلاس و متدهای نوشته شده در قسمتهای دیگر، داخل بلوک <#= #> و یا <# #> مورد استفاده قرار میگیرند.
اجازه دهید با یک مثال ساده قواعد اولیه را بررسی کنیم :
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".txt" #> <# var T = DateTime.Now; #> The Time is : <#= T #> The Time is : <#= DateTime.Now #>
The Time is : 02/16/2014 14:17:39
The Time is : 02/16/2014 14:17:39
به عنوان یک مثال دیگر که قواعد توضیح داده شده را پوشش دهد به مثال زیر توجه کنید : The Time is : 02/16/2014 14:17:39
<#@ template debug="true" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> using System; using System.Text; <# string ClassName = "DotnetTips"; #> public class <#= ClassName + "_" + new MyTestClass().Str #> { } <#+ public class MyTestClass { public string Str { get{return new DateTime().DayOfWeek.ToString() ;} } } #>
using System; using System.Text; public class DotnetTips_Monday { }
به عنوان یک مثال ساده دیگر برای فهم بیشتر به کد زیر جهت تولید Table در Html توجه کنید:
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".html" #> <html><body> <table> <# for (int i = 1; i <= 10; i++) { #> <tr> <td>Test name <#= i #> </td> <td>Test value <#= i * i #> </td> </tr> <# } #> </table> </body></html>
بازخوردهای دوره
استفاده از Async و Await در برنامههای ASP.NET MVC
با توجه به : محدودیت پردازش موازی اعمال در EF «پردازشهای Async در Entity framework 6»
راهکار موجود استفاده از چندین Context میباشد ایا شما این روش را توصیه میکنید یا پیشنهاد خاصی برای پردازش موازی و در نتیجه افزایش کارایی دارید؟
استفاده ار async در فیلتر سفارشی چگونه امکان دارد با توجه به این لینک ؟اگر بخواهم از چندین Context و قابلیت پردازش موازی در در فیلتر سفارشی استفاده کنم دچار مشکل میشوم
راهکار موجود استفاده از چندین Context میباشد ایا شما این روش را توصیه میکنید یا پیشنهاد خاصی برای پردازش موازی و در نتیجه افزایش کارایی دارید؟
استفاده ار async در فیلتر سفارشی چگونه امکان دارد با توجه به این لینک ؟اگر بخواهم از چندین Context و قابلیت پردازش موازی در در فیلتر سفارشی استفاده کنم دچار مشکل میشوم
اشتراکها
تولید کد اتوماتیک MVVM با Roslyn
اگر با MVVM کار میکنید و از فریمورکهای آماده استفاده نمیکنید حتما پیاده سازی تکراری INotifyPropertyChanged و RealyCommand و ViewModelBase شما را خسته کرده است. کامپایلر Roslyn به شما اجازه میدهد که به سادگی امکانات Refactoring موجود در Visual Studio را سفارشی سازی کرده و بسته به نیاز خود Refactoringهای جدید بسازید تا در زمان کدنویسی شما صرفه جویی شود. در این مقاله با نحوه ساخت چند نمونه Refactoring سفارشی آشنا میشوید.
با سلام؛ من یه AuthorizationHandler سفارشی نوشتم که داخلش یه Exception صادر میکنم. همچنین یک ExceptionMiddlware سفارشی نیز نوشتم که مدیریت خطاها رو بعهده داره. اما زمانی که از داخل AuthorizationHandler یک exception صادر میکنم ExceptionMiddlware فراخوانی نمیشه ! آیا نمیتوان در داخل یک middlware یه exception صادر و در exceptionMiddlware آن را دریافت کرد؟
- هدرهای سفارشی را نمیتوان با فرمهای معمولی ارسال کرد. این روش برای کار با فرمهای معمولی POST غیر Ajax ای طراحی نشده. برای آنها (فرمهای post back ای) از روش کار با کوکیها استفاده کنید که به صورت خودکار توسط مرورگر ارسال میشوند و نیاز به تنظیم خاصی ندارند: «اعتبارسنجی مبتنی بر کوکیها در ASP.NET Core 2.0 بدون استفاده از سیستم Identity»
- البته OnMessageReceived را در صفحهی جاری جستجو کنید. امکان ارسال توکنها به صورت فیلدهای سفارشی هم وجود دارد که در سمت سرور باید آنها را پردازش کنید.
برای افزودن لیست Claims کاربر موجود در بانک اطلاعاتی به لیست Claims کاربر وارد شدهی توسط اکتیو دایرکتوری، باید از یک IClaimsTransformation سفارشی استفاده کنید تا این نگاشت را انجام دهد (نمونهاش در مطلب « سفارشی سازی ASP.NET Core Identity - قسمت چهارم - User Claims » به نحو دیگری استفاده شدهاست):
پیاده سازی کامل آن در اینجا
و برای ثبت آن:
public class ApplicationClaimsTransformation : IClaimsTransformation { }
و برای ثبت آن:
services.AddScoped<IClaimsTransformation, ApplicationClaimsTransformation>();
نظرات مطالب
فعال سازی عملیات CRUD در Kendo UI Grid
با سلام
آیا روشی وجود دارد که هنگام حذف رکود یه پیام سفارشی رو نشان بده به همراه یکی از مقادیر رکوردی رو که میخواهد حذف کنه: به عنوان مثال:
"ایا شما مایل به حذف این رکورد هستید:"+ مقدار یکی از ستونهای جدول
2- بجای پنجره حذف رکورد گرید یه پنچره سفارشی دیگه نشون بدیم
آیا روشی وجود دارد که هنگام حذف رکود یه پیام سفارشی رو نشان بده به همراه یکی از مقادیر رکوردی رو که میخواهد حذف کنه: به عنوان مثال:
"ایا شما مایل به حذف این رکورد هستید:"+ مقدار یکی از ستونهای جدول
2- بجای پنجره حذف رکورد گرید یه پنچره سفارشی دیگه نشون بدیم