Azure表存储异常信息

Dal*_*son 3 fiddler azure azure-table-storage

寻找调试Azure表存储非常令人沮丧.在我了解各种限制之前,尝试使用InvalidInput代码找到令人难以置信的DataServiceQueryException的原因很难说.

经过大量搜索后,http://blogs.msdn.com/b/partlycloudy/archive/2009/12/16/development-storage-logging.aspx上的帖子显示了如何打开日志记录.这将使用更多非常有用的信息填充错误日志文件.永久保留此日志记录可能不是一个好主意,每次遇到问题时检查此文件都不是理想的情况.

关于使用Fiddler查看实际请求和响应的帖子很多,但我无法正常使用.我已经将连接字符串配置为通过Fiddler代理连接(我必须手动将ipv4.fiddler主机名添加到hosts文件中,否则它将无法解析 - Fiddler应该自动执行此操作).我可以看到部署的连接,但不能查看任何查询的连接.我试过以管理员身份运行Fiddler,但仍然得到相同的结果.

为什么这么难?我错过了什么吗?是否有选项可以返回错误日志文件中记录的异常信息,而不是垃圾InvalidInput异常消息?任何想法为什么Fiddler不玩游戏?

dun*_*nry 5

通常,如果您尝试使用服务不支持的操作,则会收到无效输入错误消息.请记住,服务中没有完整的LINQ操作集(排序,最小值,最大值等)(但是,它们可以在本地计算).解决此问题的第一步应该是查看您正在尝试的实际操作.如果您使用的不是.Select()或.Where(),则很可能目前不支持它.

编辑:我写这篇文章后,遇到了类似的错误.由于我已经知道支持哪些操作,我想我会告诉你我用于排除故障的代码:

void Main()
{
    var acct = CloudStorageAccount.DevelopmentStorageAccount;

    var client = acct.CreateCloudTableClient();
    var ctx = client.GetDataServiceContext();
    ctx.IgnoreMissingProperties = true;

    var table = "tl36f6e92d94954f168ade0be6a547c0ce";

    //build query
    var q = ctx.CreateQuery<Foo>(table)
        .Where(e => e.RowKey.CompareTo(2) < 0) //this query fails
        .Take(10);

    //Dump URI to inspect
    ((DataServiceQuery)q).RequestUri.Dump();

    //dump results
    q.Dump();
}


[System.Data.Services.Common.DataServiceKey("PartitionKey", "RowKey")]
class Foo
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Whatever { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我把它放到了LINQPad(有史以来最好的工具)中,只看了一下URI.很明显,我正在进行的比较是期待一个字符串,并被比作整数.我当然简化了实际查询,但我的观点仍然存在.我一直使用这个工具来建模我的查询并检查实际发生的情况.