public async Task Server_CreateOrAttach_NoUrlPrefix_NewUrlPrefixWorks() { var queueName = Guid.NewGuid().ToString(); // Create a queue without a UrlGroup or any UrlPrefixes HttpRequestQueueV2Handle requestQueueHandle = null; var statusCode = HttpApi.HttpCreateRequestQueue( HttpApi.Version, queueName, IntPtr.Zero, 0, out requestQueueHandle); Assert.True(statusCode == UnsafeNclNativeMethods.ErrorCodes.ERROR_SUCCESS); using var server = Utilities.CreateServer(options => { options.RequestQueueName = queueName; options.RequestQueueMode = RequestQueueMode.CreateOrAttach; options.UrlPrefixes.Add("http://localhost:0"); }); var address = server.Options.UrlPrefixes.First().FullPrefix; var responseTask = SendRequestAsync(address); var context = await server.AcceptAsync(Utilities.DefaultTimeout); context.Dispose(); var response = await responseTask; Assert.Equal(string.Empty, response); }
public async Task Server_ConnectExistingQueueName_Success(RequestQueueMode queueMode) { string address; var queueName = Guid.NewGuid().ToString(); // First create the queue. HttpRequestQueueV2Handle requestQueueHandle = null; var statusCode = HttpApi.HttpCreateRequestQueue( HttpApi.Version, queueName, IntPtr.Zero, 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 = queueMode; })) { 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); var prefix = UrlPrefix.Create(address); switch (queueMode) { case RequestQueueMode.Attach: Assert.Equal("0", prefix.Port); break; case RequestQueueMode.CreateOrAttach: Assert.NotEqual("0", prefix.Port); Assert.Contains(address, netshOutput, StringComparison.OrdinalIgnoreCase); break; } } }
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); } }
internal static extern unsafe uint HttpCreateRequestQueue(HTTPAPI_VERSION version, string pName, Interop.Kernel32.SECURITY_ATTRIBUTES *pSecurityAttributes, uint flags, out HttpRequestQueueV2Handle pReqQueueHandle);
internal static extern unsafe uint HttpCreateRequestQueue(HTTPAPI_VERSION version, string?pName, UnsafeNclNativeMethods.SECURITY_ATTRIBUTES?pSecurityAttributes, HTTP_CREATE_REQUEST_QUEUE_FLAG flags, out HttpRequestQueueV2Handle pReqQueueHandle);
internal static unsafe partial uint HttpCreateRequestQueue(HTTPAPI_VERSION version, string?pName, IntPtr pSecurityAttributes, HTTP_CREATE_REQUEST_QUEUE_FLAG flags, out HttpRequestQueueV2Handle pReqQueueHandle);