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 fromEnforcebefore any wire call is made (WP-BR-001). SendFaxandMapFaxMessagethrowNullReferenceExceptionon a nullmessage/faxInfobecause neither has a null guard.GetContactthrowsNullReferenceExceptionif the wire call returns a nulluserInfo.PdfServiceProxy.GetImagethrows if the wire call returns a null result.- A certified-mail label response with
StatusCode != 1is logged viaILogService.LogExceptionand raised asSimpleCertifiedException(WP-BR-018). - More than 76 pages requested from
GetDefaultLabelDatathrowsInvalidNumberOfPagesException(WP-BR-015). GoogleMapsApiServiceProxyrethrows Google API/network failures asnew Exception(e.Message), which loses the original exception type and stack trace; it also does not dispose theWebResponseor its stream.- A non-
"OK"element status from the Google API setsErrorMessagerather 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
GetMilesBetweenMultipleAddressesthrow before any request is sent (WP-BR-025). - Every wrapper's
Dispose()callsClose()without anAbort()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.
Related documentation¶
Sources¶
Services/SAIF.Services.Web.Proxies/ActiveDirectoryServiceProxy.csServices/SAIF.Services.Web.Proxies/DocumentServiceProxy.csServices/SAIF.Services.Web.Proxies/FaxServiceProxy.csServices/SAIF.Services.Web.Proxies/LoggingServiceProxy.csServices/SAIF.Services.Web.Proxies/PDFServiceProxy.csServices/SAIF.Services.Web.Proxies/WorkCalendarServiceProxy.csServices/SAIF.Services.Web.Proxies/Legacy/DbConnectionsServiceProxy.csServices/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.csServices/SAIF.Services.Web.Proxies/GoogleMapsApiServiceProxy.cs