private void SendRequest(WriteOperation operation, int timeout, IServiceRequest request)
{
bool success = false;
BufferCollection buffers = null;
try
{
// check for valid token.
TcpChannelToken token = CurrentToken;
if (token == null)
{
throw new ServiceResultException(StatusCodes.BadSecureChannelClosed);
}
// must return an error to the client if limits are exceeded.
bool limitsExceeded = false;
buffers = WriteSymmetricMessage(
TcpMessageType.Message,
operation.RequestId,
token,
request,
true,
out limitsExceeded);
BeginWriteMessage(buffers, operation);
buffers = null;
success = true;
if (limitsExceeded)
{
throw new ServiceResultException(StatusCodes.BadRequestTooLarge);
}
}
catch (Exception e)
{
operation.Fault(e, StatusCodes.BadRequestInterrupted, "Could not send request to server.");
}
finally
{
if (buffers != null)
{
buffers.Release(BufferManager, "SendRequest");
}
if (!success)
{
OperationCompleted(operation);
}
}
}
#endregion