如何在Worker角色中托管的Web API中获取客户端服务器的唯一标识符

本文关键字:获取 API 客户端 标识符 唯一 服务器 Web Worker 角色 | 更新日期: 2023-09-27 18:22:13

我想在WebApi中获得客户端服务器的一些唯一标识符,它托管在Azure Worker Role中。

我想在内部数据库中使用它作为标识符,该数据库由表存储组成,用于保存Worker Role中已处理的数据。

例如,我在WebApi中有POST方法,它取一些字符串并将其放入Queue:中

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

然后Worker Role处理此字符串并将结果保存到表存储

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,这样客户端服务器就可以访问他的相对数据吗?

如何在Worker角色中托管的Web API中获取客户端服务器的唯一标识符

由于Azure存储表中没有auto increment primary key,因此需要自己构造密钥。

Azure存储表主键分区键行键

重要的是要知道,

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

这在文章WhatPartitionKey和RowKey在WindowsAzure表存储中的作用中得到了很好的解释。

你需要分析你想要存储的数据,并决定你的密钥创建策略是什么

最好的选择可能是将要保存的实体的属性组合在一起。在这篇文章中可以找到一个例子如何使用NET.中的表存储

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

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

如果你每月存储一次值,那么最好使用年份GUID,这样你就不会在不同的分区上分散不必要的数据。

如果分区和搜索对当前项目不重要,那么只需使用时间戳,例如键年-月-日(作为分区键)和小时-分钟-秒-毫秒

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

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