Please ensure Javascript is enabled for purposes of website accessibility
Powered by Zoomin Software. For more details please contactZoomin

AVEVA Enterprise SCADA

Add assertion extensions for arbitrated services

  • Last UpdatedApr 24, 2025
  • 2 minute read

You can configure Arbitrated services to run assertion logic using extension libraries. The extensions run before a service asserts Hot.

To add a custom service plugin for an Arbitrated service

  1. Create a new custom plugin library, and place it in the following directory:

    %DNADataRoot%\<Service>\bin

    Where:

    <Service> = The silo name for the Arbitrated service (for example, RealTime, Historical).

    For managed code plugins, the class(es) in the library must implement the IServicePlugin interface located in the following directory:

    %DNAInstallRoot%\<Service>\bin\OASySDNA.Common.ServiceAssertion.dll

    The IService Plugin interface is defined as follows:

    /// <summary>

    /// Each assertion plug-in must implement this interface in order to be discoverable by the arbitration monitor.

    /// This interface will identify a class as an assertion plug-in with the the logic required for a service to

    /// assert hot. Each plug-in implementing this interface must also support an empty constructor.

    /// </summary>

    public interface IServicePlugin

    {

    /// <summary>

    /// The file name of the plugin assembly.

    /// </summary>

    String AssemblyName { get; }

    /// <summary>

    /// Executes the pre-assert or assert logic required for the service to go hot.

    /// </summary>

    Boolean Execute();

    }

    For native code plugins, the library must expose an Execute function structured like the following:

    extern “C” OAS_EXPORT bool Execute()

    {

    // Put plugin logic here

    }

    Sample plugin templates can be found in the SDK examples located under %DNAInstallRoot%\Common\sdk\Examples\source\ServicePlugin.Examples.sln.

  2. In the %DNADataRoot%\<Service>\config\Settings directory, create a JSON file with the following structure.

    Note: This structure specifies your extension file. You can add multiple extensions in the same file.

    {

    "Realtime": {

    "Extensions": {

    "ServiceAssertion": {

    "AssertionPluginSample1.dll": true,

    "AssertionPluginSample2.dll": true

    }

    }

    }

    }

The system executes plugins in the same order in which they appear in the file. Adding the extension under ServiceAssertion will cause it to run any time the service asserts Hot, including during a failover.

Related Links