New-WebServiceProxy cmdlet因“操作已超时”异常而失败

时间:2013-12-10 16:40:11

标签: asp.net web-services powershell timeout powershell-v2.0

我正在使用PowerShell部署ASP.NET应用程序。它包括Web服务,我需要在部署Web应用程序后立即调用其中一种方法。显然,这个请求需要时间,因为它应该“热身”网站。

因此,我对New-WebServiceProxy进行简单调用以获取代理对象,然后调用方法:

$ps = New-WebServiceProxy -Uri "http://mysite/folder/myservice.asmx"

但是,此操作需要一些时间,并且始终因超时异常而失败。我应该说,这一切都发生在远程会话中。当应用程序在本地部署时(因此脚本在本地会话中运行),调用成功。

我已经验证了web.config中executionTimeout的{​​{1}} - 它有很长的超时时间。但我的假设是在第一次通话之前没有考虑到它。所以,我认为它是<httpRuntime>的一些属性/开关,它应该影响这种行为,但我找不到它。

有没有人有想法?

P.S。我正在使用PowerShell 2.0,但如果解决方案是在v3.0中,则可以接受。

2 个答案:

答案 0 :(得分:1)

如果问题确实是超时,那么在PowerShell V3上尝试这种方法:

$wr = Invoke-WebRequest http://mysite/folder/myservice.asmx?wsdl -TimeoutSec 30
$wr.Content | Out-File -enc utf8 c:\myservice.wsdl
$ps = New-WebServiceProxy file:///c:\myservice.wsdl

BTW你的问题可能是URI

上缺少?wsdl

答案 1 :(得分:1)

我最终得到的解决方法是在部署之后和调用Web方法之前预热网站。像这样的东西(也适用于PowerShell 2.0):

$request = [system.net.WebRequest]::Create("http://mysite")
$request.Timeout = 2400000   # some big enough timeout goes here
$request.GetResponse() | Out-Null

此后,对New-WebServiceProxy的调用成功,可以调用Web方法。