private void SendCloseSecureChannelRequest(WriteOperation operation)
{
Utils.Trace("Channel {0}: SendCloseSecureChannelRequest()", ChannelId);
// supress reconnects if an error occurs.
m_waitBetweenReconnects = Timeout.Infinite;
// check for valid token.
TcpChannelToken currentToken = CurrentToken;
if (currentToken == null)
{
throw new ServiceResultException(StatusCodes.BadSecureChannelClosed);
}
CloseSecureChannelRequest request = new CloseSecureChannelRequest();
request.RequestHeader.Timestamp = DateTime.UtcNow;
// limits should never be exceeded sending a close message.
bool limitsExceeded = false;
// construct the message.
BufferCollection buffers = WriteSymmetricMessage(
TcpMessageType.Close,
operation.RequestId,
currentToken,
request,
true,
out limitsExceeded);
// send the message.
try
{
BeginWriteMessage(buffers, operation);
buffers = null;
}
finally
{
if (buffers != null)
{
buffers.Release(BufferManager, "SendCloseSecureChannelRequest");
}
}
}