Latest release of The Server Framework: 6.5.6

Version 6.5.6 of The Server Framework was released today.

This release contains some bug fixes, a selection of minor improvements and improved support for the Visual Studio 2012 (Note that there will be a further release shortly after Visual Studio 2012’s RTM if needed to address any changes between the Release Candidate and the RTM versions).

If you use either the Read Timeout filter or the Flow Control filter then you should install this update. If you use the Service Tools library there are several improvements which make automating service installation and removal easier and make handling complex multi-instance start up restrictions easier.

This release includes the following, see the release notes, here, for full details of all changes.

  • Updated our support of Visual Studio 2012 (11) to the RC version. Added a few more warning suppressions. Renamed the output directories. Renamed the solutions and projects from .11. to .2012.
  • Bug fix to the changes in 6.5.5 to CReadTimeoutStreamSocketConnectionFilter. Connection filters now get notified of socket shutdown, the read timeout filter needs this so that it can correctly manage the socket reference that it now holds. The bug manifests in connections that are cleanly shutdown not closing correctly until a read timeout occurs.
  • Breaking Change new virtual function on interface, IServerControl::GetStatus() which returns the status of the server.
  • Added new a new interface, IManageNamedServers
  • Added new functions to CNamedServerCollection, CNamedServerCollection::GetNames() and CNamedServerCollection::GetNamesAndStatuses().
  • Added new functions to CNamedServerCollection, a version of CNamedServerCollection::StartAcceptingConnections() that takes an array of server names to restrict the servers which are started and CNamedServerCollection::StopAcceptingConnections() which returns a list of server names that were stopped. These can be used to allow you to have some servers which are not started by default whilst still allowing normal “pause/resume” functionality.
  • Changed functionality. CNamedServerCollection::StartAcceptingConnections() and CNamedServerCollection::StopAcceptingConnections() now only call through to the server if it isn’t already in the desired state.
  • Bug fix to CFlowControlStreamSocketConnectionFilter. We now correctly hold a single reference to the socket when any buffers are stored in the flow control queue. This keeps the socket alive even when the only thing that is keeping it alive are the pending writes (which have yet to be issued).
  • Added TryCombinePath() and CombinePath()
  • Added MakePathAbsolute()
  • Bug fix to CSystemTime::AddMonths().
  • CSystemTime::AddDays(), CSystemTime::AddMonths() and CSystemTime::AddYears() now all take an int to specify the value to add and the value can be negative…
  • Added CSystemTime::GetDaysInMonth(), CSystemTime::IsLeapYear(), CSystemTime::GetYearsDifferent(), CSystemTime::GetMonthsDifferent(), CSystemTime::GetDaysDifferent().
  • CTempDirectory now includes the process id in the temporary directory name.
  • Breaking Change IService::ParseServiceSpecificCommandLineArgument() function signature change, it can now return an error message on failure.
  • Breaking Change New virtual function on interface, IService::CheckWeCanRun(). This is called before we initialise the services, but after we’ve parsed service specific command line arguments, it’s a chance to report any fatal errors (due to incorrect command line arguments, or other restrictions) via the new IDisplayMessageBox interface which abides by the /noMessages command line switch and knows if you’re running as a service and can’t display messages, etc.
  • Breaking Change New virtual function on interface, IService::OnStartupFailure(). This gets passed any error message that will be displayed in a message box as a result of a start up failure. It allows you to log this message rather than enabling ‘message box logging’ for all message boxes.
  • Added “Per instance” external events for controlling multi-instance “services” which are running as exes via the /run switch. Basically this adds a uniquely named shutdown and pause event per service instance so that you can control the instances separately.
  • Bug fix. We no longer include support for RegisterPowerSettingNotification() in Windows Server 2003 as the entrypoint doesn’t exist even though the SDK headers suggest it should.
  • Breaking Change IService::OnInstallPerformanceCounters() and IService::OnRemovePerformanceCounters() function signature changes. These now take a default error message but allow you to change it if the actual error that you encounter is different due to the fact that you’re doing more complex add/removal operations…
  • Breaking Chnage The exe now returns an exit code of 0 if you call it with /help. Previously it returned and exit code of 255 indicating an error.
  • CPerformanceCounterInstaller::Uninstall() now returns a DWORD which details any reason for failure to remove the counters. We also remove the counter dll during counter removal rather than just removing the registry entries. This means that if perfmon is currently open or the counter dll is in use or inaccessible then the registry entries will NOT be removed. This prevents a removal appearing to succeed and a subsequent re-installation failing because the old counter dll is still present and in use.