gpt4 book ai didi

silverlight - 从 Silverlight 异步使用 WCF 数据服务服务运营商 (WebGet)

转载 作者:行者123 更新时间:2023-12-01 02:54:46 25 4
gpt4 key购买 nike

尝试在 Silverlight 的 WCF 数据服务中使用简单的服务运算符时遇到很多问题。我已通过在浏览器中进行测试来验证以下服务运营商是否正常工作:

[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>();
}

但是,无论我如何尝试使用在各种在线资源中找到的不同方法,我都无法使用数据。我已经尝试在 DataServiceContext 和 DataServiceQuery 上使用 BeginExecute() 方法,但在 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);
}

有小费吗?我现在不知道如何从 OData 服务正确使用 Silverlight 中的自定义服务运算符(甚至使用我的单元测试项目进行同步)。我还通过 Fiddler 验证了我也传递了正确的身份验证内容,甚至明确设置了凭据。为了安全起见,我什至从执行安全调整的服务运营商那里删除了逻辑。

最佳答案

感谢 @kaevans 使其正常工作( http://blogs.msdn.com/b/kaevans ):

private void InitUserSecurityRoles() {
DataServiceContext context = new DataServiceContext(new Uri("http://localhost:9999/MyService.svc"));
context.BeginExecute<SecurityRole>(new Uri("/GetSecurityRolesForUser", UriKind.Relative),
(result) => {
SmartDispatcher.BeginInvoke(
() => {
var roles = context.EndExecute<SecurityRole>(result);

UserSecurityRoles = new List<SecurityRole>();
foreach (var item in roles) {
UserSecurityRoles.Add(item);
}
});
}, null);
}
我必须创建 SmartDispatcher因为这是在 ViewModel 中发生的。否则我可以只使用静态 Dispatcher.BeginInvoke()。由于某种原因,无法使用各种技术将角色变量直接插入到我的 UserSecurityRoles(类型列表)中,所以我只是手动添加它(代码不经常调用,也不是超过 10 个项目的集合最大...大多数<5)。

关于silverlight - 从 Silverlight 异步使用 WCF 数据服务服务运营商 (WebGet),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3469531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com