如何从Azure表存储api调用获取x-ms-request-id
在windows azure应用程序上,我的azure表存储api调用行为缓慢。我需要获取特定调用的请求id(响应标头中的x-ms-request-id)。有没有一种方法可以使用storageclient api获得它?存储客户端api是否公开了此id?如果没有,是否有其他方法获取此id 我以以下方式使用api:如何从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 =
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存储中的性能之间的关系及其原因: