2

我有一个 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 正在拦截响应。

任何想法?

4

1 回答 1

1

好的,抱歉这个愚蠢的问题,我已经想通了。http-conduit 代码抛出 ParseError,而我的代码没有捕捉到它,所以 Yesod 正在呕吐。如果我捕捉到 ParseError,我会得到我的错误页面。现在,http-conduit 失败并显示如此突然的消息是否正常,我不知道,但我确实认为 Web 服务行为异常。

于 2013-06-07T12:29:35.183 回答