Кросс-пост на 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 содержит все добавляемые сущности (> 500 КБ). После продолжения выполнения выдается следующее исключение:
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 \ Разработка \ Проекты \ CloudProject \ WorkerRole \ SrDataProcessor.fs: линия
76
InnerException (простите за скобки, так как я избегаю очистки тега html):
System.Data.Services.Client.DataServiceClientException:
"[? xml version =" 1.0 "encoding =" utf-8 "
standalone = "да"?] [ошибка
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 символов.
Обновление : Теперь у меня есть, и, похоже, их нет. Следующий фрагмент дал пустую последовательность:
let longEntities =
nutData |> Seq.choose (fun nd -> if HasLongStringProperties(nd)
then Some(nd) else None)
Кроме того, в более общем смысле, как отлаживать подобные проблемы? Можно ли как-нибудь проникнуть в службу локального хранилища?
Обновление 2 : с тех пор я обнаружил, что «исключением происхождения», так сказать, на самом деле является исключение System.WebException, сообщающее «Внутренняя ошибка сервера (500)», без дополнительных подробностей. , Я сделал все, что я знаю, чтобы убедиться, что данные, которые я пытаюсь вставить, совместимы со схемой и типами данных в таблицах в базе данных SQL Server Express, поддерживающей службу таблиц, и все же я не знаю, что проблема в том. TableDataService просто не примет объект, который я вставляю. Смотрите ветку MSDN для более подробной информации. Я также открыл ошибку при подключении .