Не удается получить доступ к хранилищу BLOB-объектов локально в эмуляторе ChatBot - PullRequest
0 голосов
/ 07 февраля 2020

Раньше у меня была возможность доступа к хранилищу больших двоичных объектов во время локального тестирования, но я начал получать сообщение [onTurnError]: StorageError: Forbidden при локальном тезировании через эмулятор. У меня есть проблемы с подключением к некоторым ресурсам из моего локального (в частности, CosmosDB), но я верю, что это работало раньше. У меня установлено значение HTTPS_PROXY в моем локальном .env, которое работает для всего, кроме Cosmos (работают LUIS, QnA Maker, Azure Table Storage и др. c). Поэтому у меня есть два вопроса:

  1. Что-то изменилось и / или возможно ли вообще попасть в хранилище BLOB-объектов через локальное тестирование эмулятора через прокси.
  2. Если нет, возможно ли это закодировать бота так, чтобы он использовал память из моего локального хранилища и хранилище больших двоичных объектов из Azure?

Для чего это стоит, вот код, который я использую для настройки хранилища состояний, но я думаю, что проблема заключается в доступе к службам через прокси, а не в определении этих объектов хранения.

// Memory storage - for development only
const memoryStorage = new MemoryStorage();
const conversationState = new ConversationState(memoryStorage);
const userState = new UserState(memoryStorage);

// Blob storage - for production
/*const blobStorage = new BlobStorage({
    containerName: 'bot-storage',
    storageAccountOrConnectionString: process.env.blobStorageServiceName,
    storageAccessKey: process.env.blobStorageAccessKey
});
const conversationState = new ConversationState(blobStorage);
const userState = new UserState(blobStorage);*/

1 Ответ

1 голос
/ 19 февраля 2020

Я нашел способ обойти это, но чувствую, что это не очень хороший подход. Хотелось бы увидеть другие решения этой проблемы.

Мой обходной путь должен был посмотреть на мою переменную среды BOTNAME, и, если она совпадает с тем, что я установил в моем локальном файле .env, используйте MemoryStorage. В противном случае используйте BlobStorage. Он работает, но я ненавижу иметь дополнительный код только для локального тестирования.

Вот код в моем индексе. js file:

if (process.env.BOTNAME == 'OEM_CSC_Support_Bot_Local') {
    // Memory storage - for development only
    console.log(`Using MemoryStorage for state storage`);
    const memoryStorage = new MemoryStorage();
    var conversationState = new ConversationState(memoryStorage);
    var userState = new UserState(memoryStorage);
} else {
    // Blob storage - for production
    console.log(`Using BlobStorage for state storage`);
    const blobStorage = new BlobStorage({
        containerName: 'bot-storage',
        storageAccountOrConnectionString: process.env.blobStorageServiceName,
        storageAccessKey: process.env.blobStorageAccessKey
    });
    var conversationState = new ConversationState(blobStorage);
    var userState = new UserState(blobStorage);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...