我正在使用:
let callTheAPI = async {
printfn "\t\t\tMAKING REQUEST at %s..." (System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"))
let! response = Http.AsyncRequestStream(url,query,headers,httpMethod,requestBody)
printfn "\t\t\t\tREQUEST MADE."
}
并且
let cts = new System.Threading.CancellationTokenSource()
let timeout = 1000*60*4//4 minutes (4 mins no grace)
cts.CancelAfter(timeout)
Async.RunSynchronously(callTheAPI,timeout,cts.Token)
use respStrm = response.ResponseStream
respStrm.Flush()
writeLinesTo output (responseLines respStrm)
要调用Web API(REST),let! response = Http.AsyncRequestStream(url,query,headers,httpMethod,requestBody)
只会挂起某些查询。特别需要很长时间(> 4分钟)的时间。这就是为什么我把它做成Async并且暂停了4分钟。 (我收集超时的调用并使用较小的时间范围参数进行调用)。
我首先从FSharp.Data启动Http.RequestStream
,但我无法为此添加超时,因此脚本只会“挂起”。
我在IIS管理器中查看了API的IIS服务器和application pool
Worker Process
active requests
,我可以看到请求进入并再次运行。然后他们'消失'并且F#脚本挂起。我无法在脚本端或服务器端的任何位置找到错误消息。
我添加了Flush()
并删除了超时,它仍然挂起。 (删除过程中的异步)
其他: 成功通话。呼叫失败后可以成功呼叫。但是,它似乎达到了所有呼叫超时的程度,并且甚至没有再到达服务器。 (工作进程活动请求不显示查询)
更新: 我让Fsx脚本输出查询并通过IRM运行它们现在出现问题(我有超时并且它永远不会锁定)。我怀疑FSharp.Data.Http。
存在问题