如何以解密格式从azure datatable获取加密的bot数据
我使用机器人应用程序(visual C#)和机器人框架创建了QNA机器人。机器人状态数据存储在Azure数据表中。但是会话的数据(用户类型的数据)在Azure数据表中加密。我想解密。我怎样才能解密呢 会话的数据(用户类型数据)在Azure数据表中加密。我想解密。我怎样才能解密呢 如果要在存储会话数据后检索该数据,可以参考以下代码:如何以解密格式从azure datatable获取加密的bot数据,azure,botframework,Azure,Botframework,我使用机器人应用程序(visual C#)和机器人框架创建了QNA机器人。机器人状态数据存储在Azure数据表中。但是会话的数据(用户类型的数据)在Azure数据表中加密。我想解密。我怎样才能解密呢 会话的数据(用户类型数据)在Azure数据表中加密。我想解密。我怎样才能解密呢 如果要在存储会话数据后检索该数据,可以参考以下代码: context.ConversationData.SetValue<string>("testval", "hello world"); string
context.ConversationData.SetValue<string>("testval", "hello world");
string mes = "";
context.ConversationData.TryGetValue<string>("testval", out mes);
using Microsoft.Bot.Connector;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RetrieveHistory
{
class Program
{
static void Main(string[] args)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName={your_account_name};AccountKey={your_account_key};EndpointSuffix=core.windows.net");
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("{your_botconversationhistory_table_name}");
TableQuery<MessageEntity> query = new TableQuery<MessageEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "emulator|61b59bkmceee"));
foreach (MessageEntity entity in table.ExecuteQuery(query))
{
string myactivity = "";
using (var msi = new MemoryStream(entity.Activity0))
using (var mso = new MemoryStream())
{
using (var gs = new GZipStream(msi, CompressionMode.Decompress))
{
gs.CopyTo(mso);
}
myactivity = Encoding.UTF8.GetString(mso.ToArray());
}
Activity activity = JsonConvert.DeserializeObject<Activity>(myactivity);
Console.WriteLine("{0}, {1}\t{2}\t{3}\t{4}", entity.PartitionKey, entity.RowKey,
entity.From, entity.Recipient, activity.Text);
}
Console.ReadLine();
}
public class MessageEntity : TableEntity
{
public MessageEntity(string pk, string rk)
{
this.PartitionKey = pk;
this.RowKey = rk;
}
public MessageEntity() { }
public string From { get; set; }
public string Recipient { get; set; }
public byte[] Activity0 { get; set; }
}
}
}
属性和类型:
实体示例:
注意:您可以创建一个控制台应用程序,安装以下软件包,并使用我提供的用于检索历史记录的代码进行测试
packages.config:
为什么要这样?你这样做的目的是什么?因为您可能不想直接从数据表中读取会话状态。如果您想在对话状态下保存某些内容并稍后阅读,那么有一些API可供使用。另外,数据表中保存的状态数据本身并没有加密。谢谢。我可以知道,{your_storage_account}是什么意思吗?将其替换为StorageConnectionString以通过WindowsAzure.storage sdk访问表。当我添加CloudStorageAccount、CloudTableClient、CloudTable、TableQuery、MessageEntity和QueryComparison时,我遇到了错误。那个么我能做些什么呢?你们安装了客户端库吗?带下划线的错误。没有此类类(CloudStorageAccount、CloudTableClient、CloudTable、TableQuery、MessageEntity和QueryComparisons)可添加。
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net45" />
<package id="Microsoft.Bot.Connector" version="3.13.1" targetFramework="net46" />
<package id="Microsoft.IdentityModel.Logging" version="1.1.4" targetFramework="net46" />
<package id="Microsoft.IdentityModel.Protocols" version="2.1.4" targetFramework="net46" />
<package id="Microsoft.IdentityModel.Protocols.OpenIdConnect" version="2.1.4" targetFramework="net46" />
<package id="Microsoft.IdentityModel.Tokens" version="5.1.4" targetFramework="net46" />
<package id="Microsoft.Rest.ClientRuntime" version="2.3.2" targetFramework="net46" />
<package id="Newtonsoft.Json" version="10.0.2" targetFramework="net45" />
<package id="System.IdentityModel.Tokens.Jwt" version="5.1.4" targetFramework="net46" />
<package id="WindowsAzure.Storage" version="9.1.0" targetFramework="net45" />
</packages>