您如何调试本地存储的问题? HandleBatchResponse 中的“处理此请求时发生错误”问题

Posted

技术标签:

【中文标题】您如何调试本地存储的问题? HandleBatchResponse 中的“处理此请求时发生错误”问题【英文标题】:How do you debug problems with local storage? Trouble with "An error occurred while processing this request" in HandleBatchResponse 【发布时间】:2010-11-16 11:12:06 【问题描述】:

在MSDN 交叉发布。

我有一个实体对象列表,我试图将其插入本地存储服务的表中。使用派生自 SampleClient TableStorageDataContext 类的数据上下文类,我创建了一个新的上下文对象并毫无问题地添加了实体。当我调用 context.SaveChanges() 时,最终会引发异常,但细节很少。我在 SQL Server Express 上运行了探查器跟踪以查看错误是否源自那里,但没有发现任何有用的东西,这使我相信本地存储服务中存在一些问题,我不知道如何调试。

这是客户端代码 (F#):

let cxt0 = new WebRole.Models.TableDataContext()
entityList |> Seq.iter (fun n -> cxt0.AddObject("NutritionData", n))
let results = cxt0.SaveChanges()

我可以在上面的最后一行设置一个断点并停止执行,然后看到 cxt0 对象包含所有要添加的实体 (>500K)。然后继续执行后,抛出以下异常:

System.Data.Services.Client.DataServiceRequestException: “处理过程中发生错误 这个请求。”

在 System.Data.Services.Client.DataServiceContext.SaveAsyncResult.HandleBatchResponse() 在 System.Data.Services.Client.DataServiceContext.SaveAsyncResult.EndRequest() 在 System.Data.Services.Client.DataServiceContext.SaveChanges(SaveChangesOptions 选项)在 System.Data.Services.Client.DataServiceContext.SaveChanges() 在 WorkerRole.SrDataProcessor.importSrData(FastFunc`2 pf,字符串 blobName) 在 C:\Users\Ben\Development\Projects\CloudProject\WorkerRole\SrDataProcessor.fs:line 76

InnerException(请原谅括号,因为我避免使用 html 标签清理器):

System.Data.Services.Client.DataServiceClientException: " [?xml 版本="1.0" 编码="utf-8" 独立=“是”?] [错误 xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"] [代码][/代码] [留言 xml:lang="en-US"]发生错误 在处理这个 请求。[/message] [/error] "

在 System.Data.Services.Client.DataServiceContext.SaveAsyncResult.d__1d.MoveNext()

在 HandleBatchResponse 方法中,似乎在枚举响应时可能会报告此错误。任何想法可能是什么?我想检查但没有检查的唯一一件事是确保我的所有实体都没有超过 1000 个字符的字符串属性。

更新:现在我有了,但看起来好像没有。下面的 sn-p 产生一个空序列:

let longEntities = 
    nutData |> Seq.choose (fun nd -> if HasLongStringProperties(nd)
                                     then Some(nd) else None)

另外,更一般地说,如何调试这样的问题?有什么方法可以对本地存储服务进行一些自省?

更新 2:我发现“起源异常”,可以说,实际上是一个 System.WebException 报告“内部服务器错误(500)”,没有进一步细节。我已尽我所能确保我尝试插入的数据与支持表服务的 SQL Server Express 数据库中的表中的模式和数据类型兼容,但我仍然不知道是什么问题是。 TableDataService 只是不接受我插入的对象。有关更多详细信息,请参阅 MSDN 线程。我还开了一个bug on connect。

【问题讨论】:

【参考方案1】:

我试图做一个非常简单的演示,我遇到了同样的问题,但我终于能够弄清楚了。通过在打开日志记录的情况下运行开发存储: 看: http://blogs.msdn.com/b/partlycloudy/archive/2009/12/16/development-storage-logging.aspx

启动 DevelopmentStorage 后,运行我的应用程序,然后停止开发存储并查看我看到的日志文件夹:

9/17/2010 1:30:47 PM [错误] 在执行表操作并重新抛出期间捕获异常:System.Exception: c:\Users\Scott\AppData\Local\Temp\jvcl5gjz.0.cs(14 ,23) : 错误 CS0542: 'Number': 成员名称不能与其封闭类型相同

在 x:\rd\rd_store_stable\services\xstore\XFE\table\service\Protocols\REST\src 中的 Microsoft.Cis.Services.Nephos.Table.Service.Protocols.Rest.TableManager.EndPerformOperation(IAsyncResult ar) \TableManager.cs:第 184 行 在 x:\rd\rd_store_stable\services\xstore\XFE\table\service\Protocols\REST\src\TableProtocolHead 中的 Microsoft.Cis.Services.Nephos.Table.Service.Protocols.Rest.TableProtocolHead.d__3e.MoveNext()。 cs:第 732 行

事实证明,我的演示太简单了,因为我创建了一个名为 Number 的表,其中有一列名为 Number...

【讨论】:

以上是关于您如何调试本地存储的问题? HandleBatchResponse 中的“处理此请求时发生错误”问题的主要内容,如果未能解决你的问题,请参考以下文章

如何脱机调试 Azure Blob 存储触发器?

您是不是可以在本地调试 Service Fabric 群集?

您如何获取 git diff 文件,并将其应用到作为同一存储库副本的本地分支?

如何在 Oracle 中调试 Java 存储过程

您如何连接到远程本地服务结构?

如何在本地存储中保存图像位置