Skip to content

Architecture

ActiveDirectoryServiceProxy constructs the generated clsADServicesSoapClient directly from a BasicHttpBinding and a caller-supplied EndpointAddress, bypassing the two <client><endpoint> entries configured in app.config.

Proxy mechanism

Aspect Finding
Mechanism Service Reference (svcutil)
Proxy type SAIF.Services.Web.Proxies.ActiveDirectory.clsADServicesSoapClient
Base type System.ServiceModel.ClientBase<SAIF.Services.Web.Proxies.ActiveDirectory.clsADServicesSoap>
Contract type SAIF.Services.Web.Proxies.ActiveDirectory.clsADServicesSoap (internal)
Constructed in ActiveDirectoryServiceProxy constructor (Services/SAIF.Services.Web.Proxies/ActiveDirectoryServiceProxy.cs:18-21)
Binding configured in Code — new BasicHttpBinding() with framework defaults
Address supplied by Constructor argument serviceUrl, whose own origin is unresolved within this repository

Construction path

The following diagram visualizes how a call reaches the remote service.

flowchart TD
    CALLER["External consumer of<br>SAIF.SAIFCode.Core"] --> WRAP["ActiveDirectoryServiceProxy<br>hand-written wrapper"]
    WRAP --> BIND["BasicHttpBinding()<br>constructed in code, defaults"]
    BIND --> ADDR["EndpointAddress(serviceUrl)<br>caller-supplied, origin unresolved"]
    ADDR --> PROXY["clsADServicesSoapClient<br>generated proxy (internal)"]
    PROXY --> REMOTE["Remote service<br>clsADServices (ASMX)"]
    WRAP --> DISPOSE["Close() on Dispose,<br>no Abort() fallback"]

Hand-written wrapper

Field Value
Type SAIF.Services.Web.Proxies.ActiveDirectoryServiceProxy
Source Services/SAIF.Services.Web.Proxies/ActiveDirectoryServiceProxy.cs
Visibility public
Implements IDisposable
Responsibility Constructs the internal generated client from a caller-supplied URL, exposes four operations by name, and disposes the client
Proxy lifetime Per wrapper instance
Configuration applied Value Source
Binding security mode BasicHttpSecurityMode.None (default; not overridden) ActiveDirectoryServiceProxy.cs:19
Transport client credential None set* ActiveDirectoryServiceProxy.cs:19
MaxReceivedMessageSize 65,536 bytes (framework default, not overridden)* ActiveDirectoryServiceProxy.cs:19
MaxBufferSize Framework default, not overridden* ActiveDirectoryServiceProxy.cs:19
Timeouts None set — binding defaults apply (1 min send/open/close, 10 min receive)* ActiveDirectoryServiceProxy.cs:19

Endpoint resolution

Environment Address Resolved from Changeable without a rebuild
All Caller-supplied serviceUrl; the design-time (unused) configured value is http://webqa/WebServices/ADWebService/clsADServices.asmx Services/SAIF.Services.Web.Proxies/ActiveDirectoryServiceProxy.cs:14-16 (parameter origin unresolved**) Yes — the caller who constructs ActiveDirectoryServiceProxy controls it, but this repository does not show who that caller is or how the URL reaches them

Lifetime and disposal

Aspect Finding
Proxy lifetime Per wrapper instance
Disposal Dispose() calls webService.Close(), with no try/catch and no Abort() fallback
Faulted-channel handling Not handled — if the channel is faulted, Close() throws CommunicationObjectFaultedException from Dispose, which can mask the original failure inside a using block*
Thread safety Not determined from source

Integration points

System Type Purpose
clsADServices ASMX web service reached through a WCF-style ClientBase<T> proxy Printer lookup, cached authorization checks, and contact lookups delegated to Active Directory*

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with ** could not be confirmed; treat as unknown until verified.

Sources

  • Services/SAIF.Services.Web.Proxies/ActiveDirectoryServiceProxy.cs
  • Services/SAIF.Services.Web.Proxies/app.config
  • Services/SAIF.Services.Web.Proxies/Service References/ActiveDirectory/Reference.cs