The behaviour is by design.
The Process()
method is called until the connection ends, typically because the client disconnects. In that case, ReadMessageBegin()
fails with this exception which is expected and caught in TThreadedServer.cs, right below the Process()
loop.
For the curious: The exception is thrown in TTransport.ReadAll()