【发布时间】:2017-08-11 00:45:02
【问题描述】:
我正在创建一个 HTTPListener,它将使用 POST 到脚本正在侦听的 URI 的数据执行一些代码:
$timeout = New-Timespan -Minutes 10
$sw = [Diagnostics.Stopwatch]::StartNew()
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add('http://+:8912/')
while ($sw.elapsed -lt $timeout) {
$listener.Start()
$context = $listener.GetContext()
$request = $context.Request
$response = $context.Response
$InputStream = New-Object System.IO.StreamReader $Context.Request.InputStream
# $msg = $InputStream.ReadToEnd() | ConvertFrom-Json
if ($request.Url -match '/post$') {
$response.ContentType = 'application/json'
# $msg | Write-Output
$message = "Message Received"
$raw = $InputStream.ReadToEnd()
$raw | Write-Output
$raw | Out-file -FilePath C:\msg.json
}
if ($request.Url -match '/end$') { break }
[byte[]] $buffer = [System.Text.Encoding]::UTF8.GetBytes($message)
$response.ContentLength64 = $buffer.Length
$output = $response.OutputStream
$output.Write($buffer, 0, $buffer.Length)
$output.Close()
}
$listener.Stop()
我遇到的问题是即使$sw.elapsed -lt $timeout 是$false,侦听器也不会终止并继续脚本。
有没有办法让监听器在 10 分钟后终止并继续执行脚本?
【问题讨论】:
-
我只是使用一个计数器并包含一个 IF 语句来捕获计数器超过特定限制,如果这是真的使用
break语句来跳出循环。 -
出于调试目的打印 $sw.elapsed 以及 $timeout 以及 $sw.elapsed -lt $timeout 的结果,以便更好地了解循环中发生的情况。
-
@user4317867 你能举个例子吗?我对此进行了测试,它仍然不会打破循环..
标签: .net json powershell httplistener system.net