Как вы решаете проблемы с локальным хранилищем? Проблема с «Произошла ошибка при обработке этого запроса» в HandleBatchResponse - PullRequest
1 голос
/ 03 августа 2009

Кросс-пост на 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 для более подробной информации. Я также открыл ошибку при подключении .

1 Ответ

2 голосов
/ 18 сентября 2010

Я пытался сделать очень простую демонстрацию, и у меня была та же проблема, но я наконец смог ее понять.После запуска хранилища для разработки с включенным ведением журнала: См .: http://blogs.msdn.com/b/partlycloudy/archive/2009/12/16/development-storage-logging.aspx

После запуска DevelopmentStorage, запуска моего приложения, а затем остановки хранилища для разработки и просмотра в папке журнала, я вижу:

9/17/2010 13:30:47 [Error] Поймано исключение во время выполнения операции с таблицей и переброс: System.Exception: c: \ Users \ Scott \ AppData \ Local \ Temp \ jvcl5gjz.0.cs (14,23): ошибка CS0542: «Число»: имена элементов не могут совпадать с их типом включения

в Microsoft.Cis.Services.Nephos.Table.Service.Protocols.Rest.TableManager.EndPerformOperation (IAsyncResult ar)в x: \ rd \ rd_store_stable \ services \ xstore \ XFE \ table \ service \ Protocols \ REST \ src \ TableManager.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 ...

...