Вместо вложения можно попробовать встроенный:
Response.AddHeader("content-disposition", "inline;filename=MyFile.pdf");
я использовал встроенный в предыдущем веб-приложении, которое генерировало вывод Crystal Reports в PDF и отправило это в браузере пользователю.
Похоже, у вас заканчиваются временных портов . Для проверки используйте команду netstat
и найдите несколько тысяч портов в состоянии TIME_WAIT
.
В Mac OS X временной диапазон портов по умолчанию составляет от 49152 до 65535, в сумме из 16384 портов. Вы можете проверить это с помощью команды sysctl
:
$ sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last net.inet.ip.portrange.first: 49152 net.inet.ip.portrange.last: 65535
После того, как у вас закончатся эфемерные порты, вам обычно придется подождать, пока не истечет состояние TIME_WAIT
(2 * максимальное время жизни сегмента) пока вы не сможете повторно использовать определенный номер порта. Вы можете удвоить количество портов, изменив диапазон до 32768, который является значением по умолчанию в Linux и Solaris. (Максимальный номер порта - 65535, поэтому вы не можете увеличить верхний предел.)
$ sudo sysctl -w net.inet.ip.portrange.first=32768 net.inet.ip.portrange.first: 49152 -> 32768
Обратите внимание, что официальный диапазон , обозначенный IANA , составляет от 49152 до 65535, и некоторые межсетевые экраны могут предполагать, что динамически назначаемые порты попадают в этот диапазон. Возможно, вам потребуется перенастроить брандмауэр, чтобы использовать больший диапазон за пределами вашей локальной сети.
Также возможно уменьшить максимальное время жизни сегмента ( sysctl net.inet.tcp.msl
в Mac OS X), который контролирует продолжительность состояния TIME_WAIT
, но это опасно, поскольку может привести к смешению старых подключений с новыми, использующими тот же номер порта. Есть также некоторые уловки, связанные с привязкой к определенным портам с помощью параметра SO_REUSEADDR
или закрытием с помощью параметра SO_LINGER
, но они также могут привести к смешиванию старых и новых подключений, поэтому обычно считается плохой идеей.
Также возможно уменьшить максимальное время жизни сегмента ( sysctl net.inet.tcp.msl
в Mac OS X), который контролирует продолжительность состояния TIME_WAIT
, но это опасно, поскольку может привести к смешению старых подключений с новыми, использующими тот же номер порта. Есть также некоторые уловки, связанные с привязкой к определенным портам с помощью параметра SO_REUSEADDR
или закрытием с помощью параметра SO_LINGER
, но они также могут привести к смешиванию старых и новых подключений, поэтому обычно считается плохой идеей.
Также возможно уменьшить максимальное время жизни сегмента ( sysctl net.inet.tcp.msl
в Mac OS X), который контролирует продолжительность состояния TIME_WAIT
, но это опасно, так как может привести к смешению старых соединений с новыми, использующими тот же номер порта. Есть также некоторые уловки, связанные с привязкой к определенным портам с помощью параметра SO_REUSEADDR
или закрытием с помощью параметра SO_LINGER
, но они также могут привести к смешиванию старых и новых подключений, поэтому обычно считается плохой идеей.
Также возможно уменьшить максимальное время жизни сегмента ( sysctl net.inet.tcp.msl
в Mac OS X), который управляет продолжительностью состояния TIME_WAIT
, но это опасно, так как может привести к смешению старых подключений с новыми, использующими тот же номер порта. Есть также некоторые уловки, связанные с привязкой к определенным портам с помощью параметра SO_REUSEADDR
или закрытием с помощью параметра SO_LINGER
, но они также могут привести к смешиванию старых и новых подключений, поэтому обычно считается плохой идеей.
Также возможно уменьшить максимальное время жизни сегмента ( sysctl net.inet.tcp.msl
в Mac OS X), который управляет продолжительностью состояния TIME_WAIT
, но это опасно, так как может привести к смешению старых соединений с новыми, использующими тот же номер порта. Есть также некоторые уловки, связанные с привязкой к определенным портам с помощью параметра SO_REUSEADDR
или закрытием с помощью параметра SO_LINGER
, но они также могут привести к смешиванию старых и новых подключений, поэтому обычно считается плохой идеей.