Module API Proxy

What is the ModuleApiProxy?

The ModuleApiProxy has been created to allow Noah Modules utilizing .NET 6 or later to connect to Noah 4.
The current ModuleAPI which is implemented using the Full .NET Framework (version 4.6) relies upon technologies that have been deprecated in .NET 6 and later.
To mitigate this HIMSA is providing the ModuleApiProxy which will host the Noah 4 ModuleApi in a process separate from the .NET 6 module and allow the module to interact with the Noah 4 ModuleApi via the ModuleApiProxyLib.
See diagram below:

Legend:

Green = Shared library (provided by Himsa)

Yellow = REST-based Proxy for IMC and Module API (PIMA) (provided by Himsa)

Blue = Module (provided by Module Developer)

Orange = Noah Client (Part of Noah 4 and Noah ES) (provided by Himsa)

Who should consider using the ModuleApiProxy?

Anyone who plans to use .NET 6 or later for their development of Noah 4 modules.

Which Noah 4 versions are supported by the ModuleApiProxy?

Noah 4.9 and later are supported by the ModuleApiProxy.

Which Windows versions are supported by the ModuleApiProxy?

  • Windows 10, Version 1607 and later

  • Windows Server 2019 or later

What is the performance impact of using the ModuleApiProxy compared to modules using the ModuleApi directly?

The general performance overhead appears to be just a few percent of the total request time.

 

Please observe!!

When porting modules utilizing the Noah 4 ModuleApi to a .NET 6 module using the ModuleApiProxy there are some differences to be aware of.
This mostly applies when updating and retrieving actions but events and callbacks are also handled differently.
See: Differences in usage of the ModuleAPI Proxy vs the traditional moduleAPI

Available samples and source code (SDK)

The binaries for the ModuleApiProxyLib and SharedLib libraries and .NET 6 module sample source code is available here:
https://www.himsa.com/members-2/noah-4-module-development/noah-module-development-with-net-6-and-later/ (log-in required)

 

Module Development

When developing a new .NET 6 module for Noah 4 you will need to reference a few files required when developing a .NET 6 module utilizing the ModuleApiProxy.

Steps involved to develop a .NET 6 module that utilizes the ModuleApiProxy

  1. Reference the following files in your .NET module project (available from the ModuleApiProxy SDK see here:

https://www.himsa.com/members-2/noah-4-module-development/noah-module-development-with-net-6-and-later/)

  • ModuleApiProxyLib.dll (the library is the API client to access the REST API provided by the ModuleApiProxy )

  • ModuleApiProxyLib.dll.xml (this xml file contains XML documentation comments which provides additional information for Visual Studio intellisense)

  • SharedLib.dll (this library contains common functionality, types and definitions required to utilize the ModuleProxyApi)

  • SharedLib.dll.xml (this xml file contains XML documentation comments which provides additional information for Visual Studio intellisense)

  1. Ensure that the following files are copied to the output folder of your .NET module project (available from the ModuleApiProxy SDK see here:

https://www.himsa.com/members-2/noah-4-module-development/noah-module-development-with-net-6-and-later/)

  • ModuleApiProxyLib.dll (the library is the API client to access the REST API provided by the ModuleApiProxy )

  • SharedLib.dll (this library contains common functionality, types and definitions required to utilize the ModuleProxyApi)

  • ModuleApiProxy.exe (this is the Proxy process which has a REST API that the ModuleApiProxyLib connects to when interacting with Noah 4 moduleApi)

  • ModuleApiProxy.Config.json (Do NOT edit this file - this file specifies the default port range which is 5025 to 5050. This port range is used when the ModuleProxyLib library connect to the ModuleApiProxy)

 

Module Deployment

When deploying a .NET 6 module using the ModuleApiProxy to a computer with Noah 4 the following files must be deployed.
The files in the ModuleApiProxy are self-contained and do not depend upon the .NET Runtime, however the .NET 6 module utilizing the ModuleApiProxy will have to install the appropriate .NET Runtime upon which it depends.
The .NET 6 Runtimes can be downloaded from here: Download .NET

Required steps when deploying a .NET 6 module using the ModuleApiProxy

In addition to all the .NET 6 modules files the following files, (which are ModuleApiProxy dependencies), must be added to the modules deployment folder as part of the installation process.
All Module Api Proxy files deployed to the .NET 6 modules folder (SharedLib.dll, ModuleApiProxyLib.dll, ModuleApiProxy.exe, ModuleApiProxy.Config.json) can be removed when the module is uninstalled.

Install ModuleApiService by running the Setup.exe (available from the ModuleApiProxy SDK).
The setup.exe will install the 'ModuleApiService' which creates and updates the certificate used for the https communication between ModuleApiProxyLib and ModuleApiProxy.
This file can be installed without user interaction using this command line:
setup.exe /v"/qb"
The ModuleApiService must be installed before the ModuleApiProxy can be used.

The ModuleApiService should never be uninstalled when a PIMA module is uninstalled as this service is shared by all PIMA modules on the computer

 

 

Using PIMA version 1.0.0 and 1.0.1 of the ModuleApiProxy the component must be deployed like this:
(In the table below the files in cells with green background are provided by HIMSA)

.NET 6 Module Deployment files

Deployment Folders

.NET 6 Module Deployment files

Deployment Folders

MyDotNet6Module.exe
“Other Module related files“

..\MyModuleFolder\

SharedLib.dll
ModuleApiProxyLib.dll
ModuleApiProxy.exe
ModuleApiProxy.Config.json

..\MyModuleFolder\

Starting with version 1.0.3 of the ModuleApiProxy the component must be deployed like this:
(In the table below the files in cells with green background are provided by HIMSA)

.NET 6 Module Deployment files

Deployment Folders

.NET 6 Module Deployment files

Deployment Folders

MyDotNet6Module.exe
“Other Module related files“

..\MyModuleFolder\

ModuleApiProxyLib.dll
SharedLib.dll

..\MyModuleFolder\

ModuleApiProxy.Config.json
ModuleApiProxy.exe

..\MyModuleFolder\.proxy

Â