private void Subscribe(IConnection connection, IIdsDispenser dispenser, SearchRequest request)
        {
            CodeContract.Requires(connection != null);
            CodeContract.Requires(dispenser != null);

            var requestId = dispenser.NextRequestId();
            
            this.subscriptions = new List<IDisposable>
            {
                connection.Subscribe((ContractDataMessage message) => message.RequestId == requestId,
                    this.OnContractDataMessage),
                connection.Subscribe((ContractDataEndMessage message) => message.RequestId == requestId,
                    this.OnContractDataEndMessage),
                connection.SubscribeForRequestErrors(requestId, this.OnError)
            };

            SendRequest(request, requestId, connection);
        }