我正在使用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中,则可以接受。
答案 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方法。