4

我在从 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 不捕获这个异常?感谢您的回答

4

2 回答 2

7

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

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

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

于 2013-09-03T14:08:10.827 回答
0

帮助我的是做一些更像

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

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

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

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

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

于 2022-03-04T21:30:08.890 回答