Operations and processes¶
Every operation on this host is invoked through one route: UC4 → UC4Service. Transaction boundary for every process below: none — the host opens no unit of work, no transaction, and no compensating path; the forward call to the downstream service is the only side effect, and it is not undone if anything after it fails. This page is the process hub; input/output messages, declared faults, and binding facts belong to Operations.
Process catalog¶
BR-UC4-007 (job/parameter name space validation) reaches no process: UC4Service.Validate has no caller anywhere in this host.
Cross-process flowchart¶
ExecuteJobWithValuesAndClientId (OP-006) is the canonical flow; the other seven processes are deltas against it — each either prepends an enum-to-client-id conversion, adds a JSON-parsing step, or omits the positional-naming step.
flowchart TD
ENTRY["Caller invokes one of<br>the eight operations"] --> ENUMCHECK{"Enum-typed<br>operation?"}
ENUMCHECK -->|"Yes (OP-001,003,005,007)"| CONV["Convert UC4Environment<br>to client id"]
ENUMCHECK -->|"No (OP-002,004,006,008)"| LOG["Logging: trace INFO"]
CONV --> LOG
LOG --> NULLCHECK{"Name ends in<br>AndClientId?"}
NULLCHECK -->|"Yes"| ENFORCE["Enforce.ArgumentNotNull<br>jobName"]
NULLCHECK -->|"No"| GATE
ENFORCE --> JSONCHECK{"JSON form?<br>(OP-003,004)"}
JSONCHECK -->|"Yes"| PARSE["Parse jsonKeyValuePairs<br>before gate"]
JSONCHECK -->|"No"| GATE["IsJobAllowed:<br>read uc4.rules, evaluate"]
PARSE --> GATE
GATE -->|"blocked"| EMPTY["Return empty UC4Result<br>reason discarded"]
GATE -->|"allowed"| SHAPE{"values-form?<br>(OP-001,002,005,006)"}
SHAPE -->|"Yes"| NAME["Name positional values<br>as arg1, arg2, in order"]
SHAPE -->|"No"| CLIENT
NAME --> CLIENT["UC4Client: resolve address,<br>stamp host identity, forward job"]
CLIENT --> MAP["Map downstream result<br>to published UC4Result"]
MAP --> RESP["Return response"]
EMPTY --> RESP
GATE --> FAULT["Unhandled exception<br>surfaced as detailed fault"]
CLIENT --> FAULT
Transaction boundaries¶
No process opens a unit of work, a database transaction, or any compensating action. The forward call to the downstream service is the sole side effect of every process, and it is not undone if the response mapping or any later step fails.
Failure and edge-case behavior¶
| Condition | Behavior |
|---|---|
jobName is null (ExecuteJobWithJsonAndClientId, ExecuteJobWithValuesAndClientId, or ExecuteJobWithParametersAndClientId) |
Enforce.ArgumentNotNull throws — surfaced as a detailed WCF fault |
uc4.rules document missing or malformed |
NullReferenceException from an unguarded dereference of rules.UC4Rules.Environments* — surfaced as a detailed WCF fault |
| Requested environment has no rule entry | Allowed by default, except environment 100 — see BR-UC4-002 |
| Job is blocked by the rule set | Caller-visible response is a successful, empty UC4Result — not a fault — see BR-UC4-005 |
Malformed jsonKeyValuePairs (JSON forms only) |
Faults even for a job the rule set would have blocked, because parsing happens before the gate — see BR-UC4-013 |
| Downstream service unreachable or throws | Propagates unchanged as a detailed WCF fault — no retry, circuit breaker, or timeout override exists in this host |
Related documentation¶
- Index
- Overview
- Architecture
- Activation and hosting
- Operations
- Faults and error pipeline
- Authentication and authorization
- Dependencies
- Configuration
- Business rules
- Operational runbook
- Tech debt
Note: Statements marked with
*were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts.
Sources¶
src/WCF/SAIF.Services.WCF.UC4.Host/UC4Service.cssrc/WCF/SAIF.Services.WCF.UC4.Host/Uc4Client.cssrc/WCF/SAIF.Services.WCF.UC4.Host/UC4JobRules.cs