Architecture¶
Generation mechanism¶
Service Reference (svcutil), sourced via WS-MetadataExchange.
| Evidence | Value |
|---|---|
| Metadata source | Reference.svcmap:21: <MetadataSource Address="http://callrexprod:8003/mex" Protocol="mex" SourceId="1" />; all eight metadata files carry SourceUrl="http://callrexprod:8003/mex" (Reference.svcmap:24-31) |
| Supporting artifacts | configuration.svcinfo, configuration91.svcinfo, <WCFMetadataStorage Include="Service References\CallRexState\" /> (SAIF.Services.Web.Proxies.csproj:414) |
| Base types | System.ServiceModel.DuplexClientBase<IAgentStateService> (Reference.cs:385); System.ServiceModel.ClientBase<IClientAccessPolicy> (Reference.cs:438). DuplexClientBase<T> derives from ClientBase<T> |
| Async scaffolding | None generated — Reference.svcmap:4 sets GenerateAsynchronousMethods to false |
| Remote technology | wcf: metadata from a mex endpoint; WCF DataContract namespaces in the schemas; netdx:Duplex DuplexMode="MultipleMessagesPerPoll", msb:BinaryEncoding, cdp:CompositeDuplex with WS-ReliableMessaging policy assertions (service.wsdl:3-24) |
This is not a wsdl.exe Web Reference: there is no SoapHttpClientProtocol base type anywhere in the generated code, and the artifact set (Reference.svcmap, .svcinfo files, DuplexClientBase<T>) is the svcutil/Service Reference shape.
The Silverlight contract namespace and the polling-duplex binding suggest the service was originally built for Silverlight clients. The vendor is inferred to be the CallRex call-recording platform, based on the proxy name, the shared callrexprod host, and the sibling CallRex proxy (see CallRex).
Construction¶
No construction exists in this repository. No source file builds an InstanceContext, implements IAgentStateServiceCallback, or constructs AgentStateServiceClient or ClientAccessPolicyClient.
Endpoint resolution¶
Resolution method: configured-endpoint, read from the consuming project's app.config. No hand-written code overrides it, because no code constructs the client.
| Endpoint name | Address | Binding | Contract | Evidence |
|---|---|---|---|---|
PollingDuplexHttpBinding_IAgentStateService |
http://callrexprod:8003/AgentStateService |
customBinding / PollingDuplexHttpBinding_IAgentStateService |
CallRexState.IAgentStateService |
app.config:71 |
WSDualHttpBinding_IAgentStateService |
http://callrexprod:8003/AgentStateService2 |
wsDualHttpBinding / WSDualHttpBinding_IAgentStateService |
CallRexState.IAgentStateService |
app.config:72 |
| (none) | — | — | CallRexState.IClientAccessPolicy |
No endpoint configured, and none in the WSDL |
Contract-name check: config contract="CallRexState.IAgentStateService" matches generated ConfigurationName="CallRexState.IAgentStateService" (Reference.cs:356) — no mismatch.
Ambiguity: two endpoints exist for one contract, so AgentStateServiceClient(InstanceContext) with no endpoint name would be ambiguous; a caller would have to pass an endpoint configuration name*. No such caller exists.
Generation-time origin (not runtime): http://localhost:8003/AgentStateService and http://localhost:8003/AgentStateService2 (service.wsdl:130,136). The configured host callrexprod was substituted after generation, matching the pattern seen on the sibling CallRex proxy.
Runtime applicability: a class library's app.config is not read at run time by a consuming host*. A host would need to copy this <client> block into its own configuration file. No host in this repository does so.
Binding configuration¶
| Binding | Settings | Evidence |
|---|---|---|
customBinding / PollingDuplexHttpBinding_IAgentStateService |
<binaryMessageEncoding /> + <httpTransport /> only |
app.config:38-41 |
wsDualHttpBinding / WSDualHttpBinding_IAgentStateService |
closeTimeout="00:01:00", openTimeout="00:01:00", receiveTimeout="00:10:00", sendTimeout="00:01:00", maxReceivedMessageSize="20000000", useDefaultWebProxy="false", readerQuotas maxStringContentLength="8192" maxArrayLength="16384", reliableSession ordered="true" inactivityTimeout="00:10:00", <security mode="None" /> |
app.config:44-48 |
Finding — polling-duplex binding is incomplete. The WSDL policy requires netdx:Duplex MultipleMessagesPerPoll (service.wsdl:6), but the generated customBinding (app.config:38-41) contains no polling-duplex binding element, so a desktop .NET client built from this configuration would lack the duplex-polling behavior the service requires. Polling duplex is a Silverlight client-side binding element that full .NET Framework does not ship. This gap is recorded, not remediated, on Tech debt.
Credential mode: wsDualHttpBinding uses security mode="None" (app.config:47). The custom binding declares no security element and no authentication scheme, so it is anonymous HTTP*.
Invocation path¶
Not applicable — there is no call site anywhere in this repository, and no type implements IAgentStateServiceCallback.
Related documentation¶
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/Service References/CallRexState/Reference.csServices/SAIF.Services.Web.Proxies/Service References/CallRexState/Reference.svcmapServices/SAIF.Services.Web.Proxies/Service References/CallRexState/service.wsdlServices/SAIF.Services.Web.Proxies/app.configServices/SAIF.Services.Web.Proxies/SAIF.Services.Web.Proxies.csproj