繁体   English   中英

Powershell 不捕获来自 NewWebServiceProxy 的异常

[英]Powershell don't catch exception from NewWebServiceProxy

我在从 NewWebServiceProxy cmdlet 捕获异常时遇到问题

try {
    $myService = New-WebServiceProxy -Uri "http://localhost/someservice.svc"
}
catch {
    Write-Log ([string]::Format("Error : {0}", $_.Exception.Message))
}

当我运行它时,我得到这个未处理的异常:New-WebServiceProxy:

请求失败,状态为 HTTP 404:未找到。 在 C:\Users\SomeUser\AppData\Local\Temp\d052b604-38ad-4827-b952-4ebc66e79c69.ps1:2 char:18 + $myService = New-WebServiceProxy -Uri "http://localhost/someservice.svc" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ + CategoryInfo: ObjectNotFound: ( http://localhost/someservice.svc:Uri ) [New-WebServiceProxy], WebExc eption + FullyQualifiedErrorId: WebException,Microsoft.PowerShell.Commands.NewWebServiceProxy

有人会问我为什么 try catch 不捕获这个异常? 感谢您的回答

这是在PowerShell中捕获未处理的异常时最常见的问题之一。 您需要在命令New-WebServiceProxy使用-ErrorAction Stop

try {
    $myService = New-WebServiceProxy -Uri "http://localhost/someservice.svc" -ErrorAction Stop
}
catch [System.Net.WebException]{
    Write-Log ([string]::Format("Error : {0}", $_.Exception.Message))
}

更新:要捕获Http异常包括[System.Net.WebException]Keith Hill在下面的评论中所述。

对我有帮助的是做一些更像是

try{
    New-WebServiceProxy -URI $webURL -ErrorAction Stop
}
catch [System.Net.WebException] {
        return [PSCustomObject]@{
            SOAPStatus = 'Failed'
            SOAPException = $_.Exception.Message
            SOAPInnerException = $_.Exception.InnerException.Message
        } 
    }
    catch {
        return [PSCustomObject]@{
            SOAPStatus = 'Failed'
            SOAPError = $_.Exception.Message
        } 
    }

通过捕获内部异常,我发现如果有问题,我也会得到 web 响应。 在这些情况下,output 通常是这样的:

SOAPStatus:SOAPException 失败:下载“http://webserviceurl.com:1010/SystemServiceQuery”时出错。

SOAPInnerException:请求失败,状态为 HTTP 401:未经授权。

当然,您随后可以捕获什么类型的 innerexception 并向您的用户等提供更有用的反馈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM