Реализовано кастомное хранилище данных, бот по-прежнему вызывает state.botframework.com

Обзор:

Мы реализовали TableBotDataStore в нашем C#-боте, но каким-то образом бот все еще делает вызовы к устаревшему State API.

Контекст:

В Application Insights я вижу, что наш бот делает много вызовов на state.botframework.com. Я также заметил, что наша производственная среда получает 200 ответов на эти запросы, но наш новый бот веб-приложения получает 405 (метод не разрешен) на все эти запросы.

Когда мы начали разработку бота (май 2018 г.), мы сразу внедрили Azure Table Storage. Поэтому я был очень удивлен, обнаружив, что наш бот все еще звонит на state.botframework.com.

В этом сообщении MS говорится:

Параметры чтения будут по-прежнему доступны до 31 июля 2018 г.

Я предполагаю, что MS по-прежнему разрешает запросы к State API для ботов, которые были зарегистрированы до определенной даты.

Что я пробовал:

Я уже следовал руководству Microsoft о том, как Управление пользовательскими данными о состоянии с помощью Azure Table Storage для .NET. Я также прочитал связанный с этим вопрос Поставщик состояния бота перенесен, но вызовы state.botframework.com все еще выполняются, но мне это не помогает.

Мой код:

Conversation.UpdateContainer(
builder =>
{
    builder.RegisterModule(new AzureModule(Assembly.GetExecutingAssembly()));

    var store = new 
    TableBotDataStore(ConfigurationManager.AppSettings["AzureWebJobsStorage"]); 

    builder.Register(c => store)
        .Keyed<IBotDataStore<BotData>>(AzureModule.Key_DataStore)
        .AsSelf()
        .SingleInstance();

    builder.Register(c => new CachingBotDataStore(store,
    CachingBotDataStoreConsistencyPolicy
        .ETagBasedConsistency))
        .As<IBotDataStore<BotData>>()
        .AsSelf()
        .InstancePerLifetimeScope();
    });

GlobalConfiguration.Configure(WebApiConfig.Register);

Что я ожидаю:

Я ожидаю, что с этой конфигурацией наш бот будет использовать только TableBotDataStore и не будет вызывать устаревший State API.


person Edwin Otten    schedule 08.01.2019    source источник
comment
Можете ли вы опубликовать снимок экрана или блок кода полной ошибки?   -  person JJ_Wailes    schedule 09.01.2019
comment
Ваш код вызывает .GetStateClient() где-нибудь? При этом будет получен только клиент состояния по умолчанию, а не ваш зарегистрированный IBotDataStore‹BotData›.   -  person Eric Dahlvang    schedule 16.01.2019
comment
@EricDahlvang Нет .. Я искал его, но единственное место, где я могу найти GetStateClient, находится внутри пакета Microsoft.Bot.Connector. Но мой код никогда не вызывает его.   -  person Edwin Otten    schedule 24.01.2019
comment
@JJ_Wailes Я обновил свой вопрос, потому что мы узнали, что проблемы с развертыванием были вызваны чем-то другим. Так что это больше не вызывает ошибок, просто наш бот вызывает State API. Иногда эти звонки занимают до 20 секунд, что задерживает нашего бота.   -  person Edwin Otten    schedule 24.01.2019
comment
Изменяете ли вы контейнер autofac в коде, который выполняется после вышеуказанной регистрации? (может быть, что-то перезаписывает весь контейнер autofac, поэтому вышеуказанная регистрация больше не используется) Можете ли вы поделиться проектом где-нибудь? Здесь недостаточно, чтобы продолжать.   -  person Eric Dahlvang    schedule 24.01.2019
comment
@EricDahlvang Извините за мой поздний ответ! На самом деле мы переопределяем Autofac.Module. Мы делаем это, чтобы иметь возможность зарегистрировать PostUnhandledExceptionToUserOverrideTask (пользовательская реализация IPostToBot). Это позволяет нам обрабатывать исключения с помощью нашего собственного пользовательского сообщения. Пожалуйста, проверьте наш код на pastebin.   -  person Edwin Otten    schedule 18.02.2019
comment
Как вы регистрируете DefaultExceptionMessageOverrideModule? Я не вижу этого в коде выше.   -  person Eric Dahlvang    schedule 19.02.2019
comment
Я использую Application_Start(). Я должен был опубликовать полный Application_Start раньше. Но вот оно: pastebin.com/embed_iframe/irySTs1B   -  person Edwin Otten    schedule 20.02.2019
comment
Ничто там не указывает на возможную проблему. :( Вы можете выполнить отладку с помощью эмулятора, выполнить код и просмотреть журнал эмулятора на предмет вызовов state.setConversationData, state.getConversationData и т. д.   -  person Eric Dahlvang    schedule 09.03.2019
comment
Я попробовал код в вашем pastebin против бота v3.20.1, и он использовал только TableBotDataStore.   -  person Eric Dahlvang    schedule 09.03.2019
comment
Какую именно версию BotBuilder V3 SDK вы используете?   -  person Eric Dahlvang    schedule 09.03.2019