1

在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, String blobName) 在 C:\Users\Ben\Development\Projects\CloudProject\WorkerRole\SrDataProcessor.fs:line 76

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

System.Data.Services.Client.DataServiceClientException: " [?xml version="1.0" encoding="utf-8" Standalone="yes"?] [error xmlns="http://schemas.microsoft.com/ado/ 2007/08/dataservices/metadata"] [code][/code] [message xml:lang="en-US"]处理此请求时发生错误。[/message] [/error] "

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

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

更新:现在我有了,而且看起来没有。以下代码段产生了一个空序列:

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

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

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

4

1 回答 1

2

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

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

2010 年 9 月 17 日下午 1:30:47 [错误] 在执行表操作并重新抛出期间捕获异常: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\TableManager 中的 Microsoft.Cis.Services.Nephos.Table.Service.Protocols.Rest.TableManager.EndPerformOperation(IAsyncResult ar)。 cs:第 184 行 Microsoft.Cis.Services.Nephos.Table.Service.Protocols.Rest.TableProtocolHead.d__3e.MoveNext() 在 x:\rd\rd_store_stable\services\xstore\XFE\table\service\Protocols\REST\ src\TableProtocolHead.cs:第 732 行

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

于 2010-09-17T20:50:34.587 回答