۶ سال و ۶ ماه قبل، سهشنبه ۱۵ اسفند ۱۳۹۶، ساعت ۱۱:۵۱
۶ سال و ۶ ماه قبل، سهشنبه ۱۵ اسفند ۱۳۹۶، ساعت ۱۱:۵۱
۶ سال و ۶ ماه قبل، سهشنبه ۱۵ اسفند ۱۳۹۶، ساعت ۱۱:۵۰
ارتقاء به ASP.NET Core 2.1
قابلیتی به نام end-to-end in-memory test به ASP.NET Core 2.1 اضافه شدهاست که برای اجرای آن نیاز به وجود یک چنین امضایی در فایل Program.cs هست:
بنابراین برای ارتقاء برنامههای ASP.NET Core 2.0 به 2.1 این مراحل باید طی شوند:
الف) فایل Program.cs را باز کنید.
ب) متد BuildWebHost قبلی را به CreateWebHostBuilder تغییر نام دهید. همچنین در این حالت نوع خروجی آنرا به IWebHostBuilder تنظیم کرده و فراخوانی ()Build. را از انتهای آن حذف کنید.
ج) اکنون بدنهی متد Main آن چنین شکلی را پیدا میکند:
و یا به صورت خلاصه فایل ابتدایی یک قالب ASP.NET Core 2.1 به این صورت است:
قابلیتی به نام end-to-end in-memory test به ASP.NET Core 2.1 اضافه شدهاست که برای اجرای آن نیاز به وجود یک چنین امضایی در فایل Program.cs هست:
public static IWebHostBuilder CreateWebHostBuilder(string [] args)
الف) فایل Program.cs را باز کنید.
ب) متد BuildWebHost قبلی را به CreateWebHostBuilder تغییر نام دهید. همچنین در این حالت نوع خروجی آنرا به IWebHostBuilder تنظیم کرده و فراخوانی ()Build. را از انتهای آن حذف کنید.
ج) اکنون بدنهی متد Main آن چنین شکلی را پیدا میکند:
CreateWebHostBuilder(args).Build().Run();
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); }
۶ سال و ۶ ماه قبل، سهشنبه ۱۵ اسفند ۱۳۹۶، ساعت ۱۱:۱۸
بعد از انجام تغییرات در مدلها و نگاشتهای آنها، نیاز است فایل _01-add_migrations.cmd را اجرا کنید تا نحوهی اعمال این تغییرات به بانک اطلاعاتی تولید شود. سپس یا فایل _02-update_db.cmd را اجرا کنید تا این تغییرات به بانک اطلاعاتی اعمال شوند، یا قطعه کد Database.Migrate هم دقیقا کار همین اسکریپت دوم را انجام میدهد.
۶ سال و ۶ ماه قبل، دوشنبه ۱۴ اسفند ۱۳۹۶، ساعت ۱۴:۱۲
- services.AddDataProtection یعنی همان مقدمهی بحث؛ یا ذخیره سازی کلیدها در حافظه به صورت پیشفرض. مابقی بحث جهت دائمی کردن این کلیدها است. البته دائمی کردن هم طول عمری دارد.
- در سرورهای اشتراکی یا از روش «یک نکتهی تکمیلی: روش ذخیره سازی کلید موقتی تولید شده در بانک اطلاعاتی بجای حافظهی سرور » استفاده کنید، یا با هاست تماس بگیرید و تنظیم گزینهی 2 یا همان Load user profile به true را به آنها اعلام کنید (چون تنظیمات برنامههای ASP.NET Core با نگارشهای قبلی یکی نیست؛ این یک مورد را هم بهتر است به لیست تنظیمات اولیهی برنامه اضافه کنند).
- در حالت سوم، ذکر Certificate برای رمزنگاری اطلاعات ضروری است؛ در غیراینصورت این کلیدها به صورت معمولی و واضح ذخیره خواهند شد.
- در سرورهای اشتراکی یا از روش «یک نکتهی تکمیلی: روش ذخیره سازی کلید موقتی تولید شده در بانک اطلاعاتی بجای حافظهی سرور » استفاده کنید، یا با هاست تماس بگیرید و تنظیم گزینهی 2 یا همان Load user profile به true را به آنها اعلام کنید (چون تنظیمات برنامههای ASP.NET Core با نگارشهای قبلی یکی نیست؛ این یک مورد را هم بهتر است به لیست تنظیمات اولیهی برنامه اضافه کنند).
- در حالت سوم، ذکر Certificate برای رمزنگاری اطلاعات ضروری است؛ در غیراینصورت این کلیدها به صورت معمولی و واضح ذخیره خواهند شد.
۶ سال و ۶ ماه قبل، دوشنبه ۱۴ اسفند ۱۳۹۶، ساعت ۱۳:۳۸
در پروژهی DNTIdentity از این روش استفاده شدهاست. اگر برنامه را اجرا کنید و داخل متدهای کلاس DataProtectionKeyService آن break point قرار دهید، پس از آغاز اولیه برنامه، دیگر فراخوانی نمیشوند. بنابراین تاثیر منفی بر روی کارآیی برنامه ندارد.
۶ سال و ۶ ماه قبل، یکشنبه ۱۳ اسفند ۱۳۹۶، ساعت ۲۳:۳۷
این بررسی در حال اجرا بودن تایمر در یک Tab دیگر اضافه شد.
۶ سال و ۶ ماه قبل، یکشنبه ۱۳ اسفند ۱۳۹۶، ساعت ۱۵:۰۷
از این لحاظ تفاوتی با نگارش قبلی ندارد (اطلاعات بیشتر: «معرفی SignalR و ارتباطات بلادرنگ»):
this.Clients.Client(this.Context.ConnectionId).SendAsync("method", "message")
۶ سال و ۶ ماه قبل، شنبه ۱۲ اسفند ۱۳۹۶، ساعت ۱۸:۲۵
یک نکتهی تکمیلی جهت به روز رسانی این مطلب به ASP.NET Core 2.1
نکات «تغییرات مورد نیاز جهت ارتقاء به ASP.NET Core 2.1» در اینجا هم صادق هستند. سمت سرور آن یکی است. سمت کلاینت آن نیز به همین ترتیب. فقط پس از نصب بستهی جدید SignalR، نیاز است یک سطر زیر را نیز تغییر دهید:
از
به
نکات «تغییرات مورد نیاز جهت ارتقاء به ASP.NET Core 2.1» در اینجا هم صادق هستند. سمت سرور آن یکی است. سمت کلاینت آن نیز به همین ترتیب. فقط پس از نصب بستهی جدید SignalR، نیاز است یک سطر زیر را نیز تغییر دهید:
از
import { HubConnection } from "@aspnet/signalr-client";
import { HubConnection } from "@aspnet/signalr";
۶ سال و ۶ ماه قبل، شنبه ۱۲ اسفند ۱۳۹۶، ساعت ۱۷:۳۰
تغییرات مورد نیاز جهت ارتقاء به ASP.NET Core 2.1
تغییرات سمت سرور:
1) ابتدا فایل csproj فوق به صورت زیر تغییر میکند:
در اینجا چون از بستهی Microsoft.AspNetCore.App استفاده میشود، دیگر نیازی به ذکر مستقیم بستهی SignalR نیست و این بسته جزئی از آن است.
2) سپس در فایل Startup.cs، به ابتدای path باید یک / اضافه شود؛ وگرنه در زمان اجرا برنامه کرش میکند:
3) تمام متدهای InvokeAsync شدهاند SendAsync:
و
تغییرات سمت کلاینت:
1) نام بستهی signalr در npm به صورت ذیل تغییر کردهاست و دیگر signalr-client نیست:
2) پس از نصب بستهی جدید signalr، مسیر فایل signalr.min.js در فایل bundleconfig.json به صورت زیر تغییر میکند:
3) متد invoke به send تغییر نام یافتهاست:
تغییرات سمت سرور:
1) ابتدا فایل csproj فوق به صورت زیر تغییر میکند:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.0-preview1-final" /> </ItemGroup> <ItemGroup> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.1.0-preview1-final" /> <DotNetCliToolReference Include="BundlerMinifier.Core" Version="2.6.362" /> </ItemGroup> <Target Name="PrecompileScript" BeforeTargets="BeforeBuild"> <Exec Command="dotnet bundle" /> </Target> </Project>
2) سپس در فایل Startup.cs، به ابتدای path باید یک / اضافه شود؛ وگرنه در زمان اجرا برنامه کرش میکند:
app.UseSignalR(routes => { routes.MapHub<MessageHub>(path: "/message"); });
await _messageHubContext.Clients.All.SendAsync("broadcastMessage", message);
return Clients.All.SendAsync("broadcastMessage", message);
تغییرات سمت کلاینت:
1) نام بستهی signalr در npm به صورت ذیل تغییر کردهاست و دیگر signalr-client نیست:
npm install @aspnet/signalr
node_modules/@aspnet/signalr/dist/browser/signalr.min.js
connection.send('send', $('#message').val());