Похоже, что инициируется транзакция distrubutrd, abd, которая не поддерживается в ядре .net.
Так как вы обращаетесь к нескольким менеджерам ресурсов (ваша база данных и база данных hangfire), транзакция пытается увеличить транзакцию, которая будет распределена.
Вы можете вывести _backgroundJobClient.Enqueue()
Hangfire из области видимости, и таким образом эскалация не произойдет.
Вам нужно будет найти другой способ убедиться, что оба действия выполнены (обновление базы данных, постановка очереди на зависание)
РЕДАКТИРОВАТЬ : поскольку у вас не может быть транзакции, вы должны настроить свои услуги на обрабатывать возможные ситуации отказа. например: Служба учетных записей будет:
Сохранять созданное, используемое в БД
, а затем вызывать Enqueue Hangfire
Записать тот факт, что задание hangfire было создано в той же базе данных пользователя.
служба пользователя должна опросить базу данных, чтобы увидеть, были ли созданы пользователи, но уведомление не было зарегистрировано.
Другие микросервисы должны иметь возможность обрабатывать дубликаты уведомлений.
Таким образом, если пользователь был создан, но уведомление не было отправлено, ваша служба будет повторно отправлена (4).
Принимающие службы будут игнорировать повторяющийся запрос, если сбой происходит между (2) и (3)
У меня есть этот сценарий оболочки Bourne:
#!/bin/sh
PT=`env TZ=US/Pacific date`
CT=`env TZ=US/Central date`
AT=`env TZ=Australia/Melbourne date`
echo "Santa Clara $PT"
echo "Central $CT"
echo "Melbourne $AT"
Никогда не думал о нем, но не ужасно трудно сделать.
#!/bin/sh
# Command-line world clock
: ${WORLDCLOCK_ZONES:=$HOME/etc/worldclock.zones}
: ${WORLDCLOCK_FORMAT:='+%Y-%m-%d %H:%M:%S %Z'}
while read zone
do echo $zone '!' $(TZ=$zone date "$WORLDCLOCK_FORMAT")
done < $WORLDCLOCK_ZONES |
awk -F '!' '{ printf "%-20s %s\n", $1, $2;}'
Учитывая входной файл:
US/Pacific
Europe/London
Europe/Paris
Asia/Kolkatta
Africa/Johannesburg
Asia/Tokyo
Asia/Shanghai
Я получил вывод:
US/Pacific 2008-12-15 15:58:57 PST
Europe/London 2008-12-15 23:58:57 GMT
Europe/Paris 2008-12-16 00:58:57 CET
Asia/Kolkatta 2008-12-15 23:58:57 GMT
Africa/Johannesburg 2008-12-16 01:58:57 SAST
Asia/Tokyo 2008-12-16 08:58:57 JST
Asia/Shanghai 2008-12-16 07:58:57 CST
Мне повезло, что это взяло меньше, чем секунда для выполнения и не пересекло 1 вторую границу.
(Я не заметил, что Kolkatta перестал работать и принял значение по умолчанию к GMT. Моя система все еще имеет Азию/Калькутту как запись для Индии.)
Я использую это, которое является в основном тем же как другими предложениями, кроме него фильтры на определенных зонах, которые Вы хотите видеть:
#!/bin/sh
# Show date and time in other time zones
search=$1
zoneinfo=/usr/share/zoneinfo/posix/
format='%a %F %T'
find -L $zoneinfo -type f \
| grep -i "$search" \
| while read z
do
d=$(TZ=$z date +"$format")
printf "%-34s %23s\n" ${z#$zoneinfo} "$d"
done
Демонстрационный вывод:
$ /usr/local/bin/wdate bang
Africa/Bangui Fri 2009-03-06 11:04:24
Asia/Bangkok Fri 2009-03-06 17:04:24
Если Вы действительно все еще хотите записать это в Python, рассмотрите Pytz:
Их первая полоса показывает Вам много простых способов выполнить то, что Вы ищете.
Тем не менее я уверен, провели ли Вы несколько минут на Google, Вы нашли бы тонны сценариев, некоторые, которые даже запускаются, графические программы для *отклоняют. Первый список результатов для "мировых часов Python", кажется, предлагает это одно.