【发布时间】:2015-01-29 17:42:10
【问题描述】:
目前我有一个 .NET 应用程序,使用他们的 API 登录到 SalesForce。从这里我查询一个对象以提取报告信息并构建一个将导出文件的 URL。代码就是这样。
Dim request As HttpWebRequest
Dim response As HttpWebResponse
Dim stream as Stream
request = CType(WebRequest.Create(URL), HttpWebRequest)
request.Method = "GET"
request.Headers.Add("Cookie", "sid=" & header.sessionId)
response = CType(request.GetResponse(), HttpWebResponse)
stream = response.GetResponseStream()
我上面的 header.sessionId 是 SalesForce Session Header,它捕获我的会话以成功登录。
此应用程序在本地测试或在生产服务器(在 Visual Studio 2010 中)上运行时可以成功运行。我已将其设置为作为导致问题的计划任务运行。该任务设置为在服务器上以管理员帐户身份运行,如果手动启动(右键单击任务 -> 运行)或在运行时保持与服务器的连接,则可以工作。如果我断开与服务器的连接并且任务运行,我每次都会收到“System.Net.WebException:操作在 System.Net.HttpWebRequest.GetResponse() 处超时”错误。然后手动登录并启动应用程序。
如上所述,这设置为作为管理员帐户运行,并且我已为该帐户提供了完全的安全控制权。我没有选中“仅在登录时运行”,也没有将其设置为仅在空闲时运行。
据我所知,Web 请求的默认超时时间是 100,000 毫秒或 100 秒。在达到该限制之前,此任务会超时。就在显示的代码之前,我检查以确认我的会话仍然有效,如果不是,则更新我的会话。这个超时总是发生在第一个尝试下载的报告上,但是当手动运行时,我可以在 2 分钟内下载大约 25 个报告。
有什么想法吗?
【问题讨论】:
-
...您是否尝试过延长超时时间?
-
我尝试了多个不同的超时,在所有情况下超时都发生在达到限制之前。
-
等一下,当你没有达到超时时它会给你一个超时错误?也许您需要添加一个保持活动状态。
-
KeepAlive 的默认值为 True。不过我会尝试添加它。
-
我不知道这是否是问题所在,但在执行此类工作时我总是添加 300 的保活值:
request.Headers.Add("Keep-Alive", "300")。您是否也尝试过使用 Telerik Fiddler telerik.com/fiddler 等 Web 调试代理来查看服务器上实际发生的情况?
标签: vb.net salesforce httpwebrequest scheduled-tasks