Skip to content

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 FileService filesystem failure (any of ReadFile, ReadEntireFile, WriteFile, DeleteFile, Length) surfaces as a generic SOAP fault with full exception detail, including the resolved path, because includeExceptionDetailInFaults="true" — see Faults and error pipeline.
  • ImagingService.QueueImage writing the document succeeds but writing the .idx sidecar fails leaves an unindexed document on disk with no compensating rollback.
  • FaxService.SendFax failing mid-loop across multiple recipients leaves the temporary staged file on disk, because the delete call is not wrapped in a finally block.
  • SecurityService.IsAuthorized/IsAuthorized2 answer false for a missing group, a missing user, or an explicitly disabled account rather than faulting; any other SecurityException is 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.

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