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()
andCNamedServerCollection::GetNamesAndStatuses()
. - Added new functions to
CNamedServerCollection
, a version ofCNamedServerCollection::StartAcceptingConnections()
that takes an array of server names to restrict the servers which are started andCNamedServerCollection::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()
andCNamedServerCollection::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()
andCombinePath()
- Added
MakePathAbsolute()
- Bug fix to
CSystemTime::AddMonths()
. CSystemTime::AddDays()
,CSystemTime::AddMonths()
andCSystemTime::AddYears()
now all take anint
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 newIDisplayMessageBox
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()
andIService::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 aDWORD
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.