Sunday, November 20, 2022

Resilient HTTP client with Polly and Flurl

Having a resilient HTTP client is a huge benefit if your application depends on third-party API calls. This will helps to avoid transient errors. These errors may be temporary and will be solved quickly. Most of the time these errors occurred due to network issues. 

The below example demonstrates how to implement a HttpClient with multiple retries using Polly and Flurl. 

Polly is a .NET resilience and transient-fault-handling library that allows developers to express policies such as Retry, Circuit Breaker, Timeout, Bulkhead Isolation, Rate-limiting, and Fallback in a fluent and thread-safe manner.

Flurl is a modern, fluent, asynchronous, testable, portable, buzzword-laden URL builder and HTTP client library.

Creating the Retry Policy 

This IsWorthRetrying method will check returned HTTP status is worth of retry.

And I used  OnRetryAsyncFunc to log the retry information. 


Use the Retry Policy

Example usage and results

var result = await apiClient.GetAsync("https://httpstat.us/503").ConfigureAwait(false);
Console.WriteLine($"Hello, World! {result}");
 

Full implementation 

Sunday, November 6, 2022

Change PowerShell mode to FullLanguage mode from ConstrainedLanguage

You may face this issue if you are running under an enterprise laptop and your administrator put you into constrained mode.

If you want to run software like docker, then you need to use FullLanguage mode.

Use the below command to check your language mode.

$ExecutionContext.SessionState.LanguageMode

There are two ways to set it to FullLanguage mode.

1. Using the below command

$ExecutionContext.SessionState.LanguageMode = 'fulllanguage'

2. Edit your registry __PSLockdownPolicy value to 8.

HKLM\System\CurrentControlSet\Control\SESSION MANAGER\Environment\__PSLockdownPolicy

Friday, December 31, 2021

Configure HttpClient to consume windows authenticated NTLM service in ASP.NET Core

Recently I migrated a system to Linux based docker platform from IIS environment. I had a service call to some other API that has NTLM authentication.

That was working fine by just setting Credentials to HttpClient when hosted in IIS. 

But when you run dotnet app in Linux you do not have that windows authentication fancy feature. 

Below is how I managed to configure HttpClient with NTLM Authentication using CredentialCache.


Monday, May 24, 2021

How to update only one field using EF Core?

This method is useful When you are trying to update some record in the table while you are not tracking that entity. 

If you are using tracking then EF is smart enough to update only certain fields. 

Below is the code.


Wednesday, January 27, 2021

Fix Openshift build pod was killed due to an out of memory condition

I was doing a large build using oc build command in Openshift dedicated cluster. This build has many steps in Dockefile and it fails somewhere in copying blobs. Error was "The build pod was killed due to an out-of-memory condition.". 

I found two solutions for this. 

1. Increase build pod resources.
resources: 
 requests: 
   cpu: "100m" 
   memory: "1024Mi" 

2. Build locally using docker build and push the image to the image stream.

- Build locally
docker build -t myapi 

- Tag build
docker tag myapi default-route-openshift-image-registry.apps.ca-central-1.starter.openshift-online.com/apis/myapi

- Login to an openshift registry
docker login default-route-openshift-image-registry.apps.ca-central-1.starter.openshift-online.com -u $(oc whoami) -p $(oc whoami -t)

- Push the image to the registry
docker push default-route-openshift-image-registry.apps.ca-central-1.starter.openshift-online.com/apis/myapi

Thursday, December 31, 2020

Run Docker With Visual Studio in Corporate Machine with VPN or Firewall

I was trying to run some API using docker with visual studio docker tools. 

Idea behind that is I will able to attach docker process to visual studio and do some tweaks very easily using visual studio docker tools. (Haha I am lazy).

But unfortunately, my company laptop is heavily protected with no Administrator, a bunch of security tools, and a VPN also. 

Some errors I got with various tries.

Debugger path 'C:\User\...\vs2017u5' for DockerFile is invalid. 

One or more errors occurred.

Failed to launch debug adapter. Additional information may be avaliable in the output window.

Building the project is successful but errors out on launch.

The program '' has exited with code -1 (0xffffffff).

\vsdbg\vs2017u5' for Dockerfile.... Container.targets Dockerfile is invalid

In order to work this normally, there is a power shell script provided by Microsoft to download software, .NET Core Debugger from Microsoft, aka vsdbg.

https://aka.ms/getvsdbgsh

This will download a zip file and will be created in the below directory with debugger files. 

C:\Users\Chathuranga\vsdbg\vs2017u5.


With the firewall and VPN, my laptop couldn't be able to do this in a proper way. 


Time to read what is inside of getvsdbg.sh.


You will find a method like this download_and_extract()

This method constructs the download URL.


url="https://vsdebugger.azureedge.net/vsdbg-${target}/${vsdbgCompressedFile}"


Time to determine parameters.


Check this method in SH file, 


set_vsdbg_version

        latest)

            __VsDbgVersion=16.8.11013.1

            ;;

        vs2019)

            __VsDbgVersion=16.8.11013.1

            ;;

        vsfm-8)

            __VsDbgVersion=16.8.11013.1

            ;;

        vs2017u5)

            __VsDbgVersion=16.8.11013.1

            ;;

        vs2017u1)

            __VsDbgVersion="15.1.10630.1"


Decide what is the version you want from this. 


I selected 16.8.11013.1 because I have vs 2109 16.8.3


Next, decide which vsdbg configuration you want. 

ex: debian.8-x64, linux-musl-x64, linux-x64.


In this case, I selected linux-x64, the reason is I wanted to debug. 

If you just want to run then select linux-musl-x64, it is the runtime


The final URL will be like below

https://vsdebugger.azureedge.net/vsdbg-16-8-11013-1/vsdbg-linux-x64.zip


Download this and extract it to C:\Users\XXX\vsdbg\vs2017u5.

Create vsdbg folder if it does not exist. and keep in mind that do not extract to a subfolder.


Ok, that is it. Enjoy debugging.

Tuesday, December 8, 2020

How to build .NETCORE app using docker and get output

Below is the docker file that I am going to use for build. Then using below shell file, you can build and take out .dlls. how to run it $./dockerBuild.sh

Friday, November 6, 2020

Get SSL certificate using .NET Core and .NET

You can achieve this using HttpClientHandler Class and HttpClientHandler.ServerCertificateCustomValidationCallback Property. Sample code: Please add a reference to System.Security

Saturday, February 22, 2020

Dynamic dependency injection .NET Core WebAPI

It is being a long time after my last blog post here. I already moved to .NET Core from .NET Framework almost two years ago. And I must say it has been made my life easier. Well I can say I am intrigued with in build dependency injection. Recently I got a requirement that needs two different implementations for single interface.

Classes : ProcessExcelFiles.cs
               ProcessCsvFiles.cs

Interface : IFileUploadContentProcess.cs

Purpose of this two classes are process uploaded xlsx file or csv file.

First register class files as your desired way.

Then use a lambda function to parameterize interfaces to implementation register.

How to use:

Wednesday, January 14, 2015

Consume wcf service with wsHttpBinding using PHP Soap Client

Recently I wrote blog post on accessing wcf using php. But that was with basicHttpBinding. Somehow after long research I found how to consume wcf with wsHttpBinding. Follow the codes,







Tuesday, January 13, 2015

How to move WordPress from local server to live site

Many of us develop wordpress sites using local server in order to speed up the development process. Issue comes with moving website to live host. Even we configured MySql and wp-config.php files correctly we can see some broken links. Here I list down steps you need to host in a live environment.

Step 1 : Configure the Mysql


Log in to cpanel and create a database, add user and assign user to database





Step 2 : Change the wp-config.php file



Step 3 : Upload sql and files to live host


You can upload website files using ftp client or directly using cpanel file manager.

Upload sql


You need to log to phpmyadmin (localhost/phpmyadmin) in your local server and export database to .sql file



Open .sql using text editor and change the following changes according to your database name



Open your live phpmyadmin and import the .sql file



Step 4: Fix links


Run below sql queries according to your domain names




Everything should work now. Happy Wordpressing :)

Tuesday, July 15, 2014

Call WCF service using PHP

I have a WCF service used by a .net application. Due to some library issues I have to change .net application in to PHP language. Rather than creating a new web service, there is a simple way of accessing WCF using PHP. But there are few concerns. You cannot use WSHttpBinding with PHP. I have to change my bindings in to basicHttpBinding because PHP soap protocols are notsupporting wshttpbindings. 


Tuesday, March 25, 2014

Elliptic Curve Cryptography

Elliptic Curve Cryptography was proposed by Niel Koblitz and Victor Miller in 1985. This is based on algebraic of elliptic curves over finite fields and provided public key infrastructure to end user and it is considered as strong public key cryptosystem comparing with other algorithms like RSA. RSA is based on Integer Factorization Problem which means it is impossible or very difficult to find factor of very large prime numbers and that is an assumption. While ECC is based on elliptic curve discrete logarithm problem which means it is infeasible to determine discrete logarithm of point with multiplier in elliptic curve based on finite fields. Because of ECDLP feature elliptic curve cryptography can provide same security with small key size with related to other algorithms which can result speed computation with low memory, lower network bandwidth and lower power.  Most valuable feature in ECC is that it has highest strength per bit with related to other well-known cryptosystems. Therefore it is considered as high secure cryptosystem suitable for mobile devices.

The mathematical formula of ECC over the elliptic curve is
Y2 = X3 + aX + b

Where x, y, a and b are real numbers and with the condition
4a3 + 27b2 ≠ 0

By changing the values of ‘a’ and ‘b’ different elliptic curves can be generated. All the points which satisfy the above equation lie on the elliptic curve. Private Key is generated by random number generations while public key is obtained by multiplying the private key with a constant base point G (Scalar multiplication) in the curve. Public key is obtained as a point in this curve. ECC biggest advantage is its small key size, a 160 bit key size of ECC is equivalent in security to 1024 bit key size of RSA.

Implementation.

Tuesday, March 11, 2014

Clone objects C#

Cloning is a matter between copy object and copy its references. There are two types of cloning, deep clone and shallow clone. If you copy only references it’ll call shallow copy. If you copy referenced objects it’ll call deep copy.
Shallow copy:

Deep copy:
There are two ways of doing this.
1. Use the copy constructor (a good practice)
2. Using ICloneable interface
Manual way Using memberwiseclone

Tuesday, December 31, 2013

RSA Digital Signature C#

Using .net libraries we can easily implement RSA digital signature scheme. I wrote this blog post to explain how RSA digital signature algorithm works.

Here I get private and public key pair out of rsa object for more understandability of the code.

//Get rsaKeys

The following method will explain how to sign a message. You need to provide a private key and a message need to be signed. This method will be returned signed message.

//Sign message

Next step is verify the message that you signed using your private key. You need to pass original message, signed message and public key to method. This method will be returned boolean value verified or not.

//Verify message

To this point we are done with methods we need to sign and verify. Lets see how to use them. I wrote it in main method.

//RSA main


Tuesday, August 13, 2013

How to create your own ssl certificate

Developers have to use Digital Certificates very often. We can use self signed certificates to our development process rather than buying certificates from certificate authorities.

There are few simple steps to create our own certificates using visual studio.

Step 1

Open visual studio command prompt as administrator. You can get cmd as administrator by right click on short cut exists in visual studio tools and select run as administrator. (Not native windows command prompt)

Step 2:

Change the directory to where you want to create certificates. And type following command.



  • -sv yourprivatekeyfile.pvk is the name of the file containing the private key.
  • -n "cert name" is the name that will appear on the certificate (and in the certificate store).
  • yourcertfile.cer is the name of the certificate file.
  • -b mm/dd/yyyy is the date when the certificate becomes valid.
  • -e mm/dd/yyyy is the date when the certificate expires.
  • -r indicates that this will be a self-signed certificate.


Step 3:

Then you'll be prompted to enter the password for private key.


Step 4:

After you enter password you'll be prompted to enter password for sign certificate.


Step 5: 

This is the final step. Enter following command in cmd


Then it'll be prompted to enter private key password. Enter password and that's it.


  • -pvk yourprivatekeyfile.pvk is the private key file that you created
  • -spc yourcertfile.cer is the certificate file you created
  • -pfx yourpfxfile.pfx is the name of the .pfx file that will be created
You can see your certificates in hard disk






Sunday, May 5, 2013

Use Xgraph with NS2

XGRAPH is a general purpose x-y data plotter with interactive buttons for panning, zooming, printing, and selecting display options. It will plot data from any number of files on the same graph and can handle unlimited data-set sizes and any number of data files.

How to Install:
This example goes with two previous posts:
1. NS2 UDP Example
2. NS2 TCP Example

You will need both source code to plot ns2 simulations in this example.

Additionally we have to use these perl scripts to extract data from output trace generated from NS2.

I have written a shell script to do our job quickly.

Sample out put:
 



NS2 UDP Example

Previously I wrote a blog post about TCP example using NS2. In this post I am posting source code for UDP Example with NS2.

Source code:
Please follow the instruction mentioned in previous post to get output.

Sample screen of output:


Related posts:
http://beyondtechs.blogspot.com/2013/05/ns2-tcp-example.html

NS2 TCP Example

NS2 is a free but a powerful simulator. It is capable to simulate most of complex scenarios in wired and wireless networks.

How to install:
Get your teminal and type this
Then you'll need NAM

Source code:
How to run:
You may need to create outtcp.nam file in source code directory.

Sample screen of out put.



Related post:

http://beyondtechs.blogspot.com/2013/05/ns2-udp-example.html

Wednesday, March 6, 2013

Convert object into DataTable C#

Recently I got a requirement in a project to convert own type of object to DataTable. Here I am sharing my code with you.

Steps

1. Create datatable and give a name
2. Create Column Names
3. Create a Data Row
4. Add Data in to DataRow
5. Add DataRow to DataTable
Thats it...
Here some Extended Method to how to use this method
https://github.com/cbjpdev/DataTableX