Возникло много проблем при попытке использовать простой оператор службы в службе данных WCF от Silverlight. Я проверил, работает ли следующий оператор сервиса, протестировав его в браузере:
[WebGet]
public IQueryable<SecurityRole> GetSecurityRolesForUser(string userName) {
string currentUsername = HttpContext.Current.User.Identity.Name;
// if username passed in, verify current user is admin and is getting someone else's permissions
if (!string.IsNullOrEmpty(userName)) {
if (!SecurityHelper.IsUserAdministrator(currentUsername))
throw new DataServiceException(401, Properties.Resources.RequiestDeniedInsufficientPermissions);
} else // else nothing passed in, so get the current user's permissions
userName = currentUsername;
return SecurityHelper.GetUserRoles(userName).AsQueryable<SecurityRole>();
}
Однако, как бы я ни пытался использовать разные методы, которые я нашел на разных онлайн-ресурсах, я не смог использовать данные. Я пытался использовать метод BeginExecute () на Boht DataServiceContext и DataServiceQuery, но я продолжаю получать ошибки или данные не возвращаются в метод EndExecute. Я должен сделать что-то простое неправильно ... вот мой код SL:
private void InitUserSecurityRoles() {
MyEntities context = new MyEntities(new Uri("http://localhost:9999/MyService.svc"));
context.BeginExecute<SecurityRole>(new Uri("http://localhost:9999/MyService.svc/GetSecurityRolesForUser"), OnComplete, context);
DataServiceQuery<SecurityRole> query = context.CreateQuery<SecurityRole>("GetSecurityRolesForUser");
query.BeginExecute(OnComplete, query);
}
private void OnComplete(IAsyncResult result) {
OnDemandEntities context = result.AsyncState as OnDemandEntities;
var x = context.EndExecute<SecurityRole>(result);
}
Есть советы? Я сейчас в замешательстве, как правильно использовать пользовательский сервисный оператор из Silverlight (или даже синхронизировать с помощью моего проекта модульного тестирования) из сервиса OData. Я также проверил через Fiddler, что я передаю правильные данные для аутентификации, и даже захожу до того, что явно устанавливаю учетные данные. Просто чтобы быть в безопасности, я даже удалил логику у оператора сервиса, который выполняет подстройку безопасности.