Web Services Powershell未从NewWebServiceProxy捕获异常

7cjasjjr  于 2022-11-15  发布在  Shell
关注(0)|答案(2)|浏览(165)

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

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

当我运行它时,我得到这个未处理的异常:新Web服务代理:
请求失败,HTTP状态为404:未找到。位置为C:\用户\某个用户\应用程序数据\本地\临时\d 052 b604 - 38 ad-4827-b 952 -4ebc66e79c69.ps1:2 char:18 + $myService =新的Web服务代理URI "http://localhost/someservice.svc" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +类别信息:找不到对象:(http://localhost/someservice.svc:Uri)[新的Web服务代理],Web例外+完全限定的错误ID:服务器发生异常。
有人可能会问我为什么尝试捕获而不捕获这个异常?

sbtkgmzw

sbtkgmzw1#

这是在powershell中捕获未处理异常时最常见的问题之一。

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

更新:要捕获Http异常,请包括基思Hill在下面的注解中指出的[System.Net.WebException]

f2uvfpb9

f2uvfpb92#

帮助我的是

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响应。在这些情况下,通常会有如下输出:
SOAP状态:失败的SOAPException:下载“”时出错。
SOAP内部异常:请求失败,HTTP状态为401:未经授权。
当然,您可以捕获什么类型的内部异常,并向您的用户给予更有用的反馈。

相关问题