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 を介して、資格情報を明示的に設定しても、正しい認証情報を渡していることを確認しました。安全のために、セキュリティ トリミングを行うサービス オペレーターからロジックを削除しました。