Invoke Поток не поддерживает чтение

У меня есть сетевое приложение С#, к которому подключается много анонимных пользователей (игровой сервис).

Теперь я проверяю журналы и иногда вижу это исключение:

[10:30:18.21352] System.Int32 Read(Byte[], Int32, Int32): The stream does not support reading.
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at BusinessLayer.Listener.ListenerWorker.ProcessClient(Object obj) in File.cs:line 141

Эта ошибка исходит от объекта NetworkStream, сейчас я пытаюсь воспроизвести проблему, но как? Как я могу получить это исключение?

Я пытался отключить себя, но это просто дает тайм-аут, пробовал другие вещи, но не могу заставить его работать.

Может у кого есть идея?

Содержимое файла:

private static void ProcessClient(
    Object obj)
{
    ISession session = (ISession)obj;
    NetworkStream networkStream = null;

    try
    {
        DebugUtility.SetThreadName("Worker: {0}", session.Name);
        networkStream = session.TcpClient.GetStream();
        networkStream.ReadTimeout = Config.ReadTimeout;

        // Loop received packets (blocks untill next packet)
        Int32 packetSize;
        Byte[] buffer = new Byte[session.PacketSize];
        while ((packetSize = networkStream.Read(buffer, 0, buffer.Length)) != 0)
        {
            // Get String from packet  bytes
            String packet = Encoding.UTF8.GetString(buffer, 0, packetSize);

            // Check if packet has data
            if (String.IsNullOrEmpty(packet))
                continue;

            // Log biggest received package
            DebugUtility.CheckMaxPacketSize(session.Name, packet.Length);

            // Handle packet (in new thread)
            Logger.DebugLog("Received: {0}", packet);
            ThreadPool.QueueUserWorkItem(session.HandlePacket, packet);
        }
    }
    catch (Exception ex)
    {
        Logger.LogException(ex);
    }
    finally
    {
        if (networkStream != null)
            networkStream.Close();

        if (session != null)
            session.Disconnect();
    }
}

person Roger Far    schedule 23.01.2011    source источник
comment
Что такое строка 141 в File.cs?   -  person Shadow Wizard Wearing Mask V2    schedule 23.01.2011


Ответы (1)


Какие аргументы вы передаете в

System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)

метод. Используете ли вы любое из свойств NetworkStream.Length или NetworkStream.Position.

то есть это что-то вроде (не совсем)

System.Net.Sockets.NetworkStream.Read(buffer, stream.Position, stream.Length)

затем, как объяснено в документации MSDN, использование NetworkStream.Length и NetworkStream.Position свойства всегда будут выдавать NotSupportedException, поскольку в настоящее время они не поддерживаются.

person Shekhar_Pro    schedule 23.01.2011
comment
@Rogier21, вы можете показать нам, какие аргументы вы передаете в методе Read? - person Shekhar_Pro; 23.01.2011
comment
Я добавил исходный файл, это должно быть понятно, но исключение возникает только в редких случаях, достаточно редких, чтобы я не мог понять, как это сделать, поэтому не при каждом вызове. - person Roger Far; 23.01.2011