无法在聊天机器人模拟器中本地访问 blob 存储

Can't access blob storage locally in chatbot emulator

我曾经能够在本地测试期间访问 blob 存储,但在通过模拟器进行本地测试时我开始收到 [onTurnError]: StorageError: Forbidden 消息。我确实在从我的本地(尤其是 CosmosDB)连接到某些资源时遇到问题,但我相信这以前是有效的。我在我的本地 .env 中设置了 HTTPS_PROXY 值,它适用于除 Cosmos 之外的所有内容(LUIS、QnA Maker、Azure Table 存储等都在工作)。所以我有两个问题:

  1. 有什么变化吗and/or是否可以通过代理通过本地模拟器测试访问 Blob 存储。
  2. 如果没有,是否可以对机器人进行编码,使其使用我本地的内存存储和 Azure 的 blob 存储?

值得一提的是,这是我用来设置状态存储的代码,但我认为问题在于通过代理访问服务,而不是定义这些存储对象。

// 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);*/

我想出了一个解决方法,但我觉得这不是一个好方法。希望看到该问题的其他解决方案。

我的解决方法是查看我的 BOTNAME 环境变量,如果它与我在本地 .env 文件中设置的相匹配,则使用 MemoryStorage。否则使用 BlobStorage。它正在运行,但我讨厌只为了本地测试而使用额外的代码。

这是我的 index.js 文件中的代码:

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);
}