.NET API
TraconSessionOwnerRequiredException
Tracon.Abstractions.dllThrown when session ownership is on, a session write needs an owner, and no authenticated identity could be resolved to be that owner.
public sealed class TraconSessionOwnerRequiredException : TraconException, ISerializableInheritance
Section titled “Inheritance”object ← Exception ← TraconException ← TraconSessionOwnerRequiredException
Implements
Section titled “Implements”Inherited Members
Section titled “Inherited Members”TraconException.ErrorType, Exception.GetBaseException(), Exception.ToString(), Exception.GetType(), Exception.TargetSite, Exception.Message, Exception.Data, Exception.InnerException, Exception.HelpLink, Exception.Source, Exception.HResult, Exception.StackTrace, object.GetType(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()
Remarks
Section titled “Remarks”Fail-closed. With TraconSessionOwnershipOptions.Enabled on and TraconSessionOwnershipOptions.RequireAuthenticatedOwner left at its default, a session is never OPENED without an owner: an ownerless row would be invisible to every owner-filtered listing from that moment on, so the caller would have written a session they can never read back. Rejecting the write is the honest answer; writing the row and hiding it is not.
This is the one place where attribution stops being bookkeeping. IRunAttributionContext promises that its own failure never stops a run — an unresolved user costs a NULL column and nothing else. With ownership on, the SAME value becomes an authorization input, and its absence rejects the write instead. Same service, two contract strengths; the option is what moves between them.
Over HTTP this surfaces as 403, not 500: it is a policy
decision the deployment asked for, not a fault. It is also not 401 —
the caller may be perfectly well authenticated for the endpoint’s own role
policy and still carry no identity the attribution pipeline can name.
Constructors
Section titled “Constructors”TraconSessionOwnerRequiredException()
Section titled “ TraconSessionOwnerRequiredException()”Creates a new error.
public TraconSessionOwnerRequiredException()TraconSessionOwnerRequiredException(string)
Section titled “ TraconSessionOwnerRequiredException(string)”Creates a new error.
public TraconSessionOwnerRequiredException(string message)Parameters
Section titled “Parameters”message string
The error message.
TraconSessionOwnerRequiredException(string, Exception)
Section titled “ TraconSessionOwnerRequiredException(string, Exception)”Creates a new error.
public TraconSessionOwnerRequiredException(string message, Exception innerException)Parameters
Section titled “Parameters”message string
The error message.
innerException Exception
The underlying error.
Fields
Section titled “Fields”SessionOwnerRequiredErrorType
Section titled “ SessionOwnerRequiredErrorType”The stable value written to TraconException.ErrorType.
public const string SessionOwnerRequiredErrorType = "session_owner_required"Field Value
Section titled “Field Value”Properties
Section titled “Properties”ErrorType
Section titled “ ErrorType”Gets the stable error type name written to the run record.
public override string ErrorType { get; }Property Value
Section titled “Property Value”Remarks
Section titled “Remarks”Defaults to the full name of the exception type, so today’s behaviour does
not change. A derived type overrides this member when the record has to be
machine readable — for example TraconContentFilteredException
writes content_filtered. Reports and alert rules can rely on this
stable name instead of an assembly name.
The value is written to RunError.Type and carries no secret.
SessionId
Section titled “ SessionId”Gets the id of the session that could not be given an owner.
public string? SessionId { get; init; }