Sitecore 8.2 PaaS (Azure) сохранить xml для чтения всеми экземплярами - PullRequest
0 голосов
/ 20 октября 2018

У нас установлена ​​и работает Sitecore 8.2 update4 в виде PaaS с 4 экземплярами CD (web).Из-за непредвиденных обстоятельств ответственный разработчик Sitecore в настоящее время недоступен, и поэтому я должен найти решение для проблемы на этой неделе, и я надеюсь, что вы сможете помочь.Примечание: я не сертифицированный разработчик Sitecore, но довольно опытный разработчик C #.

Проблема: есть API, называемый (в коде) через http, который возвращает XML-документ (очень маленький - всего 2 узла в нем)).Было замечено, что это фактически делается / выполняется для каждого клиента, который просматривает эту конкретную страницу.Конечно, это очень плохо, а также замедляет страницу (TTFB).Так что я фактически перенес опрос в этот API в бэкэнд с помощью запланированной задачи в Sitecore, которая уже работает идеально.Однако из-за моего невежества (я практически не имею понятия о разработке под Sitecore) я хотел сохранить возвращаемый XML-документ из API в локальной файловой системе.Это, конечно, не будет работать, когда я захочу снова прочитать XML в среде с несколькими экземплярами.

Итак, в общем, я ищу способ сохранить, прочитать и обновить этот XML-документ, чтобы его могли прочитать все 4 (или более) экземпляра.

Я нашел следующий пример: Добавление файла в медиатеку Sitecore программно

Но, конечно, я очень не уверен, имеет ли смысл хранить его в MediaLibrary.Прочитав более старую «Content API Cookbook» SiteCore (помните, что у меня нет доступа к dev-сети SiteCore), «Sitecore.Data.Fields.FileField», похоже, является решением.Однако я не хочу, чтобы поле было видимым для ContentEditor, чтобы они не модифицировали его.

Пожалуйста, поймите, у меня нет очень много времени, чтобы узнать все о SiteCore, и на самом деле это не моя работа,но я предложил свою помощьТак что простое решение с небольшим примером (так как я не смог найти подходящий пример в Интернете) было бы чрезвычайно полезно и высоко ценится!

Заранее спасибо!

1 Ответ

0 голосов
/ 22 октября 2018

Чтобы избежать необходимости изучать Sitecore и, тем не менее, повысить производительность своей страницы без необходимости масштабной переделки первоначальной реализации, вы можете изучить кэширование памяти в ответе приложения.Это также избавляет от необходимости управлять файлом между экземплярами.

Используя кэш приложения, вы можете убедиться, что этот экземпляр выполняет вызов только при первом запросе, а затем вы можете освободить кэш по истечении определенного периода времени.времени, чтобы разрешить другой вызов.

Как правило, вы затем вызываете метод, который проверяет, был ли кэш пуст, и если кэш был пуст, он заполнял бы его значением из вашего API.Установите срок действия в зависимости от того, как часто вы хотите опрашивать.

public void AddItemToCache(Object sender, EventArgs e) { 
    if (Cache["MyKey"] == null)
      Cache.Add("MyKey", "SomeXml", null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove);
}

См. Документацию по MSDN: https://docs.microsoft.com/en-us/dotnet/api/system.web.caching.cache.add?view=netframework-4.7.2

...