在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 上打开了一个错误。