I have servicestack class with a method that may take a while to return. Most of the time it returns within 60 seconds, but sometimes it does not. The JsonServiceClient that calls this service has a 60 second timeout.
Since the client times out, it aborts the request. Everything is as expected.
However, the service method that was called eventually returns - let's say it takes 75 seconds total. So, 15 seconds after the client aborted the connection, it finishes.
This kicks of a bunch of errors in the service. The errors I get are:
Remote host closed connection - yep, it sure did.
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)
That is followed by am error where servicestack fails to write the response. Of course, this should fail, but should it have even tried to send this - as the connection is closed?
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)
I have logging setup and it logs these errors anytime a client disconnects in the middle of a service operation. The errors generated all come from this class. I have tried to turn logging off for this namespace with this, but it does not work:
<logger name="ServiceStack.HttpResponseExtensionsInternal">
<level value="OFF" />
</logger>
So, two questions.
1) Why does SS try to send the error to a closed response (2nd exception)
2) How do I stop these from being logged?
(Just to be clear, I love servicestack and everything is working quite nicely. I just want to be able to only be notified of real issues only)
User contributions licensed under CC BY-SA 3.0