戻るのに時間がかかる可能性のあるメソッドを持つ 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)
これに続いて、サービススタックが応答の書き込みに失敗する am エラーが発生します。もちろん、これは失敗するはずですが、接続が閉じられているため、これを送信しようとする必要さえありましたか?
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)
ログの設定があり、サービス操作の途中でクライアントが切断されるたびにこれらのエラーがログに記録されます。生成されるエラーはすべて、このクラスに由来します。これでこの名前空間のログをオフにしようとしましたが、うまくいきません:
<logger name="ServiceStack.HttpResponseExtensionsInternal">
<level value="OFF" />
</logger>
では、2つ質問です。
1) SS が閉じられた応答にエラーを送信しようとするのはなぜですか (2 番目の例外)
2) これらがログに記録されないようにするにはどうすればよいですか?
(明確にするために、私はサービススタックが大好きで、すべてが非常にうまく機能しています。実際の問題のみを通知できるようにしたいだけです)