我有一个Yesod web应用程序,它调用另一个服务器上的web服务。我重用yesod中的Http管理器来处理对该web服务的请求。在某些调用中,我收到了Yesod错误,我不确定为什么Yesod错误处理程序会起作用,因为错误处理不是Manager的一部分。我的代码在HTTP响应上执行自己的状态处理(我在请求上执行let req' = req { H.checkStatus = \_ _ _ -> Nothing } )。
我得到的错误是:
07/Jun/2013:14:05:15 +0200 [Error#yesod-core] ParseError {errorContexts = [], errorMessage = "Failed reading: satisfy", errorPosition = 1:1} @(yesod-core-1.2.0.4:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:471:5)我有一个明显的印象,web服务返回一个错误,Yesod正在处理它,而不是我的代码。我的web服务客户端代码抛出异常,这些异常被捕获并被重定向到错误页面,当我在调用服务时出错时,这种方法工作得很好,我只是不明白为什么我在某些请求上会得到这个ParseError。
我正在转储请求和从web服务获得的响应,但在我的日志中看不到响应,这似乎表明yesod正在截获响应。
有什么想法吗?
发布于 2013-06-07 20:29:35
好吧,对于这个愚蠢的问题我很抱歉,我已经弄明白了。http-conduit代码抛出了ParseError,而我的代码没有捕捉到它,所以Yesod吐了。如果我捕捉到ParseError,我就会看到错误页面。现在,http-conduit出现如此突然的消息失败是正常的吗,我不知道,但我确实认为web服务行为不端。
https://stackoverflow.com/questions/16983899
复制相似问题