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()
}