Лучший отвечающий
Не обновляется информация о COM-интерфейсе в приложении IIS

Вопрос
-
Есть приложение IIS, использующее для своей работы серверный com-объект. Com реализован в виде dll. Приложение работает.
Добавляю метод в интерфейс com-объекта. Приложение продолжает обращаться к новому com-объекту по старому интерфейсу. Если метод вставлен в конец, то он просто не виден. Если в середину, то следующие функции вызываются со сдвигом.
Через какое-то время это проходит и приложение начинает работать нормально.
Я так понимаю, что интерфейс где-то кешируется? Где и как это кеш очистить?
dll разрегистрировал и регистрировал, версию менял. Что еще сделать?
26 марта 2013 г. 10:14
Ответы
-
Привет
Как говорят тут Alter Interface of Existing COM DLL, вам нужно генерировать новый ID для интерфейса, если вы его меняете (что вы как раз и делалете)
И конечно выполянять перерегистрацию dll
Для связи [mail]
- Изменено Abolmasov DmitryModerator 27 марта 2013 г. 8:26
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 27 марта 2013 г. 15:33
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 1 апреля 2013 г. 13:43
- Снята пометка об ответе Ulys.ses 1 апреля 2013 г. 13:53
- Предложено в качестве ответа Abolmasov DmitryModerator 9 апреля 2013 г. 12:35
- Отменено предложение в качестве ответа Ulys.ses 9 апреля 2013 г. 12:43
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 10 апреля 2013 г. 6:51
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 11 апреля 2013 г. 6:14
27 марта 2013 г. 8:25Модератор
Все ответы
-
Эта функция называется теневым копированием. Загрузка новой сборки начинается после перезапуска домена приложения, поэтому и работает старый код.26 марта 2013 г. 14:02Модератор
-
Это asp.net, а у меня просто asp - извиняюсь, что не написал.
И, даже, если это относится к asp, перезапуск iis не приведет к выгрузке домена приложения?
26 марта 2013 г. 14:12 -
Если честно, в случае с ASP я не знаю, данная функция относится к платформе .Net, а она там отсутсвует в принципе. Попробую выяснить.26 марта 2013 г. 14:17Модератор
-
Привет
Как говорят тут Alter Interface of Existing COM DLL, вам нужно генерировать новый ID для интерфейса, если вы его меняете (что вы как раз и делалете)
И конечно выполянять перерегистрацию dll
Для связи [mail]
- Изменено Abolmasov DmitryModerator 27 марта 2013 г. 8:26
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 27 марта 2013 г. 15:33
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 1 апреля 2013 г. 13:43
- Снята пометка об ответе Ulys.ses 1 апреля 2013 г. 13:53
- Предложено в качестве ответа Abolmasov DmitryModerator 9 апреля 2013 г. 12:35
- Отменено предложение в качестве ответа Ulys.ses 9 апреля 2013 г. 12:43
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 10 апреля 2013 г. 6:51
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 11 апреля 2013 г. 6:14
27 марта 2013 г. 8:25Модератор -
Спасибо, буду иметь в виду этот вариант, хотя он слишком жесткий: изменения происходят часто, а работа с предыдущими версиями интерфейса не нужна. Т.е., это, конечно правильный путь, но хотелось бы пойти в обход.
На наличие обходного пути намекает то, что через некоторое время ошибка исчезает. Вот, например, сегодня изменения, сделанные во вторник стали видны (без изменения ID). Можно сделать вывод о наличии какого-то кеша и его периодической очистки. Как бы эту очистку выполнить принудительно?
28 марта 2013 г. 6:13 -
Спасибо, буду иметь в виду этот вариант, хотя он слишком жесткий: изменения происходят часто, а работа с предыдущими версиями интерфейса не нужна. Т.е., это, конечно правильный путь, но хотелось бы пойти в обход.
На наличие обходного пути намекает то, что через некоторое время ошибка исчезает. Вот, например, сегодня изменения, сделанные во вторник стали видны (без изменения ID). Можно сделать вывод о наличии какого-то кеша и его периодической очистки. Как бы эту очистку выполнить принудительно?
Привет,
Если Вы про IIS кеш, то единственное что я нашел - перезагрузка Application pool'а.
1 апреля 2013 г. 14:05Модератор -
Пробовал:
- перегрузить пул отдельно;
- перегрузить iis целиком;
- перегрузить компьютер.
Ничего не помогает.
Однако, через 2 дня все заработало само собой.
На других уровнях (в С++) этого нет. Там интерфейс виден сразу после регистрации.
1 апреля 2013 г. 14:14 -
То есть проблема сама решилась? Или она еще присутствует?
1 апреля 2013 г. 14:25Модератор -
На этом компьютере проблема решилась. Сегодня установили на другой - там та же проблема.
В разделе ASP настроек сайта обнаружилось свойство "Включить кэширование библиотек типов [enableTypelibCache]" - очень похоже на то, что нужно, но оно не редактируется.
Кто-нибудь знает, как его изменить?
1 апреля 2013 г. 14:37 -
Можно управлять им:
Enable or disable type library caching
To enable or disable the caching of type libraries, use the following syntax:
appcmd set config /section:asp /enableTypelibCache:True|False
True enables the caching of type libraries. The default value is True.
- Изменено Maksim MarinovMicrosoft contingent staff, Moderator 1 апреля 2013 г. 14:55
1 апреля 2013 г. 14:54Модератор -
Спасибо, будем пробовать.1 апреля 2013 г. 15:29
-
Уважаемый пользователь,
Пожалуйста, не оставляйте Ваши темы без ответа или комментария по предложенным решениям.
Спасибо
- Изменено Maksim MarinovMicrosoft contingent staff, Moderator 8 апреля 2013 г. 12:35
3 апреля 2013 г. 8:06Модератор -
С проверкой есть проблема.
На моем компьютере ситуация сохраняется. Вчера поменял интерфейс, возникла ошибка, сегодня с утра все работает. При этом enableTypelibCache установлено в false. (Так и было, но я на всякий случай сделал последовательно установку в true и false.)
На втором компьютере (там стоит true) пока проверить не могу, т.к. он задействован в другой работе. Как проверю - обязательно напишу.
3 апреля 2013 г. 8:16 -
Уважаемый пользователь!
В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме
8 апреля 2013 г. 10:10Модератор -
Проблема так и не решилась. Установка enableTypelibCache в false к успеху не привела.
Может, ошибка какая в IIS? Обновление какое-то поставить надо?
9 апреля 2013 г. 9:48 -
Проблема так и не решилась. Установка enableTypelibCache в false к успеху не привела.
Может, ошибка какая в IIS? Обновление какое-то поставить надо?
Попробовать конечно можно. Но судя по материалам в сети прихожу к выводу, что единственный рабочий вариант был уже предложен Дмитрием.
9 апреля 2013 г. 12:49Модератор