Architecture
This repository reaches WSLogging through the generated clsWSLoggingSoapClient, wrapped by the authored LoggingServiceProxy, which builds a default BasicHttpBinding and EndpointAddress in code rather than relying on the app.config endpoint.
Proxy mechanism
Aspect
Finding
Mechanism
Service Reference (svcutil)
Proxy type
SAIF.Services.Web.Proxies.Logging.clsWSLoggingSoapClient (internal)
Base type
System.ServiceModel.ClientBase<T>
Contract type
internal interface clsWSLoggingSoap
Constructed in
SAIFExceptionLogger.Log (Services/SAIF.Services.WebApi/EnvironmentApi/App_Start/SAIFExceptionLogger.cs:20)
Binding configured in
Code
Address supplied by
Constructor argument (serviceUrl), itself sourced from ConfigurationManager.AppSettings["loggingServiceUrl"]
Architecture diagram
The following diagram visualizes how a call reaches the remote service.
flowchart TD
CALLER["SAIFExceptionLogger.Log"] --> WRAP["LoggingServiceProxy<br>hand-written wrapper"]
WRAP --> BIND["Binding constructed<br>BasicHttpBinding (defaults)"]
BIND --> ADDR["EndpointAddress<br>from appSettings loggingServiceUrl"]
ADDR --> PROXY["clsWSLoggingSoapClient<br>generated proxy"]
PROXY --> REMOTE["Remote service<br>WSLogging (ASMX)"]
The wrapper is never disposed at its only call site, so no disposal node is drawn — see Consumption .
Hand-written wrapper
Field
Value
Type
SAIF.Services.Web.Proxies.LoggingServiceProxy
Source
Services/SAIF.Services.Web.Proxies/LoggingServiceProxy.cs
Visibility
public
Implements
IDisposable
Responsibility
Validates the supplied service URL, constructs the generated clsWSLoggingSoapClient with an explicit binding and address, and exposes LogException
Proxy lifetime
Per call — a new LoggingServiceProxy is constructed inside SAIFExceptionLogger.Log for each logged exception
Configuration applied
Value
Source
BasicHttpBinding security mode
None declared — BasicHttpBinding() defaults*, so BasicHttpSecurityMode.None applies
LoggingServiceProxy.cs:18
Transport client credential
None set
LoggingServiceProxy.cs:17-20
MaxReceivedMessageSize
Not set — the WCF default of 65,536 bytes applies*
LoggingServiceProxy.cs:17-20
MaxBufferSize
Not set — WCF default applies*
LoggingServiceProxy.cs:17-20
Timeouts
None set — binding defaults apply*
LoggingServiceProxy.cs:17-20
Endpoint resolution
Environment
Address
Resolved from
Changeable without a rebuild
All (no per-build transform)
http://saifonline/WebServices/WSLogging/clsWSLogging.asmx
Services/SAIF.Services.WebApi/EnvironmentApi/Web.config:8
Yes — an appSettings value, but neither Web.Debug.config nor Web.Release.config overrides it, so the production host is used in every build configuration
Separately, environments.xml defines a per-track loggingServiceUrl (webdev01, webdev02, webtest01, webtest02, webqa, saifonline) that EnvironmentApi serves to other applications; SAIFExceptionLogger does not read that data and always uses the Web.config value.
Lifetime and disposal
Aspect
Finding
Proxy lifetime
Per call
Disposal
None. No using, no Close(), and no Abort() are called on the LoggingServiceProxy at its only call site
Faulted-channel handling
Not applicable — the instance is never disposed
Thread safety
Not determined from source
Integration points
System
Type
Purpose
WSLogging
SOAP service
Records error entries for later retrieval
Note: Statements marked with * were inferred from code structure or contextual
evidence.
Sources
Services/SAIF.Services.Web.Proxies/LoggingServiceProxy.cs
Services/SAIF.Services.WebApi/EnvironmentApi/App_Start/SAIFExceptionLogger.cs
Services/SAIF.Services.WebApi/EnvironmentApi/Web.config