如何处理(和supress)正常的servicestack错误

时间:2013-10-11 04:56:41

标签: servicestack

我有一个servicestack类,其方法可能需要一段时间才能返回。大部分时间它在60秒内返回,但有时则不会。调用此服务的JsonServiceClient有60秒超时。

由于客户端超时,它会中止请求。一切都如预期。

然而,被调用的服务方法最终会返回 - 让我们说总共需要75秒。因此,在客户端中止连接15秒后,它就会完成。

这解决了服务中的一堆错误。我得到的错误是:

远程主机关闭连接 - 是的,确实如此。

System.Web.HttpException (0x80070040): The remote host closed the connection. The error code is 0x80070040.
at ServiceStack.WebHost.Endpoints.Extensions.HttpResponseExtensions.WriteToResponse(IHttpResponse response, Object result, ResponseSerializerDelegate defaultAction, IRequestContext serializerCtx, Byte[] bodyPrefix, Byte[] bodySuffix)
at ServiceStack.WebHost.Endpoints.Extensions.HttpResponseExtensions.WriteToResponse(IHttpResponse httpRes, IHttpRequest httpReq, Object result, Byte[] bodyPrefix, Byte[] bodySuffix)
at ServiceStack.WebHost.Endpoints.RestHandler.ProcessRequest(IHttpRequest httpReq, IHttpResponse httpRes, String operationName)

接下来是错误,其中servicestack无法写入响应。当然,这应该会失败,但它是否应该尝试发送 - 因为连接已关闭?

INFO  ServiceStack.WebHost.Endpoints.Extensions.HttpResponseExtensions [(null)] - Failed to write error to response: {0}
System.Web.HttpException (0x80004005): Server cannot set content type after HTTP headers have been sent.
at System.Web.HttpResponse.set_ContentType(String value)
at ServiceStack.WebHost.Endpoints.Extensions.HttpResponseExtensions.WriteErrorToResponse(IHttpResponse httpRes, IHttpRequest httpReq, String contentType, String operationName, String errorMessage, Exception ex, Int32 statusCode)
at ServiceStack.WebHost.Endpoints.Extensions.HttpResponseExtensions.WriteToResponse(IHttpResponse response, Object result, ResponseSerializerDelegate defaultAction, IRequestContext serializerCtx, Byte[] bodyPrefix, Byte[] bodySuffix)

我有日志记录设置,只要客户端在服务操作过程中断开连接,它就会记录这些错误。产生的错误都来自这个class。我试图用这个来关闭这个命名空间的注销,但它不起作用:

<logger name="ServiceStack.HttpResponseExtensionsInternal">
  <level value="OFF" />
</logger>

所以,有两个问题。

1)为什么SS尝试将错误发送到已关闭的响应(第二个例外)

2)如何阻止这些被记录?

(为了清楚起见,我喜欢servicestack,一切都很顺利。我只是希望能够只收到有关实际问题的通知)

0 个答案:

没有答案