Faults and error pipeline¶
This host installs a service behavior for observability but constructs no typed fault anywhere in its own source. Every failure that is not intercepted by that behavior reaches the caller as WCF's default fault for the thrown exception, carrying full exception detail.
Error handler¶
| Aspect | Finding |
|---|---|
IErrorHandler installed |
Not readable from this host's source.** The in-repository sibling implementation, ErrorLogErrorHandler : IErrorHandler (src/WCF/SAIF.Services.WCF.Host/Extensions/ErrorLogErrorHandler.cs:11), logs the exception and does not shape the fault. The packaged SAIF.Services.WCF.Common.Extensions behavior applied here is expected to follow the same shape,* but this could not be verified from this repository. |
ProvideFault behavior |
Unknown — the type is external and its implementation is not in this repository** |
Service behaviors¶
| Aspect | Finding |
|---|---|
IServiceBehavior applied |
[LogErrorBehavior] on UC4Service (src/WCF/SAIF.Services.WCF.UC4.Host/UC4Service.cs:20) |
| Where the attribute type lives | Namespace SAIF.Services.WCF.Common.Extensions, not in this repository — it arrives from a referenced SAIF.* package whose identity could not be resolved from packages.config** |
| The in-repository look-alike | src/WCF/SAIF.Services.WCF.Host/Extensions/LogErrorBehaviorAttribute.cs declares LogErrorBehaviorAttribute : Attribute, IServiceBehavior in namespace SAIF.Services.WCF.Extensions — a different namespace — and this host has no project reference to it, so it is not the type applied here |
| Behavior configuration scope | The <serviceBehaviors><behavior> element in Web.config is unnamed, so it applies to every service in the host by default |
| Services decorated | UC4Service — the only service class this host registers |
Caller-visible consequence: reading the [LogErrorBehavior] registration as a custom fault envelope would be a defect. By the shape of its in-repository sibling, the applied behavior's ProvideFault does not set a fault* — its contribution is observability, not the fault contract.
Include exception detail in faults¶
| Setting | Value | Source |
|---|---|---|
serviceDebug includeExceptionDetailInFaults |
true |
src/WCF/SAIF.Services.WCF.UC4.Host/Web.config |
system.web/customErrors mode |
Off |
Web.config |
system.webServer/httpErrors errorMode |
Detailed |
Web.config |
Server exception detail, including stack traces, is returned to every caller of every operation. This host ships no Web.Release.config / Web.Debug.config transform, so the deployed configuration is the checked-in one unless a release-time transform outside this repository intervenes.**
Declared fault contracts¶
| Element | Finding |
|---|---|
[FaultContract] declarations |
Unknown** — declared, if at all, on the external IUC4Service interface, which is not in scope |
throw new FaultException / FaultException<T> in host code |
None. A search of src/WCF/SAIF.Services.WCF.UC4.Host/*.cs for FaultException returns no match. No operation constructs a typed or untyped fault. |
Failure modes by operation¶
| Operation | What the caller receives on failure |
|---|---|
ExecuteJob, ExecuteJobWithValues, ExecuteJobWithParameters, ExecuteJobWithJson (enum forms) |
Whatever UC4EnvironmentFactory.GetUC4ClientId(environment) throws for an unmapped enum value**, then the failure modes of the corresponding AndClientId form; all surfaced as WCF default faults with exception detail |
ExecuteJobWithClientId |
Failure modes of ExecuteJobWithValuesAndClientId (it delegates with an empty value array) |
ExecuteJobWithValuesAndClientId, ExecuteJobWithParametersAndClientId |
ArgumentNullException-family exception from Enforce.ArgumentNotNull(jobName, "jobName") when jobName is null; NullReferenceException if the uc4.rules document is missing or does not deserialize (rules.UC4Rules.Environments is dereferenced unguarded)*; any exception thrown constructing UC4Client or calling the downstream service — all as WCF default faults |
ExecuteJobWithJsonAndClientId |
As above, plus Newtonsoft.Json deserialization exceptions from JsonConvert.DeserializeObject(jsonKeyValuePairs) on malformed caller input |
| All eight | A blocked job is not a fault. When IsJobAllowed returns false, the operation returns a default-constructed UC4Result and the explanatory message is discarded — see BR-UC4-005 |
Swallowed failures¶
No catch block in this host discards an exception without surfacing or logging it. A search of src/WCF/SAIF.Services.WCF.UC4.Host/*.cs for catch returns no matches at all — this host contains no try/catch block anywhere in its own source; every exception propagates unhandled to the WCF dispatcher.
Related documentation¶
- Index
- Overview
- Architecture
- Activation and hosting
- Operations
- Authentication and authorization
- Dependencies
- Configuration
- Operations and processes
- 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. Statements marked with**could not be confirmed; treat as unknown until verified.
Sources¶
src/WCF/SAIF.Services.WCF.UC4.Host/UC4Service.cssrc/WCF/SAIF.Services.WCF.UC4.Host/Uc4Client.cssrc/WCF/SAIF.Services.WCF.UC4.Host/Web.configsrc/WCF/SAIF.Services.WCF.Host/Extensions/LogErrorBehaviorAttribute.cs(comparison only — different namespace, not referenced by this host)src/WCF/SAIF.Services.WCF.Host/Extensions/ErrorLogErrorHandler.cs(comparison only)