private void DetachRequestQueueFromUrlGroup() { Debug.Assert(_urlGroupId != 0, "DetachRequestQueueFromUrlGroup can't detach using Url group id 0."); // // Break the association between request queue and url group. After this, requests for registered urls // will get 503s. // Note that this method may be called multiple times (Stop() and then Abort()). This // is fine since http.sys allows to set HttpServerBindingProperty multiple times for valid // Url groups. // Interop.HttpApi.HTTP_BINDING_INFO info = new Interop.HttpApi.HTTP_BINDING_INFO(); info.Flags = Interop.HttpApi.HTTP_FLAGS.NONE; info.RequestQueueHandle = IntPtr.Zero; IntPtr infoptr = new IntPtr(&info); uint statusCode = Interop.HttpApi.HttpSetUrlGroupProperty(_urlGroupId, Interop.HttpApi.HTTP_SERVER_PROPERTY.HttpServerBindingProperty, infoptr, (uint)Marshal.SizeOf(typeof(Interop.HttpApi.HTTP_BINDING_INFO))); if (statusCode != Interop.HttpApi.ERROR_SUCCESS) { if (NetEventSource.IsEnabled) NetEventSource.Error(this, $"DetachRequestQueueFromUrlGroup {SR.Format(SR.net_listener_detach_error, statusCode)}"); } }
private void AttachRequestQueueToUrlGroup() { // // Set the association between request queue and url group. After this, requests for registered urls will // get delivered to this request queue. // Interop.HttpApi.HTTP_BINDING_INFO info = new Interop.HttpApi.HTTP_BINDING_INFO(); info.Flags = Interop.HttpApi.HTTP_FLAGS.HTTP_PROPERTY_FLAG_PRESENT; info.RequestQueueHandle = DangerousGetHandle(); IntPtr infoptr = new IntPtr(&info); SetUrlGroupProperty(Interop.HttpApi.HTTP_SERVER_PROPERTY.HttpServerBindingProperty, infoptr, (uint)Marshal.SizeOf(typeof(Interop.HttpApi.HTTP_BINDING_INFO))); }