无法在聊天机器人模拟器中本地访问 blob 存储
Can't access blob storage locally in chatbot emulator
我曾经能够在本地测试期间访问 blob 存储,但在通过模拟器进行本地测试时我开始收到 [onTurnError]: StorageError: Forbidden
消息。我确实在从我的本地(尤其是 CosmosDB)连接到某些资源时遇到问题,但我相信这以前是有效的。我在我的本地 .env 中设置了 HTTPS_PROXY 值,它适用于除 Cosmos 之外的所有内容(LUIS、QnA Maker、Azure Table 存储等都在工作)。所以我有两个问题:
- 有什么变化吗and/or是否可以通过代理通过本地模拟器测试访问 Blob 存储。
- 如果没有,是否可以对机器人进行编码,使其使用我本地的内存存储和 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);
}
我曾经能够在本地测试期间访问 blob 存储,但在通过模拟器进行本地测试时我开始收到 [onTurnError]: StorageError: Forbidden
消息。我确实在从我的本地(尤其是 CosmosDB)连接到某些资源时遇到问题,但我相信这以前是有效的。我在我的本地 .env 中设置了 HTTPS_PROXY 值,它适用于除 Cosmos 之外的所有内容(LUIS、QnA Maker、Azure Table 存储等都在工作)。所以我有两个问题:
- 有什么变化吗and/or是否可以通过代理通过本地模拟器测试访问 Blob 存储。
- 如果没有,是否可以对机器人进行编码,使其使用我本地的内存存储和 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);
}