OPC UA Application URI Derivation: Difference between revisions

From OPC Labs Knowledge Base
No edit summary
 
(17 intermediate revisions by the same user not shown)
Line 1: Line 1:
= Introduction =
Every OPC UA application (client or server) needs an application URI, which uniquely identifies the application instance in the system.
Every OPC UA application (client or server) needs an application URI, which uniquely identifies the application instance in the system.


Line 4: Line 5:
# If the application manifest contains a non-empty {{Style=Identifier|ApplicationUriString}} property, it will be used as the application URI.
# If the application manifest contains a non-empty {{Style=Identifier|ApplicationUriString}} property, it will be used as the application URI.
# Otherwise, the application URI is automatically generated, using a template string from the {{Style=Identifier|ApplicationUriTemplateString}} property in the application parameters.
# Otherwise, the application URI is automatically generated, using a template string from the {{Style=Identifier|ApplicationUriTemplateString}} property in the application parameters.
= Template string syntax =


The application URI template string consists of characters that are copied literally to the output string, and macros, which are replaced by values provided by QuickOPC.  
The application URI template string consists of characters that are copied literally to the output string, and macros, which are replaced by values provided by QuickOPC.  
Line 13: Line 16:
! Category !! Name !! Description
! Category !! Name !! Description
|-
|-
|rowspan="4"| Common || HostName || Host name of the local computer.
|rowspan="5"| Common || CanonicalizedHostName || Canonicalized (lowercased) host name of the local computer.
|-
| HostName || Host name of the local computer.
|-
|-
| ModuleName || Name of the main module for the current process.
| ModuleName || Name of the main module for the current process.
|-
|-
| ProcessId || Numeric Id of the current process.<ref>Normally not used, as it is not stable enough for the intended purpose.</ref>
| ProcessId || Numeric Id of the current process.<ref>Normally not used, as it is not stable enough for the most purposes. Intended for "transient" OPC UA applications.</ref>
|-
|-
| ProcessName || The name of the current process.
| ProcessName || The name of the current process.
|-
|-
|rowspan="6"| Application Assembly || SimpleName || Simple name of the application assembly.
|rowspan="7"| Application Assembly || SimpleName || Simple name of the application assembly.
|-
|-
| Version || Version number of the application assembly.
| Version || Version number of the application assembly.
|-
| VersionMajor || Major version part of the Version.
|-
|-
| Culture || Supported culture of the application assembly.
| Culture || Supported culture of the application assembly.
Line 31: Line 38:
| AssemblyName || Display name of the application assembly (such as "ExampleAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null").
| AssemblyName || Display name of the application assembly (such as "ExampleAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null").
|-
|-
| AssemblyTokens || A combination of SimpleName, Version, Culture and PublicKeyToken, separated by colons. The trailing tokens are left out together with the colons that precede them, if they are at default values ("0.0.0.0" for the Version, "neutral" for the Culture, and "null" for the PublicKeyToken).
| AssemblyTokens || A combination of SimpleName, VersionMajor, and Culture, separated by colons. The trailing tokens are left out together with the colons that precede them, if they are at default values ("0" for the VersionMajor, and "neutral" for the Culture).
|-
|-
|rowspan="7"| Application Version Info || CompanyName || Name of the company from the application version info.
|rowspan="9"| Application Version Info || CompanyName || Name of the company from the application version info.
|-
| FileDescription || Description of the file, from the application version info.
|-
|-
| FileVersion || File version number from the application version info.
| FileVersion || File version number from the application version info.
|-
| FileVersionMajor || Major version part of the FileVersion.
|-
|-
| Language || Default language string from the application version info.
| Language || Default language string from the application version info.
Line 45: Line 56:
| ShortFileVersion || The part of FileVersion before the first space character (' ').
| ShortFileVersion || The part of FileVersion before the first space character (' ').
|-
|-
| VersionInfoTokens || A combination of NameToken, ShortFileVersion and Language, separated by colons. The trailing tokens are left out together with the colons that precede them, if they are at default values ("0.0.0.0" for the ShortFileVersion, and "Language Neutral" for the Language).
| VersionInfoTokens || A combination of NameToken, FileVersionMajor and Language, separated by colons. The trailing tokens are left out together with the colons that precede them, if they are at default values ("0" for the FileVersionMajor, and "Language Neutral" for the Language).
|}
|}


The information in the "Application Assembly" and "Application Version Info" categories may not always be available - it depends on factors such as the type of application and the hosting process. For this reason, the template string can have one or more sections, separated by a semicolon (';'). If three or more sections are present, they are interpreted like this:
The information in the "Application Assembly" and "Application Version Info" categories may not always be available - it depends on factors such as the type of application and the hosting process. For this reason, the template string can have one or more sections, separated by a semicolon (';'). If three or more sections are present, they are interpreted like this:


* If the application version info is available, the last section from the end is used.
* If the application assembly information is available, the last section from the end is used.
* Otherwise, if the application assembly information is available, the second section from the end is used.
* Otherwise, if the application version info is available, the second section from the end is used.
* Otherwise, the third section from the end is used.
* Otherwise, the third section from the end is used.


If there are fewer sections, the first section that would be to the right of the position indicated by the above rules is used. This algorithm also means that you can use just one section, and this section will then always be used.
If there are fewer sections, the first available section that would be to the right of the position indicated by the above rules is used. This algorithm also means that you can use just one section, and this section will then always be used.
 
= Template string defaults =
 
The default application URI template string (in [[What's new in OPC Studio 2024.2|OPC Studio 2024.2]] and newer) is as follows:
<pre>
http://$(CanonicalizedHostName)/$(ModuleName);http://$(CanonicalizedHostName)/$(VersionInfoTokens);http://$(CanonicalizedHostName)/$(AssemblyTokens)
</pre>
The "http" scheme was chosen because OPC Foundation LDS (Local Discovery Server) only accepts registrations from servers whose application URI starts with "urn:" or "http://", and there is currently no way to generate technically correct [https://en.wikipedia.org/wiki/Uniform_Resource_Name Uniform Resource Names] for OPC UA applications, because no suitable freely usable NID (namespace identifier) has been registered with IANA. In spite of this fact, the "urn" scheme appears to be quite common among the OPC UA implementations, and host name is used in place of the namespace identifier.


The default application URI template string (in QuickOPC 2023.1) is as follows:
The default application URI template string (in QuickOPC 2023.1 - 2024.1) was as follows:
<pre>
<pre>
  uri:$(HostName):$(ModuleName);uri:$(HostName):$(VersionInfoTokens);uri:$(HostName):$(AssemblyTokens)
  uri:$(HostName):$(ModuleName);uri:$(HostName):$(VersionInfoTokens);uri:$(HostName):$(AssemblyTokens)
</pre>
</pre>

Latest revision as of 10:32, 18 June 2024

Introduction

Every OPC UA application (client or server) needs an application URI, which uniquely identifies the application instance in the system.

Applications based on QuickOPC determine their application URI in the following way:

  1. If the application manifest contains a non-empty ApplicationUriString property, it will be used as the application URI.
  2. Otherwise, the application URI is automatically generated, using a template string from the ApplicationUriTemplateString property in the application parameters.

Template string syntax

The application URI template string consists of characters that are copied literally to the output string, and macros, which are replaced by values provided by QuickOPC. When the macro is expanded, it is URL-escaped before it is inserted into the output string, so that a correct URI can be formed. Macro replacements have the syntax $(name), where name is one of the names defined in the following table.

Category Name Description
Common CanonicalizedHostName Canonicalized (lowercased) host name of the local computer.
HostName Host name of the local computer.
ModuleName Name of the main module for the current process.
ProcessId Numeric Id of the current process.[1]
ProcessName The name of the current process.
Application Assembly SimpleName Simple name of the application assembly.
Version Version number of the application assembly.
VersionMajor Major version part of the Version.
Culture Supported culture of the application assembly.
PublicKeyToken Public key token of the application assembly.
AssemblyName Display name of the application assembly (such as "ExampleAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null").
AssemblyTokens A combination of SimpleName, VersionMajor, and Culture, separated by colons. The trailing tokens are left out together with the colons that precede them, if they are at default values ("0" for the VersionMajor, and "neutral" for the Culture).
Application Version Info CompanyName Name of the company from the application version info.
FileDescription Description of the file, from the application version info.
FileVersion File version number from the application version info.
FileVersionMajor Major version part of the FileVersion.
Language Default language string from the application version info.
NameToken Internal name from the application version info, without the ".exe" extension if present.
ProductVersion Product version number from the application version info.
ShortFileVersion The part of FileVersion before the first space character (' ').
VersionInfoTokens A combination of NameToken, FileVersionMajor and Language, separated by colons. The trailing tokens are left out together with the colons that precede them, if they are at default values ("0" for the FileVersionMajor, and "Language Neutral" for the Language).

The information in the "Application Assembly" and "Application Version Info" categories may not always be available - it depends on factors such as the type of application and the hosting process. For this reason, the template string can have one or more sections, separated by a semicolon (';'). If three or more sections are present, they are interpreted like this:

  • If the application assembly information is available, the last section from the end is used.
  • Otherwise, if the application version info is available, the second section from the end is used.
  • Otherwise, the third section from the end is used.

If there are fewer sections, the first available section that would be to the right of the position indicated by the above rules is used. This algorithm also means that you can use just one section, and this section will then always be used.

Template string defaults

The default application URI template string (in OPC Studio 2024.2 and newer) is as follows:

 http://$(CanonicalizedHostName)/$(ModuleName);http://$(CanonicalizedHostName)/$(VersionInfoTokens);http://$(CanonicalizedHostName)/$(AssemblyTokens)

The "http" scheme was chosen because OPC Foundation LDS (Local Discovery Server) only accepts registrations from servers whose application URI starts with "urn:" or "http://", and there is currently no way to generate technically correct Uniform Resource Names for OPC UA applications, because no suitable freely usable NID (namespace identifier) has been registered with IANA. In spite of this fact, the "urn" scheme appears to be quite common among the OPC UA implementations, and host name is used in place of the namespace identifier.

The default application URI template string (in QuickOPC 2023.1 - 2024.1) was as follows:

 uri:$(HostName):$(ModuleName);uri:$(HostName):$(VersionInfoTokens);uri:$(HostName):$(AssemblyTokens)
  1. Normally not used, as it is not stable enough for the most purposes. Intended for "transient" OPC UA applications.