Вот полная ошибка: SqlException: A transport-level error has occurred when receiving results from the server. (provider: Shared Memory Provider, error: 1 - I/O Error detected in read/write operation)
Я начал периодически видеть это сообщение для нескольких модульных тестов в моем приложении (существует более 1100 модульных и системных тестов). Я использую средство запуска тестов в ReSharper 4.1.
Еще одно: моя машина для разработки - это виртуальная машина VMWare.





Я столкнулся с этим много лун назад. Суть в том, что у вас заканчиваются доступные порты.
Сначала убедитесь, что в вызывающем приложении включен пул соединений.
Если это так, проверьте количество доступных портов для SQL Server.
Что происходит, так это то, что если пул отключен, каждый вызов принимает порт, и по умолчанию требуется 4 минуты, чтобы истек срок действия порта, и у вас заканчиваются порты.
Если пул включен, вам необходимо профилировать все порты SQL Server и убедиться, что у вас их достаточно, и при необходимости расширить их.
Когда я столкнулся с этой ошибкой, пул соединений был отключен, и это вызывало эту проблему всякий раз, когда на веб-сайт была помещена приличная нагрузка. Мы не видели ее в разработке, потому что максимальная нагрузка составляла 2 или 3 человека, но как только число выросло до 10, мы продолжали видеть эту ошибку. Мы включили пул, и он это исправил.
Я тоже столкнулся с этим много лун назад. Однако, чтобы не сбрасывать со счетов объяснение @ Longhorn213s, у нас было прямо противоположное поведение. Мы получили ошибку при разработке и тестировании, но не в продакшене, где очевидно, что нагрузка была намного больше. В итоге мы терпели проблему в разработке, поскольку она была спорадической и существенно не замедляла прогресс. Я думаю, что у этой ошибки могло быть несколько причин, но я никогда не мог определить причину самостоятельно.
Мы видели это в нашей среде и проследили часть этого до подсказки «NOLOCK» в наших запросах. Мы удалили подсказку NOLOCK и настроили наши серверы на использование режима Snapshot Isolation, и частота этих ошибок была значительно уменьшена.
Мы также столкнулись с этой ошибкой и выяснили, что мы прерываем соединение с сервером SQL с сервером базы данных. У клиентского приложения создается впечатление, что соединение все еще активно, и оно пытается использовать это соединение, но терпит неудачу, поскольку оно было прервано.
Мы видели эту ошибку несколько раз и пробовали разные разрешения с переменным успехом. Одна из распространенных основополагающих причин заключалась в том, что системе, выдавшей ошибку, не хватало памяти. Это особенно верно, если сервер, на котором размещен Sql Server, выполняет ЛЮБОЙ другой процесс, не связанный с ОС. По умолчанию SQL Server будет захватывать любую память, которую он может, а затем, если он оставит мало для других процессов / драйверов. Это может вызвать неустойчивое поведение и прерывистые сообщения. Рекомендуется настроить SQL Server на максимальный объем памяти, который оставляет некоторый запас, если это может потребоваться другим процессам. Пример: Visual Studio на компьютере разработчика, на котором запущена копия версии для разработчиков SQL Server на том же компьютере.
Как предполагает Трампи, я обнаружил, что эта ошибка может возникнуть просто при включении цикла сервера БД (или чего-либо, что заставляет сервер разрывать соединение). Соединение по-прежнему кэшируется на каком-то уровне с другого конца (в клиентском программном обеспечении или в пуле), а затем во время попытки его использования обнаружение того, что оно более недействительно, возвращает «ошибку транспортного уровня». Вероятно, это связано с тем, что вы не перезагружаете свой производственный сервер БД (это хорошо), и вы перезагружаете свой сервер БД разработчиков (кого это волнует?)