Ejemplo n.º 1
0
        internal RequestQueue(UrlGroup urlGroup, ILogger logger)
        {
            _urlGroup = urlGroup;
            _logger   = logger;

            HttpRequestQueueV2Handle requestQueueHandle = null;
            var statusCode = HttpApi.HttpCreateRequestQueue(
                HttpApi.Version, null, null, 0, out requestQueueHandle);

            if (statusCode != UnsafeNclNativeMethods.ErrorCodes.ERROR_SUCCESS)
            {
                throw new HttpSysException((int)statusCode);
            }

            // Disabling callbacks when IO operation completes synchronously (returns ErrorCodes.ERROR_SUCCESS)
            if (HttpSysListener.SkipIOCPCallbackOnSuccess &&
                !UnsafeNclNativeMethods.SetFileCompletionNotificationModes(
                    requestQueueHandle,
                    UnsafeNclNativeMethods.FileCompletionNotificationModes.SkipCompletionPortOnSuccess |
                    UnsafeNclNativeMethods.FileCompletionNotificationModes.SkipSetEventOnHandle))
            {
                throw new HttpSysException(Marshal.GetLastWin32Error());
            }

            Handle      = requestQueueHandle;
            BoundHandle = ThreadPoolBoundHandle.BindHandle(Handle);
        }
Ejemplo n.º 2
0
        public async Task Server_ConnectExistingQueueName_Success()
        {
            string address;
            var    queueName = Guid.NewGuid().ToString();

            // First create the queue.
            HttpRequestQueueV2Handle requestQueueHandle = null;
            var statusCode = HttpApi.HttpCreateRequestQueue(
                HttpApi.Version,
                queueName,
                null,
                0,
                out requestQueueHandle);

            Assert.True(statusCode == UnsafeNclNativeMethods.ErrorCodes.ERROR_SUCCESS);

            // Now attach to the existing one
            using (Utilities.CreateHttpServer(out address, httpContext =>
            {
                return(Task.FromResult(0));
            }, options =>
            {
                options.RequestQueueName = queueName;
                options.RequestQueueMode = RequestQueueMode.Attach;
            }))
            {
                var psi = new ProcessStartInfo("netsh", "http show servicestate view=requestq")
                {
                    RedirectStandardOutput = true
                };
                using var process = Process.Start(psi);
                process.Start();
                var netshOutput = await process.StandardOutput.ReadToEndAsync();

                Assert.Contains(queueName, netshOutput);
            }
        }
Ejemplo n.º 3
0
 internal static extern unsafe uint HttpCreateRequestQueue(HTTPAPI_VERSION version, string pName,
                                                           UnsafeNclNativeMethods.SECURITY_ATTRIBUTES pSecurityAttributes, HTTP_CREATE_REQUEST_QUEUE_FLAG flags, out HttpRequestQueueV2Handle pReqQueueHandle);