BizTalk 2013 R2 XLANG - исключение произошло при сохранении состояния в базе данных
Я работаю над BizTalk 2013 R2. У меня есть оркестровка, где я вызываю вспомогательный класс для вызова веб-службы (для более низкой задержки). Класс является Сериализуемым классом. Оркестровка строится успешно. И когда я тестировал решение от POSTMan, оно отлично работает.
Но для каждого успешного ответа я также получаю исключение в журнале событий.
xlang/s engine event log entry: An unrecoverable exception (see the 'inner exception' below) has occurred.
Service Name: Orchestration Name
Service Id: df34c579-a9e6-5696-e322-b80210d1f723
Instance Id: 0512ae45-c89c-4ffc-9bd2-332b854d4965
An exception occurred when persisting state to the database.
Exception type: PersistenceException
Source: Microsoft.XLANGs.BizTalk.Engine
Target Site: Void Commit()
The following is a stack trace that identifies the location where the
exception occurred
at Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.Commit()
at
Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.ScheduleComplete(Boolean terminate)
at Microsoft.XLANGs.Core.Service.Persist(Boolean dehydrate, Context ctx, Boolean idleRequired, Boolean finalPersist, Boolean bypassCommit, Boolean terminate)
at Microsoft.XLANGs.Core.ServiceContext.OnCommit()
at "OrchestrationInstanceName".segment0(StopConditions stopOn)
at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception& exp)
Additional error information:
A batch item failed persistence Item-ID 9b508582-438f-442d-a320-3ff7d9dd87ed OperationType MAIO_CommitBatch Status -1061151938 ErrorInfo A database failure occurred due to an unexpected failure. .
Exception type: PersistenceItemException
Произошла ошибка базы данных, сопровождаемая этой ошибкой постоянства.
Не удалось выполнить следующий вызов хранимой процедуры: " { call [dbo]. [Bts_UpdateMsgbox_XXXXXX](?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}". SQL Server возвратил строку ошибки: "Предупреждение. Порядок соединения был применен, потому что используется локальная подсказка соединения.; Предупреждение: Порядок соединения был применен, потому что используется локальная подсказка соединения.; Дублирующий ключ был проигнорирован.".
я добавил system.diagnostics.trace
в форме вызова вспомогательного класса.net. Затем я заметил, что оркестровка, запускаемая дважды при первом запуске, выдает ошибку Xlang - Постоянная ошибка и база данных - "Дублированный ключ был проигнорирован", и затем оркестровка запускается во второй раз, и она успешно завершается с ответом.
Очевидно, что моя оркестровка проходит дважды. Затем я добавил область вокруг формы, вызывающей вспомогательный класс. Тип транзакции области - "Нет".
Тогда проблема с ошибкой Xlang Persistence была решена.
Почему мне нужно добавить дополнительную область вокруг вызовов, чтобы это работало без ошибок?
1 ответ
Подобные ошибки обычно указывают на то, что ваш BizTalkMsgBoxDb страдает от плохой производительности. Первоначально я рекомендую запустить BizTalk Health Monitor, который укажет наиболее очевидные причины. Скорее всего, существует множество сообщений от зомби / осиротевших, которые этот инструмент также может помочь убрать.
Также взгляните на оптимизацию базы данных:
- неверные настройки базы данных
- большая фрагментация индекса
- большое количество приостановленных экземпляров - они должны регулярно прекращаться
(обратитесь к https://msdn.microsoft.com/en-us/library/cc296892%28v=bts.10%29.aspx за подробной информацией)
Учтите также:
- Сокращение времени для отслеживания истории https://msdn.microsoft.com/en-us/library/aa558715.aspx
- Сокращение количества отслеживаемых артефактов и событий - отключение несущественно (наилучшей практики для производства нет вообще)
Если событие не поможет, вам нужно оценить производительность диска сервера базы данных. Возможно, вам придется перейти на более быстрое хранение