Operations and processes¶
This host performs file I/O, preference/session persistence, image queuing, fax dispatch, and identity/authorization resolution on behalf of its callers. Every one of the 24 operations catalogued on Operations maps to exactly one processing workflow, documented in full on its own page under operations/.
This page is the process catalog and hub. Each process's detailed, step-by-step logic lives in its own page under operations/.
Process catalog¶
| ID | Process | Entry operation | Trigger | Owning component | Rules |
|---|---|---|---|---|---|
| OP-001 | Read a byte range from a caller-supplied path | ReadFile |
Caller invokes ReadFile over the FileService route. |
SAIF.Services.WCF.Services.FileService.ReadFile |
BR-WCF-003, BR-WCF-004 |
| OP-002 | Read an entire file from a caller-supplied path | ReadEntireFile |
Caller invokes ReadEntireFile over the FileService route. |
SAIF.Services.WCF.Services.FileService.ReadEntireFile |
BR-WCF-004 |
| OP-003 | Write bytes to a caller-supplied path | WriteFile |
Caller invokes WriteFile over the FileService route, or FaxService/ImagingService constructs a FileService internally and calls WriteFile directly. |
SAIF.Services.WCF.Services.FileService.WriteFile |
BR-WCF-004 |
| OP-004 | Delete a file at a caller-supplied path | DeleteFile |
Caller invokes DeleteFile over the FileService route, or FaxService calls it internally to remove a staged temp file. |
SAIF.Services.WCF.Services.FileService.DeleteFile |
BR-WCF-004 |
| OP-005 | Report the length of a caller-supplied path | Length |
Caller invokes Length over the FileService route. |
SAIF.Services.WCF.Services.FileService.Length |
BR-WCF-004 |
| OP-006 | Retrieve a stored preference set | GetPreferences |
Caller invokes GetPreferences over the PreferenceService route. |
SAIF.Services.WCF.Services.PreferenceService.GetPreferences |
BR-WCF-002, BR-WCF-005 |
| OP-007 | Insert, update, or delete a stored preference set | SavePreferences |
Caller invokes SavePreferences over the PreferenceService route. |
SAIF.Services.WCF.Services.PreferenceService.SavePreferences |
BR-WCF-002, BR-WCF-005 |
| OP-008 | Resolve a user's default printer from Active Directory | GetDefaultPrinter |
Caller invokes GetDefaultPrinter over the PreferenceService route. |
SAIF.Services.WCF.Services.PreferenceService.GetDefaultPrinter |
BR-WCF-012, BR-WCF-013 |
| OP-009 | Retrieve and consume a stored web context | Get |
Caller invokes Get over the WebContext route. |
SAIF.Services.WCF.Services.WebContextService.Get |
BR-WCF-002, BR-WCF-014 |
| OP-010 | Replace the stored web context for an application and session | Save |
Caller invokes Save over the WebContext route. |
SAIF.Services.WCF.Services.WebContextService.Save |
BR-WCF-002, BR-WCF-011 |
| OP-011 | Construct a new in-memory web context | CreateContext |
Caller invokes CreateContext over the WebContext route, or WebContextService.Get calls it internally when locating the context id. |
SAIF.Services.WCF.Services.WebContextService.CreateContext |
BR-WCF-015 |
| OP-012 | Reserve an image id and write a document with its index sidecar | QueueImage |
Caller invokes QueueImage over the Imaging route. |
SAIF.Services.WCF.Services.ImagingService.QueueImage |
BR-WCF-002, BR-WCF-004 |
| OP-013 | Reserve an image id with no accompanying file write | ReserveImageId |
Caller invokes ReserveImageId over the Imaging route. |
SAIF.Services.WCF.Services.ImagingService.ReserveImageId |
BR-WCF-024 |
| OP-014 | Stage a document and dispatch it to each fax recipient | SendFax |
Caller invokes SendFax over the Fax route. |
SAIF.Services.WCF.Services.FaxService.SendFax |
BR-WCF-002, BR-WCF-004 |
| OP-015 | Authorize a user for a role, trying the internal domain first | IsAuthorized |
Caller invokes IsAuthorized over the Security route. |
SAIF.Services.WCF.Services.Security.SecurityService.IsAuthorized |
BR-WCF-018, BR-WCF-023 |
| OP-016 | Authorize a user for a role with caller-controlled domain order | IsAuthorized2 |
Caller invokes IsAuthorized2 over the Security route, or IsAuthorized calls it internally with tryInternalDomainFirst = true. |
SAIF.Services.WCF.Services.Security.SecurityService.IsAuthorized2 |
BR-WCF-018, BR-WCF-023 |
| OP-017 | Resolve a user across Active Directory, WCIS, ADP, and external-user sources in priority order | GetUser |
Caller invokes GetUser over the Security route. |
SAIF.Services.WCF.Services.Security.SecurityService.GetUser |
BR-WCF-018a, BR-WCF-019a |
| OP-018 | Project an AD principal into a SaifUser, resolving the manager's user id | GetSaifUserByUserId |
Caller invokes GetSaifUserByUserId over the Security route. |
SAIF.Services.WCF.Services.Security.SecurityService.GetSaifUserByUserId |
BR-WCF-024a, BR-WCF-025a |
| OP-019 | Resolve an ADP employee id to a SaifUser via its AD account | GetSaifUserByEmployeeId |
Caller invokes GetSaifUserByEmployeeId over the Security route. |
SAIF.Services.WCF.Services.Security.SecurityService.GetSaifUserByEmployeeId |
BR-WCF-023a, BR-WCF-028a |
| OP-020 | Resolve an ADP employee id to a plain user id | GetUserIdForEmployeeId |
Caller invokes GetUserIdForEmployeeId over the Security route. |
SAIF.Services.WCF.Services.Security.SecurityService.GetUserIdForEmployeeId |
BR-WCF-022a, BR-WCF-032 |
| OP-021 | Resolve an external user and its primary contact | GetExternalUser |
Caller invokes GetExternalUser over the Security route. |
SAIF.Services.WCF.Services.Security.SecurityService.GetExternalUser |
BR-WCF-019a, BR-WCF-020a |
| OP-022 | Resolve the most-recent external user for a customer group and user type | GetExternalUserByCustomerId |
Caller invokes GetExternalUserByCustomerId over the Security route. |
SAIF.Services.WCF.Services.Security.SecurityService.GetExternalUserByCustomerId |
BR-WCF-019a, BR-WCF-020a |
| OP-023 | Resolve the most-recent external injured-worker user for a customer group | GetInjuredWorkerUserByCustomerId |
Caller invokes GetInjuredWorkerUserByCustomerId over the Security route. |
SAIF.Services.WCF.Services.Security.SecurityService.GetInjuredWorkerUserByCustomerId |
BR-WCF-019a, BR-WCF-020a |
| OP-024 | Expand group membership from Active Directory, optionally recursive and optionally including disabled accounts | GetUsersByGroup |
Caller invokes GetUsersByGroup over the Security route. |
SAIF.Services.WCF.Services.Security.SecurityService.GetUsersByGroup |
BR-WCF-032, BR-WCF-035 |
Cross-process flow diagram¶
The following diagram visualizes how processes sequence across a request, including the two internal-delegation chains: ImagingService.QueueImage writing through FileService.WriteFile twice, and FaxService.SendFax writing then deleting a staged file through FileService.
flowchart TD
OP012["OP-012 QueueImage"] --> OP003a["OP-003 WriteFile (document)"]
OP012 --> OP003b["OP-003 WriteFile (.idx sidecar)"]
OP014["OP-014 SendFax"] --> OP003c["OP-003 WriteFile (staged document)"]
OP014 --> LEGACYFAX["Legacy.Fax SendFax (per recipient)"]
OP014 --> OP004["OP-004 DeleteFile (staged document)"]
OP015["OP-015 IsAuthorized"] --> OP016["OP-016 IsAuthorized2"]
OP016 --> ADSVC["ADService / AuthorizationCacheService"]
Transaction boundaries¶
| Process | Unit of work | Commit point | Shared/cached state |
|---|---|---|---|
| OP-006 | OracleUnitOfWorkFactory (CLM) |
Not applicable — this is a read outside Begin/Commit |
None |
| OP-007 | OracleUnitOfWorkFactory (CLM) |
unitOfWork.Commit() after the add/delete/update decision |
None |
| OP-009 | SqlServerUnitOfWorkFactory (NETFRAMEWORK/APPM) |
unitOfWork.Commit() after the delete loop |
None |
| OP-010 | SqlServerUnitOfWorkFactory (NETFRAMEWORK/APPM) |
unitOfWork.Commit() after the delete-then-insert sequence |
None |
| OP-012 | OracleUnitOfWorkFactory (IMG) for the id reservation; no transaction wraps the file writes |
Not applicable — no Begin/Commit around the file-system work |
None |
| OP-013 | OracleUnitOfWorkFactory (IMG) |
Not applicable — no transaction | None |
| OP-015 | OracleUnitOfWorkFactory (EXTUR), opened but not used for this decision path |
Not applicable | Reads and, on a cache miss, mutates the process-wide AuthorizationCacheService cache and the mutable ldap_external field |
| OP-016 | OracleUnitOfWorkFactory (EXTUR), opened but not used for this decision path |
Not applicable | Reads and, on a cache miss, mutates the process-wide AuthorizationCacheService cache and the mutable ldap_external field |
| OP-017 | OracleUnitOfWorkFactory (EXTUR) |
Not applicable — read-only across all sources | None |
| OP-018 | OracleUnitOfWorkFactory (EXTUR), opened but not used for this path |
Not applicable | None |
| OP-019 | OracleUnitOfWorkFactory (EXTUR) |
Not applicable — read only | None |
| OP-020 | OracleUnitOfWorkFactory (EXTUR) |
Not applicable — read only | None |
| OP-021 | OracleUnitOfWorkFactory (EXTUR) |
Not applicable — read only | None |
| OP-022 | OracleUnitOfWorkFactory (EXTUR) |
Not applicable — read only | None |
| OP-023 | OracleUnitOfWorkFactory (EXTUR) |
Not applicable — read only | None |
| OP-024 | None for this path | Not applicable | None |
Failure and edge-case behavior¶
- A
FileServicefilesystem failure (any ofReadFile,ReadEntireFile,WriteFile,DeleteFile,Length) surfaces as a generic SOAP fault with full exception detail, including the resolved path, becauseincludeExceptionDetailInFaults="true"— see Faults and error pipeline. ImagingService.QueueImagewriting the document succeeds but writing the.idxsidecar fails leaves an unindexed document on disk with no compensating rollback.FaxService.SendFaxfailing mid-loop across multiple recipients leaves the temporary staged file on disk, because the delete call is not wrapped in afinallyblock.SecurityService.IsAuthorized/IsAuthorized2answerfalsefor a missing group, a missing user, or an explicitly disabled account rather than faulting; any otherSecurityExceptionis rethrown and reaches the caller as a generic SOAP fault.- Authorization answers are cached per user/role/domain for a configured TTL, so a membership revoked after caching remains authorized until the cache entry expires.
Related documentation¶
- Index
- Overview
- Architecture
- Activation and hosting
- Operations
- Faults and error pipeline
- Authentication and authorization
- Dependencies
- Configuration
- Business rules
- Data model
- Operational runbook
- Tech debt
Sources¶
- src/WCF/SAIF.Services.WCF.Host/Services/FileService.cs
- src/WCF/SAIF.Services.WCF.Host/Services/PreferenceService.cs
- src/WCF/SAIF.Services.WCF.Host/Services/WebContextService.cs
- src/WCF/SAIF.Services.WCF.Host/Services/ImagingService.cs
- src/WCF/SAIF.Services.WCF.Host/Services/FaxService.cs
- src/WCF/SAIF.Services.WCF.Host/Services/Security/SecurityService.cs