Back: CSharp Reference Implementation

The Direct Config Service WCF middle tier is the backend store for the .NET Reference Implementation. It is used to CRUD domains, addresses, certificates, anchors and Dns records.

Config File

All configuration is stored in Web.config.
  • The web.config checked into the source tree (csharp\config\service\web.config) contains sample configuration.
  • When you deploy, you should replace this web.config with one of your own.
  • Because the Config Web Service runs as a WCF service hosted in IIS, the configuration file must be named Web.config

Standard Config Sections

Make sure your config file contains the Standard Direct Config Sections
<configuration>
  <configSections>
    <section name="logging" type="Health.Direct.Common.Diagnostics.LogFileSection, Health.Direct.Common" />
    <section name="ioc" type="Health.Direct.Common.Container.IocContainerSection, Health.Direct.Common" />
    <section name="container" type="Health.Direct.Common.Container.SimpleContainerSection, Health.Direct.Common" />
    ....
  </configSections>
 
   ...
<configuration>

Connect String

/configuration/connectionStrings (Required)

<configuration>
...
    <connectionStrings>
        <add name="configStore" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=DirectConfig;Integrated Security=SSPI;"/>

AppSettings

/configuration/appSettings

<configuration>
...
    <appSettings>
       <add key="queryTimeout" value="00:00:10" />
     </appSettings>
...

key
Required
Type
Default
Description
queryTimeout
No
Timespan
00:00:05
5 seconds

Logging

/logging (Required)
Your customized logging using the logging section.

<configuration>
...
   <logging>...

WCF


The service implements 5 individual Services:

CertificateService

Endpoints:
  • Certificates
  • Anchors

DomainManager

Endpoints:
  • Domains
  • Addresses
  • DnsRecords

SettingsManager

Endpoints:
  • Blobs
  • Properties

AuthManager

Endpoints:
  • Authentication

MonitorService (V1.1)

  • Outgoing message track
  • Incoming notification track and correlate

Bindings

Make sure your configuration contains the following WCF Bindings.
  • Tested the system with basicHttpBinding.
  • The behavior with other bindings is not known - currently there are no plans to try them.

    <system.serviceModel>
        <services>
            <service behaviorConfiguration="Health.Direct.Config.Service.CertificateServiceBehavior"
                name="Health.Direct.Config.Service.CertificateService">
                <endpoint address="Certificates" binding="basicHttpBinding" contract="Health.Direct.Config.Service.ICertificateStore" />
                <endpoint address="Anchors" binding="basicHttpBinding" contract="Health.Direct.Config.Service.IAnchorStore" />
            </service>
            <service behaviorConfiguration="Health.Direct.Config.Service.DomainManagerService"
                name="Health.Direct.Config.Service.DomainManagerService">
                <endpoint address="Addresses" binding="basicHttpBinding" contract="Health.Direct.Config.Service.IAddressManager" />
                <endpoint address="Domains" binding="basicHttpBinding" contract="Health.Direct.Config.Service.IDomainManager" />
                <endpoint address="DnsRecords" binding="basicHttpBinding" contract="Health.Direct.Config.Service.IDnsRecordManager" />
            </service>
            <service behaviorConfiguration="Health.Direct.Config.Service.AuthManagerService"
                name="Health.Direct.Config.Service.AuthManagerService">
                <endpoint address="Authentication" binding="basicHttpBinding"
                    contract="Health.Direct.Config.Service.IAuthManager" />
            </service>
            <service behaviorConfiguration="Health.Direct.Config.Service.SettingsManagerBehavior"
                name="Health.Direct.Config.Service.SettingsManager">
              <endpoint address="Properties" binding="basicHttpBinding" contract="Health.Direct.Config.Service.IPropertyManager" />
              <endpoint address="Blobs" binding="basicHttpBinding" bindingConfiguration="blobHttp" contract="Health.Direct.Config.Service.IBlobManager"/>
            </service>
            <service behaviorConfiguration="Health.Direct.Config.Service.MonitorService"
                name="Health.Direct.Config.Service.MonitorService">
                <endpoint address="Dispositions" binding="basicHttpBinding" contract="Health.Direct.Config.Service.IMdnMonitor" />
            </service>
        </services>
        <bindings>
          <basicHttpBinding>
            <!--Max blobs at 1MB-->
            <binding name="blobHttp" maxReceivedMessageSize="1048576">
              <readerQuotas maxArrayLength="1048576"></readerQuotas>
            </binding>
          </basicHttpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="Health.Direct.Config.Service.CertificateServiceBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="true" />
                </behavior>
                <behavior name="Health.Direct.Config.Service.DomainManagerService">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="true" />
                </behavior>
                <behavior name="Health.Direct.Config.Service.AuthManagerService">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="true" />
                </behavior>
                <behavior name="Health.Direct.Config.Service.SettingsManagerBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="true" />
                </behavior>
                <behavior name="Health.Direct.Config.Service.MonitorService">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>

Performance & Concurrency

By default, WCF will throttle the number of concurrent calls to each service. The default is 16.

You can increase or adjust the values by changing the behavior section of your config file.
Adjust WCF Concurrency Throttling

You will typically want to increase the maxConcurrentCalls value.