我有一个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,一切都很顺利。我只是希望能够只收到有关实际问题的通知)