HTTPListerner没有响应while语句

时间:2017-03-19 20:17:19

标签: .net json powershell httplistener system.net

我正在创建一个HTTPListener,它将执行一些代码,其中包含对脚本正在侦听的URI的POST数据:

$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分钟后终止并继续运行脚本?

1 个答案:

答案 0 :(得分:0)

这是脚本块的一部分,但这个概念适用于我的情况。在我的测试中,我需要exit,因为此脚本块在运行空间中运行。

do{$counter++

Start-Sleep -Seconds 1
 IF($counter -ge 600){#"Waited too long"
        [PsCustomObject]@{
             "Server" =  $server
             "Status" = "FailedToReboot!"
          }#end custom logging object
        exit
  }#end if.
 }#end do loop.
until (-not (Test-Connection -ComputerName $server -Count 1 -Quiet))