Powershell: Stop-Job зависает в ожидании последнего ответа `HttpListener` - PullRequest
0 голосов
/ 03 февраля 2020

Stop-Job -Name Foobar висит до отправки запроса Http. Я могу открыть localhost:8004 в Chrome, и он перестает зависать.

Текущий обходной путь - остановить работу, перейдя к localhost:8004, добавив /end в конец URL. Это останавливает все правильно.

Как мне Stop-Job -Name Foobar и заставить его остановить все так же, как это делает /end.

Сценарий Powershell ниже:

Start-Job -Name Foobar -ScriptBlock {

    # Create a listener on port 8004
    $listener = New-Object System.Net.HttpListener
    $listener.Prefixes.Add('http://+:8004/') 
    $listener.Start()

    # Run until you send a GET request to /end
    while ($true) 
    {
        $context = $listener.GetContext() 
        $request = $context.Request
        $response = $context.Response


        # Hotfix 'API Shutdown'
        # if GET request for '/end'
        if ($request.Url.AbsolutePath -match 'end($|\?)') 
        { 
            break 
        } 
        else
        {
            if ($request.Url.AbsolutePath -ne '/favicon.ico')
            {
               $message = @{
                   'message' = "PLACEHOLDER"
               } | ConvertTo-Json 
               $response.ContentType = 'application/json'

            # Convert the data to UTF8 bytes
            [byte[]]$buffer = [System.Text.Encoding]::UTF8.GetBytes($message)

            # Set length of response
            $response.ContentLength64 = $buffer.length

            # Write response out and close
            $output = $response.OutputStream
            $output.Write($buffer, 0, $buffer.length)
            $output.Close()
            } 
        }
    }
    $listener.Stop()
}
...