Tag: .net Core
-
Work with Google Integrity verdicts on .NET C#
There are no clear examples of how an Attestation statement can be verified on C# locally.
Spent sometime to get it working.
…var decryptionKey = Convert.FromBase64String("<DECRYPTION KEY"); var verificationKey = Convert.FromBase64String("<VERIFICATION KEY"); var signedAttestationStatement = "<ATTESTATION STATEMENT"; var ecDsa = ECDsa.Create(); ecDsa.ImportSubjectPublicKeyInfo(new ReadOnlySpan<byte(verificationKey), out _); var decrypted = Jose.JWT.Decode(signedAttestationStatement, decryptionKey); var payload = Jose.JWT.Decode(decrypted, ecDsa);
-
Protobuf-net Generics on Unity3D IL2CPP.
When using Protobuf-net in Unity3D, if your Proto-Contracts include generics you might run into a few issues like Unable to resolve MapDecorator constructor.
I had to work with the following contract. It was s custom collection class which had a functionality of caching removed elements in the collection.
…[ProtoContract] public class CustomCollectionBase<TCollection, TElement, TKey{ [ProtoMember(1)] protected TCollection _collection; [ProtoMember(2)] protected SortedDictionary<TKey, bool_removed; public CustomCollectionBase(TCollection collection) { _collection = collection; } } [ProtoContract] public class CustomList<TElement: CustomCollectionBase<List<TElement, TElement, int{ public CustomList() : base( new List<TElement()) { } } [ProtoContract] public class CustomIntDictionary<TElement: CustomCollectionBase<Dictionary<int,
-
JSON vs Protobuf
I did a few tests to compare the data payload sizes of different serialization methods on .NET client server communications.
The test was basically to execute a request/response 20 times.
Request
[Serializable] [ProtoContract] public class GetRatingRequest { [ProtoMember(1)] public int Rating; [ProtoMember(2)] public int Count; [ProtoMember(3)] public float A; [ProtoMember(4)] public float B; [ProtoMember(5)] public float C; [ProtoMember(6)] public float D; [ProtoMember(7)] public float E; }
Response
…[Serializable] [ProtoContract] public class GetRatingResponse { [ProtoMember(1)] public List<RatingRatings; } [Serializable] [ProtoContract] public class Rating { [ProtoMember(1)] public bool HighRating { get; set; } [ProtoMember(2)] public RatingDetail Details { get; set; }
-
Redis .net Tips and Tricks.
- Create a Singleton of the Redis connection multiplexer and use it everywhere.
- When establishing the connection to the Redis cluster, use a lock on to ensure that multiple threads don’t create the connection concurrently.
- Under load of you see that Redis is timing out set ThreadPool.SetMinThreads(…) to around 250 depending on your application. More here – https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadpool.setminthreads?view=netcore-2.0#System_Threading_ThreadPool_SetMinThreads_System_Int32_System_Int32_
- If you are executing Lua scripts, ensure that they are performing well using the Redis slow.
- If you are running a Redis cluster, ensure that the BGSAVE of each node in the cluster runs at different times. If they run at once, there
-
C# Dynamic Object Creation Performance
Recently I had to task to create a dynamic object creation factory in C#. So I thought I test all the options I have to check what performs best.
I also wanted to check the performance implications these options have with the number of parameters in the constructor.
The Options
- new T() – Using the new/constructor method to
instantiate objects - Activator.CreateInstance(typeof(T)) – Using the Activator class to instantiate objects
- ConstructorInfo.Invoke() – Using the constructor info reflection class to instantiate objects
- Func<T>() – Using compiled lambda expressions to instantiate objects
The Test
I ran some tests to see calculate how each …
- new T() – Using the new/constructor method to
-
C# .net Core MapRoute Not Working?
Recently I faced a challenge while trying to programatically register routes on a .net core MVC application. The following was my code.
app.UseMvc(routeBuilder =
{
routeBuilder.MapRoute(
name: "example-route",
template: "example",
defaults: new { controller = "ExampleController", action = "ExampleAction" }
);
});Once the route was registered, I tried navigating to it and I kept getting a 404. Was breaking my head as to why this was happening. Finally found the issue.
The controller name cannot have the post-fix Controller, the following change made the trick.
app.UseMvc(routeBuilder =
…
{
routeBuilder.MapRoute(
name: "example-route",
template: "example",
defaults: new { controller = "Example