مخزن هایی با عنوان Awesome xyz را ممکن است در گیت هاب دیده باشید که برای زبانها و فریمورکهای مختلف ایجاد میکنند برای دات نت نیز چنین مخزنی موجود است اما این بار در سایت لینک شدهی خبر امکان جستجو کردن و .. فراهم شده است .
توضیحات بیشتر در اینجا
مخزن هایی با عنوان Awesome xyz را ممکن است در گیت هاب دیده باشید که برای زبانها و فریمورکهای مختلف ایجاد میکنند برای دات نت نیز چنین مخزنی موجود است اما این بار در سایت لینک شدهی خبر امکان جستجو کردن و .. فراهم شده است .
توضیحات بیشتر در اینجا
شرکت red-gate در زمینه دیتابیس و دات نت محصولات فراوان و مفیدی دارد که میتوانید در صفحه محصولاتش مشاهده کنید.
محصول لینک شده برای ساخت دادههای تستی و پر کردن دیتابیس ایجاد شده است.
ویژگی | WCF | ASMX |
حداقل پیشنیاز | دات نت سه | دات نت یک |
هدف | جایگزینی یکپارچهی فناورهای قبلی شامل ASMX ، WSE ، MSMQ ، COM+ Eenterprise services و .NET Remoting | ارائه وب سرویس |
پروتکلهای پشتیبانی شده | HTTP TCP Named pipes MSMQ Custom UDP | HTTP only |
پشتیبانی از WS-* standards | بلی | خیر |
پشتیبانی از اطلاعات بایناری | بلی | خیر |
پشتیبانی از REST | بلی | خیر |
میزبانهای مهیا | در هر نوع برنامهی تهیه شده با دات 3 به بعد قابل میزبانی است، مانند یک برنامه کنسول، یک سرویس ویندوز ان تی و غیره. به این لیست IIS را هم میتوان اضافه کرد. | فقط IIS |
سرعت | WCF Services نسبت به ASMX Web Services از 25 تا 50 درصد سریعتر هستند + و + | |
نحوهی پاسخ دهی به درخواستها (یا ایجاد یک وهله جدید) | Singleton / private session / per call | per-call |
پشتیبانی از تراکنشها (transaction) | پشتیبانی تو کار + | خیر |
امنیت | پشتیبانی تو کار + | خودتان باید فکری برای این موضوع نمائید. |
بسط پذیری | بلی + | خیر |
مدت زمان یادگیری | حداقل یک ماه | یک روز! |
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net7.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="BenchmarkDotNet" Version="0.13.4" /> </ItemGroup> </Project>
using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Jobs; namespace NET7Loops; [SimpleJob(RuntimeMoniker.Net60)] [SimpleJob(RuntimeMoniker.Net70)] [MemoryDiagnoser(false)] public class Benchmarks { private int[] ItemsArray; private List<int> ItemsList; [GlobalSetup] public void Setup() { var random = new Random(420); var randomItems = Enumerable.Range(0, 1000).Select(_ => random.Next()); ItemsArray = randomItems.ToArray(); ItemsList = randomItems.ToList(); } [Benchmark] public void For_Array() { for (var i = 0; i < ItemsArray.Length; i++) { var item = ItemsArray[i]; } } [Benchmark] public void For_List() { for (var i = 0; i < ItemsList.Count; i++) { var item = ItemsList[i]; } } [Benchmark] public void ForEach_Array() { foreach (var item in ItemsArray) { } } [Benchmark] public void ForEach_List() { foreach (var item in ItemsList) { } } }
using BenchmarkDotNet.Running; using NET7Loops; BenchmarkRunner.Run<Benchmarks>();
// Decompiled with JetBrains decompiler // Type: NET7Loops.Benchmarks // Assembly: NET7Loops, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null // MVID: E398BEE7-8123-4C55-AF9A-F7D83DDA73F1 // Assembly location: C:\Prog\1401\Net7Tests\NET7Loops\bin\Debug\net7.0\NET7Loops.dll // Compiler-generated code is shown using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Jobs; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; namespace NET7Loops { [NullableContext(1)] [Nullable(0)] [SimpleJob(RuntimeMoniker.Net60, -1, -1, -1, -1, null, false)] [SimpleJob(RuntimeMoniker.Net70, -1, -1, -1, -1, null, false)] [MemoryDiagnoser(false)] public class Benchmarks { private int[] ItemsArray; private List<int> ItemsList; [GlobalSetup] public void Setup() { Benchmarks.<>c__DisplayClass2_0 cDisplayClass20 = new Benchmarks.<>c__DisplayClass2_0(); cDisplayClass20.random = new Random(420); IEnumerable<int> source = Enumerable.Range(0, 1000).Select<int, int>(new Func<int, int>((object) cDisplayClass20, __methodptr(<Setup>b__0))); this.ItemsArray = source.ToArray<int>(); this.ItemsList = source.ToList<int>(); } [Benchmark(23, "C:\\Prog\\1401\\Net7Tests\\NET7Loops\\Benchmarks.cs")] public void For_Array() { for (int index = 0; index < this.ItemsArray.Length; ++index) { int items = this.ItemsArray[index]; } } [Benchmark(32, "C:\\Prog\\1401\\Net7Tests\\NET7Loops\\Benchmarks.cs")] public void For_List() { for (int index = 0; index < this.ItemsList.Count; ++index) { int items = this.ItemsList[index]; } } [Benchmark(41, "C:\\Prog\\1401\\Net7Tests\\NET7Loops\\Benchmarks.cs")] public void ForEach_Array() { int[] itemsArray = this.ItemsArray; for (int index = 0; index < itemsArray.Length; ++index) { int num = itemsArray[index]; } } [Benchmark(49, "C:\\Prog\\1401\\Net7Tests\\NET7Loops\\Benchmarks.cs")] public void ForEach_List() { List<int>.Enumerator enumerator = this.ItemsList.GetEnumerator(); try { while (enumerator.MoveNext()) { int current = enumerator.Current; } } finally { enumerator.Dispose(); } } public Benchmarks() { base..ctor(); } [CompilerGenerated] private sealed class <>c__DisplayClass2_0 { [Nullable(0)] public Random random; public <>c__DisplayClass2_0() { base..ctor(); } internal int <Setup>b__0(int _) { return this.random.Next(); } } } }
for (int index = 0; index < this.ItemsArray.Length; ++index) { int items = this.ItemsArray[index]; }
List<int>.Enumerator enumerator = this.ItemsList.GetEnumerator(); try { while (enumerator.MoveNext()) { int current = enumerator.Current; } } finally { enumerator.Dispose(); }
dotnet new worker
<Project Sdk="Microsoft.NET.Sdk.Worker"> <PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> <UserSecretsId>dotnet-MyWorkerServiceApp-B76DB08E-FFBB-4AD1-89B5-93BF483D1BD0</UserSecretsId> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Extensions.Hosting" Version="3.0.0-preview8.19405.4" /> </ItemGroup> </Project>
namespace MyWorkerServiceApp { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); } }
public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; public Worker(ILogger<Worker> logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); await Task.Delay(1000, stoppingToken); } } }
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureServices((hostContext, services) => { //services.AddHttpClient(); services.AddHostedService<Worker>(); });
cs create WorkerServiceDemo binPath=C:\Path\To\WorkerServiceDemo.exe
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSystemd() .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); });
namespace CS11Tests; public class StaticAbstractMembers { public static void Test() { var sum = AddAll(new[] { 1, 2, 3, 4 }); Console.WriteLine(sum); } private static int AddAll(int[] values) { int result = 0; foreach (var value in values) { result += value; } return result; } }
var sum = AddAll(new[] { 1, 2, 3, 4, 0.68 });
Argument 1: cannot convert from 'double[]' to 'int[]' [CS11Tests]csharp(CS1503)
private static T AddAll<T>(T[] values) { T result = 0; foreach (var value in values) { result += value; } return result; }
T result = T.Zero;
using System.Numerics; namespace CS11Tests; public class StaticAbstractMembers { public static void Test() { //var sum = AddAll(new[] { 1, 2, 3, 4 }); var sum = AddAll(new[] { 1, 2, 3, 4, 0.68 }); Console.WriteLine(sum); } private static T AddAll<T>(T[] values) where T : INumber<T> { T result = T.Zero; foreach (var value in values) { result += value; } return result; } }
abstract static TSelf One { get; } abstract static TSelf Zero { get; }
abstract static TResult operator +(TSelf left, TOther right);
public interface ISport { bool IsTeamSport(); } public class Swimming : ISport { public bool IsTeamSport() => false; } public class Football : ISport { public bool IsTeamSport() => true; }
public class StaticAbstractMembers { public static void Display<T>(T sport) where T : ISport { Console.WriteLine("Is Team Sport:" + sport.IsTeamSport()); } }
Display(new Football());
public interface ISport { static abstract bool IsTeamSport(); } public class Swimming : ISport { public static bool IsTeamSport() => false; } public class Football : ISport { public static bool IsTeamSport() => true; }
public class StaticAbstractMembers { public static void Display<T>() where T : ISport { Console.WriteLine("Is Team Sport:" + T.IsTeamSport()); } }
static void firstCompilation() { var tree = CSharpSyntaxTree.ParseText("class Foo { void Bar(int x) {} }"); var mscorlibReference = MetadataReference.CreateFromFile(typeof (object).Assembly.Location); var compilationOptions = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary); var comp = CSharpCompilation.Create("Demo") .AddSyntaxTrees(tree) .AddReferences(mscorlibReference) .WithOptions(compilationOptions); var res = comp.Emit("Demo.dll"); if (!res.Success) { foreach (var diagnostic in res.Diagnostics) { Console.WriteLine(diagnostic.GetMessage()); } } }
static void semanticQuestions() { var tree = CSharpSyntaxTree.ParseText(@" using System; class Foo { public static explicit operator DateTime(Foo f) { throw new NotImplementedException(); } void Bar(int x) { } }"); var mscorlib = MetadataReference.CreateFromFile(typeof (object).Assembly.Location); var options = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary); var comp = CSharpCompilation.Create("Demo").AddSyntaxTrees(tree).AddReferences(mscorlib).WithOptions(options); // var res = comp.Emit("Demo.dll"); // boxing var conv1 = comp.ClassifyConversion( comp.GetSpecialType(SpecialType.System_Int32), comp.GetSpecialType(SpecialType.System_Object) ); // unboxing var conv2 = comp.ClassifyConversion( comp.GetSpecialType(SpecialType.System_Object), comp.GetSpecialType(SpecialType.System_Int32) ); // explicit reference conversion var conv3 = comp.ClassifyConversion( comp.GetSpecialType(SpecialType.System_Object), comp.GetTypeByMetadataName("Foo") ); // explicit user-supplied conversion var conv4 = comp.ClassifyConversion( comp.GetTypeByMetadataName("Foo"), comp.GetSpecialType(SpecialType.System_DateTime) ); }