gpt4 book ai didi

c# - 写入Azure表存储后抛出异常

转载 作者:行者123 更新时间:2023-12-03 04:57:44 25 4
gpt4 key购买 nike

我正在将 Microsoft Azure 表存储与 Microsoft Bot Framework 结合使用。我的目标是,机器人将所有传入消息直接写入表存储中。连续两周没有出现任何问题。但从一两周前开始,机器人就不再写下消息,而且我也没有更改代码 - 但为什么呢?

以下是机器人在写下用户消息时执行的方法:

protected async Task TableStorageEintrag(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
// Schlüssel für den Table-Zugriff
string accountKey = "MY STORAGE ACCOUNT KEY 1";
string accountName = "MY STORAGE ACCOUNT NAME";

// Schlüssel werden hier für den Table-Eintrag zusammengepackt
TableQueries tableQueries = new TableQueries
{
accountKey = accountKey,
accountName = accountName
};

// Werte für den Table-Eintrag
string rowKey = DateTime.Now.ToString();
string partitionKey = rowKey;
string userStatement = $"{turnContext.Activity.Text}";

System.Diagnostics.Debug.WriteLine(rowKey);
System.Diagnostics.Debug.WriteLine(partitionKey);
System.Diagnostics.Debug.WriteLine(userStatement);

// Methode für den Table-Eintrag wird hier ausgeführt
Task<bool> bLinkCreated = tableQueries.InsertURL(partitionKey, rowKey, userStatement);
bLinkCreated.Wait();

// Wird ausgeführt, wenn keine KnowledgeBase gefunden wird
System.Diagnostics.Debug.WriteLine("### FINDE KEINE PASSENDE ANTWORT ###");
await turnContext.SendActivityAsync(MessageFactory.Text("Leider kann ich Ihnen hierbei noch nicht weiterhelfen. Ich bin aber schon dabei, Neues zu lernen!"), cancellationToken);
}

这是进行条目的地方:

public class TableQueries
{
public string accountKey { get; set; }
public string accountName { get; set; }

public async Task<bool> InsertURL(string partitionKey, string rowKey, string userStatement)
{
bool bSuccess = false;

CloudStorageAccount storageAccount = new CloudStorageAccount(new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(accountName, accountKey), true);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

CloudTable linkTable = tableClient.GetTableReference(accountName);

// linkTable.CreateIfNotExists();
await linkTable.CreateIfNotExistsAsync();

// Erstelle eine neue Entität
LinkEntity link = new LinkEntity(partitionKey, rowKey);

// Füge im neuen Table-Eintrag die Nachricht des Benutzers hinzu
link.userStatement = userStatement;

// Create the TableOperation that inserts the customer entity.
TableOperation insertOperation = TableOperation.InsertOrMerge(link);

try
{
await linkTable.ExecuteAsync(insertOperation);
bSuccess = true;
}
catch (Exception e)
{
bSuccess = false;
}
return bSuccess;
}
}

LinkEntry.cs:

public class LinkEntity : TableEntity
{
public LinkEntity(string partitionKey, string rowKey)
{
PartitionKey = partitionKey;
RowKey = rowKey;
}


public LinkEntity() { }

public string userStatement { get; set; }
}

LinkSummary.cs

public class LinkSummary
{
public string userStatement { get; set; }
}

这是我正在使用的 Nugget 软件包: enter image description here enter image description here

enter image description here抛出异常:System.Private.CoreLib.dll 中的“Microsoft.WindowsAzure.Storage.StorageException”

最佳答案

一个可能的原因是 PartitionKeyRowKey 中存在一些不正确的字符。请引用this doc对于无效字符。并且请确保不要插入具有相同 PartitionKeyRowKey 的记录,这也可能导致错误。

您还应该检查评论中提到的异常,这可以获得查找根本原因的详细信息。

顺便说一下,您使用的包 WindowsAzure.Storage 非常旧。如果可能,您应该使用最新的软件包 Microsoft.Azure.Cosmos.Table用于 azure 表存储。

关于c# - 写入Azure表存储后抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64860702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com