#wcf #wcf-data-services
#wcf #wcf-data-services
Вопрос:
Я пытаюсь использовать службы данных WCF, и я немного запутался в том, где я ошибаюсь, пытаясь обновить запись на основе значения ключевого поля.
Мой упрощенный подход, который не работает:
MydbEntities context = new MydbEntities(new Uri("http://localhost:53051/Services/MydbService.svc"));
MyEntity avt = context.MyTable.Where(p => p.EntID == "val1").FirstOrDefault();
avt.FieldToEdit = 1;
context.UpdateObject(avt);
context.BeginSaveChanges(OnChangesSaved, context);
...
private void OnChangesSaved(IAsyncResult result)
{
MessageBox.Show("seems ok");//I'm getting this message, but, in fact, data in db remains unchanged
}
Пожалуйста, скажите мне, где я не прав?
Ответ №1:
Я нашел причину проблемы. Это было тривиально (я чувствую себя идиотом), в инициализаторе службы не было установлено прав доступа на запись. Произошло следующее:
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
...
}
после того, как я изменил ее на:
config.SetEntitySetAccessRule("*", EntitySetRights.All);
все начало работать, как ожидалось.
И, конечно, такое широкое правило доступа я установил только в целях тестирования. Позже это должно быть ограничено.
Ответ №2:
В вашем обработчике OnChangesSaved вам нужно вызвать context.EndSaveChanges(result)
.
По этой ссылке приведен пример кода, иллюстрирующий весь процесс.
Комментарии:
1. Спасибо. Я пытался, но проблема в том, что при попытке вызвать это, я получаю ошибку времени выполнения:
An error occurred while processing this request.