У меня есть услуги .NET, работающие на локальной машине (Windows 7 x64, IE8, .net 3.5, C#), который возвращает файл браузеру в ответ на пользовательское действие. Используя Firefox или хром, файл загружается правильно, и наше приложение запущено через пользовательский тип пантомимы, и все хорошо.
Однако с IE8, я получаю диалоговое окно, "не могущее загружать файл с. Не удалось открыть этот сайт. Требуемый сайт или недоступен или не может быть найден. Попробуйте еще раз позже".
Используя скрипача, я проверил, что IE действительно получает полезную нагрузку от сервиса.
Если я выключаю контроль учётных записей, IE действительно загружает файл и запускает связанное приложение.
Выключение контроля учётных записей не является эффективным решением, поскольку нашим клиентам включат его.
Как я могу добраться, IE8 для запуска связанного приложения с контролем учётных записей включил?
Править:
После перерегистрации пантомимы вводят с программным идентификатором, как описано здесь, я могу заставить IE открывать шоу "Открытый или Сохранять" диалоговое окно во ВТОРОЙ РАЗ, когда ссылку требуют от строки поиска. Почему это не работает в первый раз?
Сегодня я смог решить этот вопрос. Получается, что за кодом находилось свойство CacheControl
ответа на HttpCacheability.NoCache
. Удаление этой строки кода решило проблему. Вторая половина исправления корректно регистрировала тип пантомимы и расширение файла в ProgId.
Я удалил ответ только на content-disposition: attachment; fileename=xxx
и двоичную запись строковых данных. IE корректно отображал диалог Open or Save, даже если снифф пантомимы сообщал файл как text/html (что на самом деле должно было быть text/plain).
Я добавил обратно заголовок типа содержимого и перепроверил, затем опцию nosniff, перепроверил и, наконец, управление кэшем. В промежутках между каждым тестом я перезагружал ВМ, чтобы убедиться, что это была первозданная тестовая среда (т.е. ничего не кэшировалось и не загружалось). Только линия управления кэшем отрицательно повлияла на поведение.
Если Internet Explorer знает указанный тип Content-Type и нет данных Content-Disposition, то Internet Explorer выполняет "MIME-снифф", сканируя первые 200 байт файла, чтобы определить, совпадает ли структура файла с какими-либо известными типами MIME. Дополнительную информацию о MIME сниффе можно найти в разделе Обнаружение типов MIME в Internet Explorer. Если MIME снифф обнаруживает MIME тип, известный Internet Explorer, и файл еще не был загружен мимефильтром, Internet Explorer устанавливает это расширение файла перед помещением файла в локальный кэш браузера.
Наконец, если нет данных Content-Type или Content-Disposition, а MIME снифф не распознает известный MIME тип, то расширение файла устанавливается в то же самое расширение, что и URL-адрес, используемый для загрузки файла.
Если в заголовке HTTP файл помечен как "content-disposition=attachment", Internet Explorer рассматривает имя файла из URL как окончательное и не переименовывает его перед помещением в кэш.
content-disposition=attachment - это решение ?!?
/Erling Damsgaard DNS-IT ApS