如何从Azure表存储api调用获取x-ms-request-id

如何从Azure表存储api调用获取x-ms-request-id,azure,azure-storage,azure-table-storage,Azure,Azure Storage,Azure Table Storage,在windows azure应用程序上,我的azure表存储api调用行为缓慢。我需要获取特定调用的请求id(响应标头中的x-ms-request-id)。有没有一种方法可以使用storageclient api获得它?存储客户端api是否公开了此id?如果没有,是否有其他方法获取此id 我以以下方式使用api: public UserDataModel GetUserData(String UserId) { UserDataModel osudm =

在windows azure应用程序上,我的azure表存储api调用行为缓慢。我需要获取特定调用的请求id(响应标头中的x-ms-request-id)。有没有一种方法可以使用storageclient api获得它?存储客户端api是否公开了此id?如果没有,是否有其他方法获取此id

我以以下方式使用api:

        public UserDataModel GetUserData(String UserId)
    {
        UserDataModel osudm = null;
        try
        {
            var result = (from c in GetServiceContext().OrgUserIdTable
                          where (c.RowKey == UserId)
                          select c).FirstOrDefault();

            UserDataSource osuds = new UserDataSource(this.account);
            osudm = osuds.GetUserData(result.PartitionKey, result.UserName);
        }
        catch (Exception e)
        {
        }
        return osudm;
    }

您在这里提出的问题更多地与WCF数据服务相关,而不是与Windows Azure相关(存储客户端API使用此功能)。下面是一些如何访问响应头的示例代码:

    var tableContext = new MyTableServiceContext(...);
    DataServiceQuery<Order> query = tableContext.Orders.Where(o => o.RowKey == "1382898382") as DataServiceQuery<Order>;
    IEnumerable<Order> result = query.Execute();
    QueryOperationResponse response = result as QueryOperationResponse;

    string requestId;
    response.Headers.TryGetValue("x-ms-request-id", out requestId);
var tableContext=newmytableservicecontext(…);
DataServiceQuery查询=tableContext.Orders.Where(o=>o.RowKey==“1382898382”)作为DataServiceQuery;
IEnumerable result=query.Execute();
QueryOperationResponse=结果为QueryOperationResponse;
字符串请求ID;
response.Headers.TryGetValue(“x-ms-request-id”,out-requestId);
因此,您首先要做的就是创建查询并将其转换为TType的数据服务查询。然后可以对该查询调用Execute方法,并将其转换为QueryOperationResponse。此类将允许您访问所有标题,包括x-ms-request-id

请注意,在这种情况下,您将无法使用FirstOrDefault,因为这不会返回IQueryable,并且您无法将其强制转换为TType
数据服务查询(除非有其他方法使用WCF数据服务)

注意:呼叫如此缓慢的原因可能是您的查询造成的。查询OrgUserIdTable表时,仅根据行键进行筛选。我不知道该表中有多少数据或分区,但如果不使用PartitionKey,这可能会对性能产生重大影响。您必须知道,如果不包含PartitionKey,您将强制对所有分区(可能是多个服务器)进行搜索,这可能会导致调用速度太慢


我建议您查看以下现实世界指南,以便更好地了解分区与Windows Azure存储中的性能之间的关系及其原因:

您在这里提出的问题与WCF数据服务的关系比与Windows Azure的关系更为密切(存储客户端API使用了这一点)。下面是一些如何访问响应头的示例代码:

    var tableContext = new MyTableServiceContext(...);
    DataServiceQuery<Order> query = tableContext.Orders.Where(o => o.RowKey == "1382898382") as DataServiceQuery<Order>;
    IEnumerable<Order> result = query.Execute();
    QueryOperationResponse response = result as QueryOperationResponse;

    string requestId;
    response.Headers.TryGetValue("x-ms-request-id", out requestId);
var tableContext=newmytableservicecontext(…);
DataServiceQuery查询=tableContext.Orders.Where(o=>o.RowKey==“1382898382”)作为DataServiceQuery;
IEnumerable result=query.Execute();
QueryOperationResponse=结果为QueryOperationResponse;
字符串请求ID;
response.Headers.TryGetValue(“x-ms-request-id”,out-requestId);
因此,您首先要做的就是创建查询并将其转换为TType的数据服务查询。然后可以对该查询调用Execute方法,并将其转换为QueryOperationResponse。此类将允许您访问所有标题,包括x-ms-request-id

请注意,在这种情况下,您将无法使用FirstOrDefault,因为这不会返回IQueryable,并且您无法将其强制转换为TType
数据服务查询(除非有其他方法使用WCF数据服务)

注意:呼叫如此缓慢的原因可能是您的查询造成的。查询OrgUserIdTable表时,仅根据行键进行筛选。我不知道该表中有多少数据或分区,但如果不使用PartitionKey,这可能会对性能产生重大影响。您必须知道,如果不包含PartitionKey,您将强制对所有分区(可能是多个服务器)进行搜索,这可能会导致调用速度太慢

我建议您查看以下现实世界指南,以便更好地了解分区与Windows Azure存储中的性能之间的关系及其原因: