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);
    }
示例#2
0
    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;
            }
        }
    }
示例#3
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);
        }
    }
示例#4
0
 internal static extern unsafe uint HttpCreateRequestQueue(HTTPAPI_VERSION version, string pName,
                                                           Interop.Kernel32.SECURITY_ATTRIBUTES *pSecurityAttributes, uint flags, out HttpRequestQueueV2Handle pReqQueueHandle);
示例#5
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);
示例#6
0
 internal static unsafe partial uint HttpCreateRequestQueue(HTTPAPI_VERSION version, string?pName,
                                                            IntPtr pSecurityAttributes, HTTP_CREATE_REQUEST_QUEUE_FLAG flags, out HttpRequestQueueV2Handle pReqQueueHandle);