public virtual void Request(uint target_handle,
                                    HandleType handle_type,
                                    IDictionary <string, object> properties,
                                    bool replace)
        {
            IDictionary <string, object> channel_specs = new Dictionary <string, object> ();

            channel_specs.Add(Constants.CHANNEL_IFACE + ".ChannelType",
                              ChannelType);
            channel_specs.Add(Constants.CHANNEL_IFACE + ".TargetHandleType",
                              handle_type);
            channel_specs.Add(Constants.CHANNEL_IFACE + ".TargetHandle",
                              target_handle);

            if (VerifyRequest(target_handle, properties))
            {
                if (replace)
                {
                    CleanUpIfClosed(target_handle, GetDispatchingKey(properties));
                }

                CopyRequestProperties(properties, channel_specs);

                ObjectPath object_path;
                Requests.CreateChannel(channel_specs, out object_path, out channel_properties);
            }
        }