listData.svc возвращает внутреннюю ошибку сервера 500 - “Ошибка арифметического переполнения ...”

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/105331

  •  29-09-2020
  •  | 
  •  

Вопрос

У меня возникли проблемы с некоторыми экземплярами развернутого списка CAML.После развертывания списков они не отображаются в SharePoint Designer.Аналогично, при попытке подключиться к ним (почти ко всем) браузеру возвращается либо внутренняя ошибка сервера 500, либо ответ 404 "не найдено".

Это происходит, когда вы просто тестируете (пустые или заполненные) списки, используя /_vti_bin/listdata.svc/{listname}.

Содержимое схем списков кажется довольно простым:

Один Поиск -

<Field ID="{Guid}"
    Name="TheName"
    DisplayName="TheName"
    StaticName="TheName"
    Type="Lookup"
    List="Lists/TheParentList"
    ShowField="Title"
    Required="TRUE"
    Indexed="TRUE"
    RelationshipDeleteBehavior="Restrict"/>

Множество текстовых полей (ничего особенного), таких как -

<Field ID="{GUID}"
    Name="TheName"
    DisplayName="The Name"
    StaticName="TheName"
    Type="Text"/>

Единственное поле даты и времени -

<Field ID="{GUID}"
    Name="TheName"
    DisplayName="The Name"
    StaticName="TheName"
    Type="DateTime"
    StorageTZ="UTC"/>

И одно пользовательское поле -

<Field ID="{GUID}"
    Name="TheName"
    DisplayName="The Name"
    StaticName="TheName"
    Type="User"
    List="UserInfo"
    UserSelectionMode="0"/>

Ладно, вот тут-то все и становится странным.Я могу проверить ListData.svc перед развертыванием, и все работает так, как ожидалось.Если я развертываю wsp, содержащий схемы списков, начинает наблюдаться такое поведение, даже несмотря на то, что все списки загружаются в браузере просто отлично, и все формы работают.Если я затем удалю поля поиска, даты и времени и Пользователя в одном списке И УДАЛИТЕ ВСЕ ОСТАЛЬНЫЕ СПИСКИ пытаясь определить источник методом исключения, я все еще сталкиваюсь с этой проблемой.Итак, чтобы было понятно, на данный момент есть не что иное, как единый список с кучей текстовых полей, и я все еще продолжаю получать плохие ответы с ListData.svc.

В журналах ULS каждый раз, когда я пытаюсь зайти в службу REST, постоянно возникает ошибка:

System.Data.SqlClient.SqlException: Arithmetic overflow error converting expression to data type int.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.HasMoreRows()
at System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout)
at Microsoft.SharePoint.SPSqlClient.ExecuteQueryInternal(Boolean retryfordeadlock)
at Microsoft.SharePoint.SPSqlClient.ExecuteQuery(Boolean retryfordeadlock)

Хорошо, итак, что же он пытается использовать в качестве int?

Есть ли у кого-нибудь какое-нибудь представление о том, что это может быть?Я прочесал самые дальние уголки Интернета, пытаясь разобраться в этом.

Тем временем я собираюсь продолжить "процесс исключения".

Это было полезно?

Решение

И я понял это:Тот самый ListTemplate элемент Type значение атрибута было причиной проблемы.

Тот самый Документация состояния:

Имейте в виду, что продукты корпорации Microsoft, созданные на базе SharePoint Foundation, такие как Microsoft SharePoint Server, могут определять и определяют дополнительные типы списков.Кроме того, на фермах Microsoft SharePoint Foundation, где развернуто ваше решение, могут создаваться пользовательские типы списков, например, путем добавления элемента CAML ListTemplate (шаблон списка) к компоненту или к ONET.xml файл пользовательской конфигурации определения сайта.(Такие пользовательские типы списков должны иметь значения ID выше 10000, чтобы гарантировать, что они не конфликтуют с номерами, которые будут использоваться Корпорацией Майкрософт в будущих версиях SharePoint Foundation.) Поскольку эти типы списков не имеют соответствующих значений в этом перечислении, вам следует рассмотреть возможность не использовать это перечисление в качестве значения параметра в ваших пользовательских методах.Вместо этого рассмотрите возможность использования параметров String или Int32, которые принимают идентификатор типа списка как string или integer.

Что ж, просто будьте осторожны и не поднимайтесь слишком высоко, выше 10 000.Мои номера состояли из 8 цифр, имели 6-значный префикс, а затем цифровой счетчик (все еще, конечно, ниже, чем у любого C # Int32.MaxValue или SQL-х intверхний диапазон).Я снизил их до чуть более 10 000, и проблема разрешилась сама собой.Ах, SharePoint.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top