Skip to content

SAIF.Services.Web.Proxies operations and processes

This page is the operation catalog and cross-operation hub for this library. Each operation's detailed, step-by-step logic lives in its own page under operations/. None of these operations executes SQL or touches a database table directly; where a wrapper resolves database connection strings remotely, this is noted in the operation detail page.

Operation catalog

Operation Intent Trigger Inputs Outputs Rules
Get Active Directory user data or access Retrieve a default printer, a cached access decision, or contact details for an AD user A caller request (no in-repo caller) userId, role, useExternalDomain Printer name, boolean access decision, or a Contact WP-BR-001, WP-BR-002, WP-BR-003
Document generation, preview, distribution and print Preview, categorize, distribute, or print documents through the xPression Design document service SAIF.Services.Utilities.Documents.DocumentService, or package consumers Package/profile names, DocumentGenerationConfig, MailMessage, FaxInfoClass, DeferredPrintConfig, PrintConfig PDF bytes, sorted category/package lists, or a distribution/print side effect WP-BR-004 through WP-BR-009
Send a fax Send a fax with a file attachment through the Fax SOAP service Services/SAIF.Services.WCF/Services/FaxService.cs (non-eligible), or package consumers FaxRecipient, fullFilePath Fire-and-forget; nothing returned WP-BR-010
Log an exception remotely Forward exception details to the remote logging service EnvironmentApi SAIFExceptionLogger (non-eligible), or package consumers ApplicationExceptionDetail Remote WriteError call —
Retrieve a cached PDF image Retrieve a cached PDF page image, waiting for the server to render it if necessary A caller request (no in-repo caller) imageSeqNum, maxWaitTimeInSeconds Image bytes WP-BR-011
Work-calendar date queries Answer first/last/next work-day and working-day questions for a given calendar A caller request (no in-repo caller) DateTime, calendar Date or boolean result —
Resolve a database connection string Resolve an Oracle or SQL Server connection string from the legacy connect-info SOAP service Services/SAIF.Services.Common/DbConnectionService.cs (non-eligible), or package consumers instance, userName, optionally server A connection string containing credentials WP-BR-012, WP-BR-013
Produce a certified-mail label Produce a SimpleCertifiedMail certified label for document distribution or subpoenas SubpoenaLabelService, DocumentDeferredService (through ISimpleCertifiedMailServiceProxy) CertifiedLabelData, number of pages A GIF label image, or a thrown exception WP-BR-014 through WP-BR-019
Compute driving distances Compute driving distance and time between one or more address pairs via the Google Distance Matrix API SubpoenaService (through IGoogleMapsApiServiceProxy) Origin and destination addresses DistanceResults, a list of miles, or an error message WP-BR-020 through WP-BR-025

Process flow diagram

The following diagram visualizes the shared wrapper construction and delegation pattern common to the eight SOAP-backed operations.

flowchart TD
    Start([Caller invokes a wrapper method]) --> Guard{"Required arguments<br>non-null/non-empty?"}
    Guard -->|No| Fail(["Argument exception<br>thrown"])
    Guard -->|Yes| Build["Construct binding and<br>EndpointAddress(serviceUrl)"]
    Build --> Wire["Delegate to generated<br>SOAP/WCF client operation"]
    Wire --> Map["Map wire response to<br>SAIF.Core contract type"]
    Map --> Return(["Return mapped result<br>or side effect"])

Database interactions

This library performs no direct database access. Resolve a database connection string resolves Oracle/SQL Server connection strings remotely via the DbConnection SOAP service; the actual SQL execution, if any, happens in the caller that uses the returned connection string, outside this library.

Failure and edge-case behavior

  • A missing or empty required argument (service URL, userId, package/xml, database) throws an argument exception from Enforce before any wire call is made (WP-BR-001).
  • SendFax and MapFaxMessage throw NullReferenceException on a null message/faxInfo because neither has a null guard.
  • GetContact throws NullReferenceException if the wire call returns a null userInfo.
  • PdfServiceProxy.GetImage throws if the wire call returns a null result.
  • A certified-mail label response with StatusCode != 1 is logged via ILogService.LogException and raised as SimpleCertifiedException (WP-BR-018).
  • More than 76 pages requested from GetDefaultLabelData throws InvalidNumberOfPagesException (WP-BR-015).
  • GoogleMapsApiServiceProxy rethrows Google API/network failures as new Exception(e.Message), which loses the original exception type and stack trace; it also does not dispose the WebResponse or its stream.
  • A non-"OK" element status from the Google API sets ErrorMessage rather than throwing (WP-BR-023); a parse failure on a single element in a multi-address query contributes 0 miles rather than failing the whole request (WP-BR-024).
  • Mismatched origin/destination counts in GetMilesBetweenMultipleAddresses throw before any request is sent (WP-BR-025).
  • Every wrapper's Dispose() calls Close() without an Abort() fallback, so disposing a faulted channel can itself throw*.

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts.

Sources

  • Services/SAIF.Services.Web.Proxies/ActiveDirectoryServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/DocumentServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/FaxServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/LoggingServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/PDFServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/WorkCalendarServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/Legacy/DbConnectionsServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/GoogleMapsApiServiceProxy.cs