Tech debt
The proxy's most serious defect is a call site that silently converts every failure — including a genuine service outage — into the same "unmatched" outcome a caller sees for a bad address. No call site sets a timeout, retry policy, or cancellation, and the plain-HTTP endpoint sends Windows credentials unencrypted.
CRITICAL
Finding
Component
Impact
Recommended action
CleanAddress catches System.Exception and converts every failure — transport, fault, or deserialization — into return code -999 ("unmatched"), with nothing logged
CleanAddressService.CleanAddress (Services/SAIF.Services/Utilities/CleanAddress/CleanAddressService.cs:62-66)
Callers cannot distinguish a service outage from a genuinely unmatched address; failures are invisible
Log the exception and consider a distinct sentinel or rethrow for transport/service failures
The endpoint is plain HTTP and negotiates the process's Windows identity unencrypted
Services/SAIF.Services/Utilities/CleanAddress/CleanAddressServiceBase.cs:20-21; Services/SAIF.Services/Properties/Settings.Designer.cs:29
Address data and Windows credentials cross the network unencrypted
Move the endpoint to HTTPS
HIGH
Finding
Component
Impact
Recommended action
No timeout is set anywhere; the WebClientProtocol default of 100,000 ms applies
Services/SAIF.Services/Utilities/CleanAddress/CleanAddressServiceBase.cs:18-22
A hung remote call can block a caller for up to 100 seconds
Set an explicit Timeout
No retry and no cancellation exist at any call site
Services/SAIF.Services/Utilities/CleanAddress/*.cs
Every transient failure is absorbed entirely by the consumer, if it is handled at all
Add a bounded retry policy where appropriate
ConvertToProperCase, FindCityStateInfoByZip, and RunCleanAddressBatch have no local exception handling
CleanAddressService.cs:23; AddressSearchService.cs:21; CleanAddressBatchService.cs:20
Raw SoapException / WebException propagates to the caller
Decide and document an explicit failure contract
No production code in this repository constructs any of the three adapters; the only construction is in live-network unit tests
Tests/SAIF.Services.Tests/Utilities/WhenCleansingAddress.cs; WhenSearchingAddress.cs
The generated proxy, its adapters, and their business logic are compiled and shipped but unexercised inside this repository
Confirm whether an external consumer of SAIF.SAIFCode.Core actually uses these types
FindCityStateInfoByZip parsing assumes outResultsCount * 55 fits inside outResults; a shorter string throws ArgumentOutOfRangeException
AddressSearchService.cs:32-34
An unexpected response shape crashes the caller
Bounds-check before slicing the fixed-width buffer
RunCleanAddressBatch's owning class is marked unsupported by its own author
CleanAddressBatchService.cs:7-9
The batch path is carried but explicitly disclaimed
Confirm whether this path is still needed
Sources
Services/SAIF.Services/Utilities/CleanAddress/CleanAddressService.cs
Services/SAIF.Services/Utilities/CleanAddress/CleanAddressServiceBase.cs
Services/SAIF.Services/Utilities/CleanAddress/AddressSearchService.cs
Services/SAIF.Services/Utilities/CleanAddress/CleanAddressBatchService.cs
Services/SAIF.Services/Properties/Settings.Designer.cs
Tests/SAIF.Services.Tests/Utilities/WhenCleansingAddress.cs
Tests/SAIF.Services.Tests/Utilities/WhenSearchingAddress.cs