API 响应代码在 powershell 脚本中无效
API response code is invalid in powershell script
我的 Web 应用程序存在严重的应用程序池问题。有时,我的 API 应用程序会给出 500 个错误,并且不会为任何请求发送任何响应。据我所知,没有逻辑或其他 运行 时间错误,到目前为止我无法确定该问题的根本原因。一旦我回收了应用程序池(应用程序池并未在此处停止),API 又开始工作了。
因此,在我找到该问题的确切根本原因之前,我需要 运行 计划的 powershell 脚本,它可以在 API 未正确响应时回收应用程序池。因此,我在 API 应用程序中创建了一个测试端点,我的计划是每 10 分钟调用一次该端点并检查 API 是否正常工作。
尽管 API 给出了 400 或 500 个错误,但我在 powershell 脚本中得到 200 作为响应代码。您可以在下面看到 ps-1 脚本,此处附有响应。
$HTTP_Request = [System.Net.WebRequest]::Create('http://api.employeeportal.com/V1/ApiStatus/Test?key=*****')
$error_count = 0;
for ($i=1; $i -le 3; $i++)
{
$HTTP_Response = $HTTP_Request.GetResponse()
$HTTP_Status = [int]$HTTP_Response.StatusCode
Write-Host $HTTP_Status
If ($HTTP_Status -eq 200) {
break
}
Else {
$error_count++
Write-Host "Error!"
}
}
Write-Host $error_count
If($error_count -eq 3){
Write-Host "App pool downn!!! RESTART--->>>"
}
If ($HTTP_Response -eq $null) { }
Else { $HTTP_Response.Close() }
为什么我得到 200 状态,即使实际响应是 404?有没有更好的方法来做到这一点?请帮忙!
谢谢
我终于想出了一个方法来做到这一点。感谢@Otter,我再次使用 -ErrorVariable 变量尝试了相同的方法并且它起作用了。如果有人正在寻找同类问题的答案,这里就是我的答案。
在解决方案中,我发送了 3 个请求以确保服务器正在响应。如果所有 3 个请求都出现服务器错误,那么我需要重新启动应用程序池。我还记录了我得到的服务器错误以供进一步参考。所以这将是一个完整的答案(我想是这样:))
$Logfile = "C:/Errors/log.log"
$error_count = 0;
$error_message = "";
function LogWrite
{
Param([string]$logstring)
Add-content $logfile -value $logstring
}
for ($i=1; $i -le 3; $i++)
{
Invoke-RestMethod http://api.employeeportal.com/V1/ApiStatus/Test?key=***** -ErrorVariable myerror
$statusCode = [int]$myerror.ErrorRecord.Exception.Response.StatusCode
If($statusCode -ge 500){
$error_count++
$error_message = $myerror.ErrorRecord.Exception.ToString()
}
else{
break
}
}
If($error_count -eq 3){
Restart-WebAppPool -Name "name of your app-pool"
LogWrite "====== APP-POOL RESTARTED..!!! ======="
LogWrite $(Get-Date)
LogWrite $error_message
LogWrite "=============================================="
}
我的 Web 应用程序存在严重的应用程序池问题。有时,我的 API 应用程序会给出 500 个错误,并且不会为任何请求发送任何响应。据我所知,没有逻辑或其他 运行 时间错误,到目前为止我无法确定该问题的根本原因。一旦我回收了应用程序池(应用程序池并未在此处停止),API 又开始工作了。
因此,在我找到该问题的确切根本原因之前,我需要 运行 计划的 powershell 脚本,它可以在 API 未正确响应时回收应用程序池。因此,我在 API 应用程序中创建了一个测试端点,我的计划是每 10 分钟调用一次该端点并检查 API 是否正常工作。
尽管 API 给出了 400 或 500 个错误,但我在 powershell 脚本中得到 200 作为响应代码。您可以在下面看到 ps-1 脚本,此处附有响应。
$HTTP_Request = [System.Net.WebRequest]::Create('http://api.employeeportal.com/V1/ApiStatus/Test?key=*****')
$error_count = 0;
for ($i=1; $i -le 3; $i++)
{
$HTTP_Response = $HTTP_Request.GetResponse()
$HTTP_Status = [int]$HTTP_Response.StatusCode
Write-Host $HTTP_Status
If ($HTTP_Status -eq 200) {
break
}
Else {
$error_count++
Write-Host "Error!"
}
}
Write-Host $error_count
If($error_count -eq 3){
Write-Host "App pool downn!!! RESTART--->>>"
}
If ($HTTP_Response -eq $null) { }
Else { $HTTP_Response.Close() }
为什么我得到 200 状态,即使实际响应是 404?有没有更好的方法来做到这一点?请帮忙!
谢谢
我终于想出了一个方法来做到这一点。感谢@Otter,我再次使用 -ErrorVariable 变量尝试了相同的方法并且它起作用了。如果有人正在寻找同类问题的答案,这里就是我的答案。
在解决方案中,我发送了 3 个请求以确保服务器正在响应。如果所有 3 个请求都出现服务器错误,那么我需要重新启动应用程序池。我还记录了我得到的服务器错误以供进一步参考。所以这将是一个完整的答案(我想是这样:))
$Logfile = "C:/Errors/log.log"
$error_count = 0;
$error_message = "";
function LogWrite
{
Param([string]$logstring)
Add-content $logfile -value $logstring
}
for ($i=1; $i -le 3; $i++)
{
Invoke-RestMethod http://api.employeeportal.com/V1/ApiStatus/Test?key=***** -ErrorVariable myerror
$statusCode = [int]$myerror.ErrorRecord.Exception.Response.StatusCode
If($statusCode -ge 500){
$error_count++
$error_message = $myerror.ErrorRecord.Exception.ToString()
}
else{
break
}
}
If($error_count -eq 3){
Restart-WebAppPool -Name "name of your app-pool"
LogWrite "====== APP-POOL RESTARTED..!!! ======="
LogWrite $(Get-Date)
LogWrite $error_message
LogWrite "=============================================="
}