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

标签 c# azure asp.net-web-api azure-worker-roles

我想在 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/

相关文章:

c# - 数据表 null 到空字符串

asp.net-mvc - ASP.NET WebApi 与 MVC?

Visual Studio 2017 中的 Angular 7 : How to deploy Angular "Build" folder along with ASP.Net Web Api

c# - 数据表行删除问题

c# - 如何在我的 ActionFilter 中获取对 ModelState 属性的引用?

azure - 事件中心的可扩展性

sqlite - Azure > 应用服务 > 移动应用 > 离线同步在我的 Android 上不起作用 (Xamarin.Forms)

c# - 如何让异步任务等待结果以进行进一步操作xamarin表单?

C# Web API DTO 在 MVC 中结合两个对象

c# - 无法使用必应 map 通过 mvvm 将 map 地理坐标中心绑定(bind)到 Windows Phone 上的 map