none
Не обновляется информация о COM-интерфейсе в приложении IIS RRS feed

  • Вопрос

  • Есть приложение IIS, использующее для своей работы серверный com-объект. Com реализован в виде dll. Приложение работает.

    Добавляю метод в интерфейс com-объекта. Приложение продолжает обращаться к новому com-объекту по старому интерфейсу. Если метод вставлен в конец, то он просто не виден. Если в середину, то следующие функции вызываются со сдвигом.

    Через какое-то время это проходит и приложение начинает работать нормально.

    Я так понимаю, что интерфейс где-то кешируется? Где и как это кеш очистить?

    dll разрегистрировал и регистрировал, версию менял. Что еще сделать?

    • Изменен тип Ulys.ses 1 апреля 2013 г. 13:53
    • Изменен тип Ulys.ses 1 апреля 2013 г. 13:54
    26 марта 2013 г. 10:14

Ответы

Все ответы

  • Эта функция называется теневым копированием. Загрузка новой сборки начинается после перезапуска домена приложения, поэтому и работает старый код.
    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]


    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
  • Можно управлять им:

    Edit ASP Settings (IIS 7):

    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.


    1 апреля 2013 г. 14:54
    Модератор
  • Спасибо, будем пробовать.
    1 апреля 2013 г. 15:29
  • Уважаемый пользователь,

    Пожалуйста, не оставляйте Ваши темы без ответа или комментария по предложенным решениям.

    Спасибо


    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
    Модератор