Tridion: невозможно загрузить .Net dll во время публикации

Я использую .Net dll Newtonsoft.Json in my C# TBB для обработки компонентов и создания данных Json. Я уже добавил эту dll в GAC[Global Assembly Cache], и она тоже работает. Но иногда это не работает, и я получаю следующую ошибку при публикации:

JScriptException: Expression 'RenderComponentPresentation()' had error 'Could not load file or assembly 'Newtonsoft.Json, Version=4.0.5.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.'

Но когда я просматриваю страницу в Tridion, она работает нормально. Чтобы исправить эту проблему, мы перезапускаем Tridion Services, и после перезапуска мы публикуем страницу, и она работает нормально. Но эта проблема продолжает появляться снова и снова. Есть ли способ решить эту проблему навсегда?

Недавно я мог воспроизвести проблему, когда снова опубликовал ту же страницу, когда она уже находилась в процессе публикации. Вторая попытка публикации вернула вышеуказанную ошибку, но первая попытка публикации завершилась после сбоя второй попытки публикации и вернула Success. Любая идея, почему это странное поведение.


person Sunil Nadar    schedule 28.03.2012    source источник
comment
Похоже, это может быть проблема с потоками, поскольку предварительный просмотр является однопоточным, а публикация/рендеринг — многопоточным. Сколько потоков рендеринга у вас есть? Можете ли вы попробовать изменить его на один и повторно проверить, возникает ли проблема с тройником. Это не решит проблему, но. Докажите причину.   -  person Chris Summers    schedule 28.03.2012
comment
вы можете рассмотреть возможность перехода на сайт Tridion SE. Многие из этих вопросов были бы уместны там: area51. stackexchange.com/proposals/38335/   -  person Chris Summers    schedule 28.03.2012
comment
Привет @Сунил. Я только что заметил, что этот вопрос все еще открыт. Помог ли какой-либо из приведенных ниже ответов решить проблему? Если да, можете ли вы принять этот ответ, щелкнув большую галочку слева от него?   -  person Frank van Puffelen    schedule 09.07.2012
comment
Привет @FrankvanPuffelen. К сожалению, приведенные ниже ответы не помогли решить проблему.   -  person Sunil Nadar    schedule 10.07.2012
comment
На самом деле кажется наиболее вероятным, что у вас есть то, что описывает Барт: DLL присутствует на некоторых, но не на всех, машинах издателя. Таким образом, в зависимости от того, какой издатель заберет вашу транзакцию, она может быть успешной или неудачной. Поскольку предварительный просмотр выполняется в графическом интерфейсе (который, скорее всего, не масштабирован), рендеринг всегда будет успешным (или всегда будет неудачным).   -  person Frank van Puffelen    schedule 10.07.2012
comment
Привет @FrankvanPuffelen. У нас есть только один сервер издателя (т. е. TCM), и мы добавили DLL Newtonsoft.Json в GAC. Мы настроили сервер издателя для отправки контента на 2 разные цели (цели публикации). У нас есть аналогичная конфигурация на нашем промежуточном сервере, но мы НЕ можем ее воспроизвести. Его можно воспроизвести только на живом сервере издателей (TCM).   -  person Sunil Nadar    schedule 14.07.2012


Ответы (3)


Если бы не тот факт, что после перезапуска службы он работает лучше, я бы подумал, что речь идет о сборке, от которой зависит NewtonSoft.Json. Если такие сборки есть, то их тоже нужно будет зарегистрировать в GAC. Обратите внимание, что процесс публикации не обязательно имеет ту же папку приложения или путь проверки, что и ядро ​​Tridion (которое выполняет предварительный просмотр).

Как говорит Крис, возможно, это проблема многопоточности, но иногда такие странности проявляются из-за нехватки памяти. Можете ли вы отслеживать использование памяти вашим процессом публикации, чтобы увидеть, есть ли утечка?

person Dominic Cronin    schedule 28.03.2012
comment
имея здесь схожие мысли, единственное, что приходит на ум, это возможность масштабирования среды с несколькими издателями. В этом случае каждому из серверов CM/Publisher потребуется соответствующая сборка в GAC, после чего его службы будут перезапущены, иначе произойдет что-то странное. - person Bart Koopman; 29.03.2012

Иногда ваша платформа не настроена должным образом. Проверьте это, щелкнув проект правой кнопкой мыши и установив платформу 4.0 (или любую другую совместимую), чтобы использовать dll. Затем закройте приложение и попробуйте запустить его снова. Для вашей платформы может быть установлен клиентский профиль .NET Framework 4.

person Milee    schedule 28.03.2012