WCF oData dataservice WebInvoke (POST) Связанный объект - PullRequest
1 голос
/ 04 августа 2011

Прежде всего, я новичок в .NET WCF oData DataService и использую jQuery на стороне клиента. Я ищу лучший способ (правильный путь) для обработки добавления двух разных объектов в одну транзакцию (сообщение).

Например. У меня есть родительский объект с идентификатором и именем и дочерний объект с идентификатором, ParentID и именем.

Я хотел бы добавить родителя, получить идентификатор родителя и использовать его для добавления каждого потомка. Тем не менее, при добавлении родительского или дочернего объекта происходит сбой, он должен откатить все транзакции. Один из способов, который я задумал сделать, - создать метод WebInvoke, который будет принимать строку json, например, {{Parent ': {"name": "Daddy"}, "Children": [{"name": "Tom" }, { "имя": "Дик"}, { "имя": "Гарри"}]} Во время тестирования я жестко закодировал аргумент в методе, при вызове все работало нормально. Однако при вызове POST из jQuery параметр имеет значение NULL (раздражает). Мне удалось отправить параметр в метод путем передачи строки json urlencoded как части строки запроса. Однако строка запроса имеет ограничение по размеру, и я предпочитаю ее не использовать.

Вопрос 1) Можно ли использовать WebInvoke POST с параметрами в службе данных WCF? Вопрос 2) Есть ли лучший (правильный) способ сделать то, что я пытаюсь сделать?

Еще один способ сделать это (мне это не нравится) - вызвать POST для родительского объекта, получить его идентификатор и использовать его для публикации каждого дочернего элемента. Если что-то не получится, вызовите delete для всех.

1 Ответ

1 голос
/ 05 августа 2011

В настоящее время операция службы (метод WebInvoke) не поддерживает передачу параметров в теле запроса, только в URL. Правильное решение для этого - использовать дозирование. Клиент может отправить все операции в одном пакетном запросе (с одним набором изменений), а затем сервер попытается применить их, и в случае сбоя одной из них весь набор изменений будет отменен. Создать пакетную полезную нагрузку немного сложно, но есть библиотека java-скриптов datajs, которая поможет вам в этом. На самом деле это поможет вам с протоколом OData. http://datajs.codeplex.com/

...