I noticed that some of the functions in your system are not IRIS built-in function but, evidently, are custom functions implemented in your system, as documented here.

To search and find the class and code that implement this functions you may search classes that extends the Ens.Rule.FunctionSet class using the class reference in your system/server, not in the documentation website.

I'd implement a custom datatype, something like:

Class Community.dt.IntJSON Extends %Integer
{

Parameter JSONTYPE = "string";
ClassMethod JSONToLogical(%val As %String) As %Integer [ CodeMode = expression, ServerOnly = 1 ]
{
..DisplayToLogical(%val)
}

ClassMethod LogicalToJSON(%val As %Integer) As %String [ CodeMode = expression, ServerOnly = 1 ]
{
..LogicalToDisplay(%val)
}

}

Then in your class:

Class Community.json.TestDT Extends (%RegisteredObject, %JSON.Adaptor)
{

Property something As Community.dt.IntJSON(DISPLAYLIST = ",OK,Error,Warning", VALUELIST = ",0,1,2") [ InitialExpression = 0 ];

ClassMethod RunMe()
{
      set obj = ..%New()
      set obj.something = 2
      do obj.%JSONExportToString(.string)
      write "JSON : " _ string,!

      write "Content  : " _ ..somethingLogicalToDisplay(obj.something),!!

      set obj2=..%New()
      do obj2.%JSONImport(string)
      write "Imported something value: ",obj2.something,!
}

}

Result:

EPTEST>d ##class(Community.json.TestDT).RunMe()
JSON : {"something":"Warning"}
Content  : Warning
 
Imported something value: 2

I manage systems that use IIS since more than 15 years and never experienced performance issues.

For a code that takes 15ms having service/call that takes 40ms total round trip to me is way too much (that's 25ms overhead !!).
We have SOAP services that respond in 10ms (local subnet, round trip measured from the caller/client).

I don't recall any special configuration in IIS.

What's the configuration of the Web/CSP Gateway?

Just guessing, please check this documentation:

About Creating a Custom CSP Login Page

And in particular the first step:

Ensure that the Web Gateway user (CSPSystem) has permissions to read the database for where the custom login page is located. Assign the desired database resource to an appropriate role, and then assign that role to the CSPSystem user.

I suspect that's too small, but there are MANY missing details to consider and I might be wrong.

gmheap documentation is here.

Note that for new installation the value is 0 (zero), in that case:

the system will configure the size of gmheap to be 3% of the total memory configured for global buffers. The minimum gmheap will be configured to is 307,200 KB (300 MB) and the maximum is 2,097,000 KB (2 GB)

So, your gmheap is about 1/3 of current default.

It's long time I don't install Ensemble 2018, why are you still using Ensemble and not IRIS?

I just tested installing Ensemble 2018 and CSP Gateway is properly installed and configured.

When the setup kit is run the first dialog is:

Do you get the same dialog? What option you choose?
As you can see it is also possible to install only the CSP Gateway component.

If you choose Custom then this dialog is displayed:

As you can see the option to install CSP Gateway for IIS is there.

If I proceed to the install, at the end I have the CSP Gateway properly configured in C:\inetpub\CSPGateway

In order to help you, apart from saying that is not being installed, can you provide some information on what you are actually doing and what do you actually see/get during install?