Выполнение транзакций группы сущностей

Служба таблиц поддерживает пакетные транзакции для сущностей, которые находятся в одной таблице и принадлежат к одной группе секций. В рамках одной транзакции поддерживаются операции "Вставка сущности", "Обновить сущность", "Объединить сущность", "Удалить сущность", "Вставка или замена сущности" и "Вставка или слияние сущностей".

Требования к транзакциям группы сущностей

Транзакция группы сущностей должна соответствовать следующим требованиям.

  • Все сущности, являющиеся субъектами операций как части транзакции, должны иметь одинаковое значение PartitionKey.

  • Сущность в транзакции может появляться только один раз, и для нее может быть выполнена только одна операция.

  • Транзакция может включать не более 100 сущностей, а ее общий объем полезных данных может составлять не более 4 МиБ.

  • На все сущности распространяются ограничения, описанные в разделе Общие сведения о модели данных службы таблиц.

Поддержка пакетных запросов для OData в службе таблиц

Семантика для транзакций группы сущностей определяется спецификацией протокола OData. Спецификация протокола OData определяет следующие понятия для пакетных запросов.

  • Набор изменений — это группа из одной или нескольких операций вставки, обновлении и удаления.

  • Пакет — это контейнер операций, содержащий один или несколько наборов изменений и операций запросов.

Служба таблиц поддерживает подмножество функций, определенных в спецификации протокола OData.

  • Служба таблиц поддерживает наличие только одного набора изменений в пакете. Набор изменений может содержать несколько операций вставки, обновления и удаления. Если пакет содержит более одного набора изменений, первый набор будет обработан службой, остальные наборы будут отклонены с кодом состояния 400 (неправильный запрос).

Важно!

В наборе изменений не должно быть несколько операций над одной сущностью.

  • Обратите внимание, что операция запроса не должна находиться в пакете, содержащем операции вставки, обновления или удаления. В пакете может быть только одна такая операция.

  • Операции в наборе изменений обрабатываются атомарным образом, т. е. либо все операции набора завершатся успешно, либо все завершатся с ошибкой. Операции обрабатываются в порядке их указания в наборе изменений.

  • Служба таблиц не поддерживает связанные операции в наборе изменений.

  • Служба таблиц обрабатывает не более 100 операций в наборе изменений.

Транзакции группы сущностей через интерфейс REST

В следующих разделах на примерах показано, как создать пакетный запрос и как интерпретировать ответ на пакет.

Синтаксис пакетного запроса

Чтобы выполнить пакетный запрос через REST, укажите $batch параметр в URI запроса. Пример:

https://myaccount.table.core.windows.net/$batch  

Заметьте, что URI запроса не содержит имя таблицы.

Пакетный запрос отправляется на сервер в одной директиве POST. Этот запрос должен включать заголовок версии x-ms-version; версия должна иметь значение 2009-04-14 или выше.

Полезные данные XML — это составное MIME-сообщение, содержащее пакет и набор изменений. Полезные данные включают две границы MIME:

  • Граница пакета охватывает набор изменений.

  • Граница набора изменений разделяет отдельные операции вставки, обновления и удаления в пакете.

Отдельный запрос в наборе изменений идентичен запросу, который бы выполнялся сам по себе. Пример:

  • Для указания заголовка If-Match для операции обновления, слияние или удаления включите заголовок в набор заголовков запроса для соответствующей операции в наборе изменений.

  • Чтобы указать формат полезных данных (JSON или ATOM) для каждой операции в наборе изменений, добавьте соответствующие Content-Typeзаголовки , AcceptVersion и DataServiceVersion , как описано в разделе Формат полезных данных для операций службы таблиц.

  • Чтобы отключить эхо содержимого ответа для объекта Insert, укажите Prefer заголовок со значением return-no-content для каждой операции вставки в наборе изменений. Дополнительные сведения о заголовке см. в Prefer разделе Сводка функций службы таблиц.

Примера запроса для операций вставки, обновления и удаления

В следующих примерах показаны пакетные запросы, содержащие две операции вставки сущности и операцию слияния сущностей . В этих примерах, так как мы не заинтересованы в полезных данных эха в ответе на операции вставки, мы включаем Prefer:``return-no-content заголовок .

Примечание

JSON — это рекомендуемый формат полезных данных и единственный формат, поддерживаемый для версий 2015-12-11 и более поздних версий.

JSON (версии 15.08.2013 и более поздние)

В следующем примере показан пакетный запрос с полезными данными JSON.

  
POST https://myaccount.table.core.windows.net/$batch HTTP/1.1  
x-ms-version: 2013-08-15  
Accept-Charset: UTF-8  
DataServiceVersion: 3.0;  
MaxDataServiceVersion: 3.0;NetFx  
Content-Type: multipart/mixed; boundary=batch_a1e9d677-b28b-435e-a89e-87e6a768a431  
x-ms-date: Mon, 14 Oct 2013 18:25:49 GMT  
Authorization: SharedKey myaccount:50daR38MtfezvbMdKrGJVN+8sjDSn+AaA=  
Host: 127.0.0.1:10002  
Content-Length: 1323  
Connection: Keep-Alive  
  
--batch_a1e9d677-b28b-435e-a89e-87e6a768a431  
Content-Type: multipart/mixed; boundary=changeset_8a28b620-b4bb-458c-a177-0959fb14c977  
  
--changeset_8a28b620-b4bb-458c-a177-0959fb14c977  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
POST https://myaccount.table.core.windows.net/Blogs HTTP/1.1  
Content-Type: application/json  
Accept: application/json;odata=minimalmetadata  
Prefer: return-no-content  
DataServiceVersion: 3.0;  
  
{"PartitionKey":"Channel_19", "RowKey":"1", "Rating":9, "Text":".NET..."}  
--changeset_8a28b620-b4bb-458c-a177-0959fb14c977  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
POST https://myaccount.table.core.windows.net/Blogs HTTP/1.1  
Content-Type: application/json  
Accept: application/json;odata=minimalmetadata  
Prefer: return-no-content  
DataServiceVersion: 3.0;  
  
{"PartitionKey":"Channel_17", "RowKey":"2", "Rating":9, "Text":"Azure..."}  
--changeset_8a28b620-b4bb-458c-a177-0959fb14c977  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
MERGE https://myaccount.table.core.windows.net/Blogs(PartitionKey='Channel_17', RowKey='3') HTTP/1.1  
Content-Type: application/json  
Accept: application/json;odata=minimalmetadata  
DataServiceVersion: 3.0;  
  
{"PartitionKey":"Channel_19", "RowKey":"3", "Rating":9, "Text":"PDC 2008..."}  
  
--changeset_8a28b620-b4bb-458c-a177-0959fb14c977--  
--batch_a1e9d677-b28b-435e-a89e-87e6a768a431  
  
Веб-канал Atom (версии до 11.12.2015)

В следующем примере показан пакетный запрос с полезными данными Atom.

POST /$batch HTTP/1.1  
User-Agent: Microsoft ADO.NET Data Services  
x-ms-version: 2013-08-15  
x-ms-date: Thu, 30 Aug 2013 20:45:13 GMT  
Authorization: SharedKeyLite myaccount:asOEzsCDS7YEe6oi+bx47KMwbXL0lYZCOlR/oc3FReQ=  
Accept: application/atom+xml,application/xml  
Accept-Charset: UTF-8  
DataServiceVersion: 1.0;NetFx  
MaxDataServiceVersion: 2.0;NetFx  
Content-Type: multipart/mixed; boundary=batch_a1e9d677-b28b-435e-a89e-87e6a768a431  
Host: MyHostName:10002  
Prefer: return-no-content  
Content-Length: ###  
  
--batch_a1e9d677-b28b-435e-a89e-87e6a768a431  
Content-Type: multipart/mixed; boundary=changeset_8a28b620-b4bb-458c-a177-0959fb14c977  
  
--changeset_8a28b620-b4bb-458c-a177-0959fb14c977  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
POST https://myaccount.table.core.windows.net/Blogs HTTP/1.1  
Content-ID: 1  
Content-Type: application/atom+xml;type=entry  
Content-Length: ###  
  
<?xml version="1.0" encoding="utf-8" standalone="yes"?>  
<entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="https://www.w3.org/2005/Atom">  
  <title />  
  <author>  
    <name />  
  </author>  
  <id />  
  <content type="application/xml">  
    <m:properties>  
      <d:PartitionKey>Channel_19</d:PartitionKey>  
      <d:RowKey>1</d:RowKey>  
      <d:Rating m:type="Edm.Int32">9</d:Rating>  
      <d:Text>.NET...</d:Title>  
    </m:properties>  
  </content>  
</entry>  
--changeset_8a28b620-b4bb-458c-a177-0959fb14c977  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
POST https://myaccount.table.core.windows.net/Blogs HTTP/1.1  
Content-ID: 2  
Content-Type: application/atom+xml;type=entry  
Prefer: return-no-content  
Content-Length: ###  
  
<?xml version="1.0" encoding="utf-8" standalone="yes"?>  
<entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="https://www.w3.org/2005/Atom">  
  <title />  
  <author>  
    <name />  
  </author>  
  <id />  
  <content type="application/xml">  
    <m:properties>  
      <d:PartitionKey>Channel_19</d:PartitionKey>  
      <d:RowKey>2</d:RowKey>  
      <d:Rating m:type="Edm.Int32">9</d:Rating>  
      <d:Text>Azure...</d:Title>  
    </m:properties>  
  </content>  
</entry>  
--changeset_8a28b620-b4bb-458c-a177-0959fb14c977  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
MERGE https://myaccount.table.core.windows.net/Blogs(PartitionKey='Channel_19', RowKey='3') HTTP/1.1  
Content-ID: 3  
Content-Type: application/atom+xml;type=entry  
Content-Length: ###  
  
<?xml version="1.0" encoding="utf-8" standalone="yes"?>  
<entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="https://www.w3.org/2005/Atom">  
  <title />  
  <author>  
    <name />  
  </author>  
  <id>https://myaccount.table.core.windows.net/Blogs(PartitionKey='Channel_19',RowKey='3')</id>  
  
  <content type="application/xml">  
    <m:properties>  
      <d:PartitionKey>Channel_19</d:PartitionKey>  
      <d:RowKey>3</d:RowKey>  
      <d:Rating m:type="Edm.Int32">9</d:Rating>  
      <d:Text>PDC 2008...</d:Title>  
    </m:properties>  
  </content>  
</entry>  
--changeset_8a28b620-b4bb-458c-a177-0959fb14c977--  
--batch_a1e9d677-b28b-435e-a89e-87e6a768a431—  
  

Пример запроса для очередей

В следующих примерах показан пакетный запрос для очереди. Обратите внимание, что в набор изменений может входить только один запрос.

Примечание

JSON — это рекомендуемый формат полезных данных и единственный формат, поддерживаемый для версий 2015-12-11 и более поздних версий.

JSON (версии 15.08.2013 и более поздние)

В следующем примере показан пакетный запрос с полезными данными JSON.

POST https://myaccount.table.core.windows.net/$batch HTTP/1.1  
x-ms-version: 2013-08-15  
Accept-Charset: UTF-8  
DataServiceVersion: 3.0;  
MaxDataServiceVersion: 3.0;NetFx  
Content-Type: multipart/mixed; boundary=batch_f351702c-c8c8-48c6-af2c-91b809c651ce  
x-ms-date: Mon, 14 Oct 2013 19:03:55 GMT  
Authorization: SharedKey testaccount1:y6TxCsXeRiR4l1KqihwRJ05Qb5zBk=  
Host: 127.0.0.1:10002  
Content-Length: 255  
Connection: Keep-Alive  
  
--batch_f351702c-c8c8-48c6-af2c-91b809c651ce  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
GET https://myaccount.table.core.windows.net/Blogs(PartitionKey='Channel_19',RowKey='2') HTTP/1.1  
Accept: application/json;odata=minimalmetadata  
  
--batch_f351702c-c8c8-48c6-af2c-91b809c651ce  
  
Веб-канал Atom (версии до 11.12.2015)

В следующем примере показан пакетный запрос с полезными данными Atom.

POST /$batch HTTP/1.1  
User-Agent: Microsoft ADO.NET Data Services  
x-ms-version: 2013-08-15  
x-ms-date: Thu, 30 Aug 2013 20:45:13 GMT  
Authorization: SharedKeyLite myaccount:asOEzsCDS7YEe6oi+bx47KMwbXL0lYZCOlR/oc3FReQ=  
Accept: application/atom+xml,application/xml  
Accept-Charset: UTF-8  
DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.0;NetFx  
Content-Type: multipart/mixed; boundary=batch_f351702c-c8c8-48c6-af2c-91b809c651ce  
Content-Length: ###  
  
--batch_f351702c-c8c8-48c6-af2c-91b809c651ce  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
GET https://myaccount.table.core.windows.net/Blogs(PartitionKey='Channel_19',RowKey='2') HTTP/1.1  
  
--batch_f351702c-c8c8-48c6-af2c-91b809c651ce—  
  

Синтаксис ответа на пакетный запрос

Ответ содержит код общего состояния пакетного запроса, отдельные коды состояний и фрагменты результатов для каждой операции в наборе изменений. Ответ представляет собой составное MIME-сообщение, содержащее границу пакета и границу набора изменений.

Служба таблиц возвращает код состояния для всего пакетного запроса, а также один или несколько кодов состояния для операций набора изменения в зависимости от того, успешно ли завершился запрос.

Если пакетный запрос был надлежащим образом авторизован и успешно получен службой таблиц, пакетный запрос возвращает код состояния 202 (принято), даже если одна из операций в наборе изменений завершается сбоем. Если пакетный запрос сам потерпит неудачу, то завершится до выполнения операций в наборе изменений. Например, пакетный запрос может завершиться ошибкой авторизации. В этом случае код состояния будет указывать на ошибку.

Операции в наборе изменений обрабатываются атомарным образом, т. е. либо все операции в пакете завершатся успешно, либо все завершатся с ошибкой. Служба таблиц продолжает обрабатывать операции в наборе изменений до возникновения первой ошибки. Если какая-либо операция завершится неудачно, то будет выполнен откат всех предыдущих операций. Дополнительно транзакции группы сущностей выполняются с изоляцией моментального снимка.

Код состояния для отдельной операции в наборе изменений появляется в ответе для набора изменений. Когда отдельная операция завершается неудачей, ответ для набора изменений содержит код состояния 400 (Bad Request). Сведения об ошибке в ответе содержат индекс операции, которая завершилась с ошибкой. Индекс — это порядковый номер команды в полезных данных.

См. ниже пример ответа с ошибкой.

Пример ответа для операций создания, обновления и удаления

В следующих примерах показаны ответы на пакетные операции, отправленные в показанных выше примерах запросов.

JSON (версии 15.08.2013 и более поздние)

В следующем примере показан ответ на запрос, выполненный с полезными данными JSON.

HTTP/1.1 202 Accepted  
Cache-Control: no-cache  
Content-Type: multipart/mixed; boundary=batchresponse_e69b1c6c-62ff-471e-ab88-9a4aeef0a880  
Server: Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0  
x-ms-request-id: ed9c96eb-9473-4fd9-abf6-fa4dcf0d6295  
x-ms-version: 2013-08-15  
X-Content-Type-Options: nosniff  
Date: Mon, 14 Oct 2013 18:25:49 GMT  
Content-Length: 1647  
  
--batchresponse_e69b1c6c-62ff-471e-ab88-9a4aeef0a880  
Content-Type: multipart/mixed; boundary=changesetresponse_a6253244-7e21-42a8-a149-479ee9e94a25  
  
--changesetresponse_a6253244-7e21-42a8-a149-479ee9e94a25  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
HTTP/1.1 204 No Content  
Content-ID: 1  
X-Content-Type-Options: nosniff  
Cache-Control: no-cache  
Preference-Applied: return-no-content  
DataServiceVersion: 3.0;  
Location: https://myaccount.table.core.windows.net/Blogs(PartitionKey='Channel_19',RowKey='1')  
DataServiceId: https://myaccount.table.core.windows.net/Blogs (PartitionKey='Channel_19',RowKey='1')  
ETag: W/"0x8D101F7E4B662C4"  
  
--changesetresponse_a6253244-7e21-42a8-a149-479ee9e94a25  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
HTTP/1.1 204 No Content  
Content-ID: 2  
X-Content-Type-Options: nosniff  
Cache-Control: no-cache  
Preference-Applied: return-no-content  
DataServiceVersion: 3.0;  
Location: https://myaccount.table.core.windows.net/Blogs (PartitionKey='Channel_19',RowKey='2')  
DataServiceId: https://myaccount.table.core.windows.net/Blogs (PartitionKey='Channel_19',RowKey='2')  
ETag: W/"0x8C134F7A4B692D8"  
  
--changesetresponse_a6253244-7e21-42a8-a149-479ee9e94a25  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
HTTP/1.1 204 No Content  
Content-ID: 3  
X-Content-Type-Options: nosniff  
Cache-Control: no-cache  
DataServiceVersion: 1.0;  
ETag: W/"0x8A541B7C4D699D7"  
  
--changesetresponse_a6253244-7e21-42a8-a149-479ee9e94a25--  
--batchresponse_e69b1c6c-62ff-471e-ab88-9a4aeef0a880--  
  
Веб-канал Atom (версии до 11.12.2015)

В следующем примере показан ответ на запрос, выполненный с полезными данными Atom.

HTTP/1.1 202 Accepted  
Cache-Control: no-cache  
Transfer-Encoding: chunked  
Content-Type: multipart/mixed; boundary=batchresponse_dc0fea8c-ed83-4aa8-ac9b-bf56a2d46dfb  
Server: Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0  
x-ms-request-id: b4b49b3e-19a9-4091-a280-da76a09da8d4  
Date: Thu, 30 Aug 2013 20:44:09 GMT  
  
334  
batchresponse_dc0fea8c-ed83-4aa8-ac9b-bf56a2d46dfb   
Content-Type: multipart/mixed; boundary=--changesetresponse_8a28b620-b4bb-458c-a177-0959fb14c977  
  
--changesetresponse_8a28b620-b4bb-458c-a177-0959fb14c977  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
HTTP/1.1 204 No Content  
Content-ID: 1  
Cache-Control: no-cache  
Preference-Applied: return-no-content  
ETag: W/"0x8D101F7E4B662C4"  
Location: https://myaccount.table.core.windows.net/Blogs(PartitionKey='Channel_19',RowKey='1')  
DataServiceVersion: 3.0;  
  
--changesetresponse_8a28b620-b4bb-458c-a177-0959fb14c977  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
HTTP/1.1 204 No Content  
Content-ID: 2  
Cache-Control: no-cache  
Preference-Applied: return-no-content  
ETag: W/"0x8C134F7A4B692D8"  
Location: https://myaccount.table.core.windows.net/Blogs(PartitionKey='Channel_19',RowKey='2')  
DataServiceVersion: 3.0;  
  
--changesetresponse_8a28b620-b4bb-458c-a177-0959fb14c977  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
HTTP/1.1 204 No Content  
Content-ID: 3  
Cache-Control: no-cache  
ETag: W/"0x8A541B7C4D699D7"  
DataServiceVersion: 3.0;  
  
--changesetresponse_8a28b620-b4bb-458c-a177-0959fb14c977--  
--batchresponse_4c637ba4-b2f8-40f8-8856-c2d10d163a83--  

Примеры ответа на запросы

В следующих примерах показаны ответы на запросы, отправленные в приведенных выше примерах запросов.

JSON (версии 15.08.2013 и более поздние)

В следующем примере показан ответ на запрос, выполненный с полезными данными JSON.

HTTP/1.1 202 Accepted  
Cache-Control: no-cache  
Content-Type: multipart/mixed; boundary=batchresponse_0a568496-fb38-4a83-9984-5908d7f4c63d  
Server: Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0  
x-ms-request-id: 6f2aafa3-19e9-434c-85f2-d178941c2d4b  
x-ms-version: 2013-08-15  
X-Content-Type-Options: nosniff  
Date: Mon, 14 Oct 2013 19:13:30 GMT  
Content-Length: 615  
  
--batchresponse_0a568496-fb38-4a83-9984-5908d7f4c63d  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
HTTP/1.1 200 OK  
DataServiceVersion: 3.0;  
Content-Type: application/json;odata=minimalmetadata;streaming=true;charset=utf-8  
X-Content-Type-Options: nosniff  
Cache-Control: no-cache  
ETag: W/"0x5B168C7B6E589D2"  
  
{"odata.metadata":" https://myaccount.table.core.windows.net/Blogs/$metadata#Blogs/@Element","PartitionKey":"Channel_19","RowKey":"2","Timestamp":"2013-10-14T18:25:49.8922467Z","Rating":9,"Text":"Azure..."}  
--batchresponse_0a568496-fb38-4a83-9984-5908d7f4c63d--  
Веб-канал Atom (версии до 11.12.2015)

В следующем примере показан ответ на запрос, выполненный с полезными данными Atom.

HTTP/1.1 202 Accepted  
Cache-Control: no-cache  
Transfer-Encoding: chunked  
Content-Type: multipart/mixed; boundary=batchresponse_4c637ba4-b2f8-40f8-8856-c2d10d163a83  
Server: Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0  
x-ms-request-id: 9202c4a1-43af-4dc0-baca-aa71f7a7407b  
Date: Thu, 30 Aug 2013 20:44:10 GMT  
  
--batchresponse_4c637ba4-b2f8-40f8-8856-c2d10d163a83  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
HTTP/1.1 200 OK  
Content-Type: application/atom+xml;charset=utf-8  
Cache-Control: no-cache  
ETag: W/"0x5B168C7B6E589D2"  
DataServiceVersion: 3.0;  
  
<?xml version="1.0" encoding="utf-8" standalone="yes"?>  
<entry xml:base="http://127.0.0.1:10002/testaccount1/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:etag="W/"0x5B168C7B6E589D2"" xmlns="https://www.w3.org/2005/Atom">  
    <id> https://myaccount.table.core.windows.net/Blogs(PartitionKey='Channel_19',RowKey='1')</id>  
  <title type="text"></title>  
  <updated>2013-08-30T20:44:10Z</updated>  
  <author>  
    <name />  
  </author>  
  <link rel="edit" title="Blogs" href=" Blogs(PartitionKey='Channel_19',RowKey='2')" />  
  <category term="myaccount.Blogs" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />  
  <content type="application/xml">  
    <m:properties>  
      <d:PartitionKey>Channel_19</d:PartitionKey>  
       <d:RowKey>2</d:RowKey>  
       <d:Timestamp m:type="Edm.DateTime">2013-08-30T20:44:09.5789464Z</d:Timestamp>  
       <d:Text>.Net...</d:RowKey>  
      <d:Rating m:type="Edm.Int32">9</d:Rating>  
    </m:properties>  
  </content>  
</entry>  
--batchresponse_4c637ba4-b2f8-40f8-8856-c2d10d163a83--  
  

Пример ответа с ошибкой

В следующих примерах показаны ответы на пакетные запросы, содержащие операцию, которая завершилась с ошибкой. Обратите внимание, что ответ на пакет содержит код состояния 202 (принято), но отдельные операции с ошибкой имеют код состояния 400 (неправильный запрос). Дополнительные сведения об ошибках включены в тексте ответа для неудачной операции. Элемент code содержит код ошибки службы хранилища, а элемент message начинается с индекса неудачной операции, после чего следует строка сообщения об ошибке. Для определения операции со сбоем проанализируйте значения индекса из сообщения. Операции индексируются, начиная с нуля.

Ответ с ошибкой на запрос в формате JSON

В примере с форматом JSON операция из набора изменений, завершившаяся ошибкой, была первой по счету. В паре имя-значение message сообщение начинается с числа 0, далее идут сведения об ошибке.

HTTP/1.1 202 Accepted  
Cache-Control: no-cache  
Content-Type: multipart/mixed; boundary=batchresponse_4e1c04af-af2b-4cfc-9e35-7677a5efcfca  
Server: Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0  
x-ms-request-id: 8abd3c55-a72e-47ba-ae0b-ba43abeb76ae  
x-ms-version: 2013-08-15  
X-Content-Type-Options: nosniff  
Date: Mon, 14 Oct 2013 19:21:58 GMT  
Content-Length: 1051  
  
--batchresponse_4e1c04af-af2b-4cfc-9e35-7677a5efcfca  
Content-Type: multipart/mixed; boundary=changesetresponse_e2a26601-bba8-4c1a-8a8c-bb66badcbca1  
  
--changesetresponse_e2a26601-bba8-4c1a-8a8c-bb66badcbca1  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
HTTP/1.1 400 Bad Request  
Content-ID: 1  
X-Content-Type-Options: nosniff  
DataServiceVersion: 3.0;  
Content-Type: application/json;odata=minimalmetadata;streaming=true;charset=utf-8  
  
{"odata.error":{"code":"OutOfRangeInput","message":{"lang":"en-US","value":"0:One of the request inputs is out of range.\nRequestId:8abd3c55-a72e-47ba-ae0b-ba43abeb76ae\nTime:2013-10-14T19:21:58.0890048Z}}}  
--changesetresponse_e2a26601-bba8-4c1a-8a8c-bb66badcbca1--  
--batchresponse_4e1c04af-af2b-4cfc-9e35-7677a5efcfca--  
  
Ответ с ошибкой на запрос в формате Atom

В примере с форматом Atom операция из набора изменений, завершившаяся ошибкой, была четвертой по счету. В элементе message сообщение начинается с цифры 3, далее идут сведения об ошибке.

<message xml:lang="en-US">3:One of the request inputs is not valid.</message>  

Вот полный ответ:

HTTP/1.1 202 Accepted  
Cache-Control: no-cache  
Transfer-Encoding: chunked  
Content-Type: multipart/mixed; boundary=batchresponse_7ab1553a-7dd6-44e7-8107-bf1ea1ab1876  
Server: Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0  
x-ms-request-id: 45ac953e-a4a5-42ba-9b4d-97bf74a8a32e  
Date: Thu, 30 Apr 2009 20:45:13 GMT  
  
6E7  
--batchresponse_7ab1553a-7dd6-44e7-8107-bf1ea1ab1876  
Content-Type: multipart/mixed; boundary=changesetresponse_6cc856b4-8cb9-41eb-b8d2-bb73475c6cec  
  
--changesetresponse_6cc856b4-8cb9-41eb-b8d2-bb73475c6cec  
Content-Type: application/http  
Content-Transfer-Encoding: binary  
  
HTTP/1.1 400 Bad Request  
Content-ID: 4  
Content-Type: application/xml  
Cache-Control: no-cache  
DataServiceVersion: 1.0;  
  
<?xml version="1.0" encoding="utf-8" standalone="yes"?>  
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">  
  <code>InvalidInput</code>  
  <message xml:lang="en-US">3:One of the request inputs is not valid.</message>  
</error>  
--changesetresponse_6cc856b4-8cb9-41eb-b8d2-bb73475c6cec--  
--batchresponse_7ab1553a-7dd6-44e7-8107-bf1ea1ab1876--  
  

См. также:

Спецификация OData
Основные понятия службы таблиц