gpt4 book ai didi

c# - 如何在 Worker Role 托管的 Web API 中获取客户端服务器的唯一标识符

转载 作者:行者123 更新时间:2023-11-30 18:22:39 25 4
gpt4 key购买 nike

我想在 WebApi 中获取客户端服务器的一些唯一标识符,该标识符托管在 Azure 辅助角色中。

我想将其用作内部数据库中的标识符,该数据库由表存储组成,用于保存来自工作角色的已处理数据。

例如,我在Web Api中有POST方法,它接受一些字符串并将其放入队列中:

public void Post([FromBody]string value)
{
if (value != null)
{
Queue.Enqueue("requests", value);
}
}

然后Worker Role处理这个字符串并将结果保存到Table Storage

while (true)
{
Thread.Sleep(1000);
Trace.TraceInformation("Working", "Information");

if(Queue.Count("requests") > 0)
{

String req = Queue.Dequeue("requests");
//do some work with string, for example return length of string

ResponseEntity re = new ResponseEntity(UNIQUEIDENTIFIER_of_client_server, req.Length.ToString());
CloudTable table = Table.ReturnTable("responses");
TableBatchOperation tbo = new TableBatchOperation();
tbo.Insert(re);
table.ExecuteBatch(tbo);
Trace.TraceInformation("Done some work", "Information");
}
}

最后,客户端服务器可以通过Web API中的GET方法通过他的唯一标识符访问他的结果:

  public string Get(string UNIQUEIDENTIFIER_of_client_server)
{
string response = Table.GetResponseById("responses", UNIQUEIDENTIFIER_of_client_server);
return response;
}

你有什么想法吗?我该怎么做?或者我应该以另一种方式获取 UNIQUEIDENTIFIER_of_client_server,以便客户端服务器可以访问他的相关数据?

最佳答案

由于Azure存储表中没有自增主键,因此您需要自行构造键。

Azure 存储表主键partition key and row key 组成。

重要的是要知道

  • 每个分区键(顾名思义)将存储的数据放在不同的分区中
  • 每个行键都是任何给定分区中的主键
  • 然后您可以按分区和行组合键进行搜索

这在文章 What PartitionKey and RowKey are for in Windows Azure Table Storage 中有很好的解释。 .

您需要分析要存储的数据并决定您的 key 创建策略。

也许最好的选择是您要保存的实体的属性组合。一个例子可以在这篇文章How to use Table storage from .NET中找到。 。

另一种可能的解决方案是创建月-日(作为分区键)和GUID(作为行键)的组合 - 这样您将拥有不同的行每天的 key ,每天都会存储在单个分区中,例如:

11-17-2f0f97a8-c2f4-475e-b1d3-d1eab0f19739
11-17-b18f0932-11ff-49cd-9724-70494ea40f5b

如果您每月存储一次值,那么最好采用year-GUID,这样您就不会不必要地将数据分散在不同的分区上。

如果分区和搜索对您当前的项目并不重要,则只需使用时间戳,例如键年-月-日(作为分区键)和小时-分钟-第二毫秒(作为行键):

2015-11-17-19-58-45-034
2015-11-17-19-59-52-349

根据您需要保存的频率(例如每秒一次),此策略应始终生成唯一的 key 。

关于c# - 如何在 Worker Role 托管的 Web API 中获取客户端服务器的唯一标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33764330/

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