Ho la seguente configurazione di prova, tutto lavoro:Roles.IsUserInRole() non funziona in WCF utilizzando wsHttpBinding e MVC 4
-WCF applicazione l'esecuzione di un MathService.svc, messa a punto da usare SimpleMembershipProvider
-MVC 4 Internet App utilizzando il default SimpleMembershipProvider
-Membership è:
- 3 ruoli: 'debug', 'amministratore' e 'Editor'
- 2 gli utenti: 'Debug' in Debug Ruolo e Amministratore (ya, il debug utente in ruolo di debug)
- 'Admin' nel ruolo di amministratore
-Certificates, per quanto posso dire stanno lavorando, io può connettersi al servizio utilizzando wshttp
Codice metodo di servizio.
//[PrincipalPermission(SecurityAction.Demand, Role = "Debug")]
public string Add(double A, double B)
{
OperationContext oc = OperationContext.Current;
ServiceSecurityContext ssc = oc.ServiceSecurityContext;
string cltName = ssc.PrimaryIdentity.Name; //cltName = "Debug"
var Rs = Roles.GetAllRoles(); //returns: 'Debug', 'Administrator', 'Editor' => OK
var dUsers = Roles.GetUsersInRole("Debug"); // 'Debug' => Expected
var aUsers = Roles.GetUsersInRole("Administrator"); // 'Debug', 'Admin' => expected
try
{
var a = Roles.GetRolesForUser(cltName); //this fails
var b = Roles.IsUserInRole(cltName, "Debug"); //this fails
var c = Roles.IsUserInRole(cltName, "Administrator"); //this fails
}
catch (Exception err)
{
string p = err.Message; // all fail with error :
// "Object reference not set to an instance of an object", inner exception=null
}
if (dUsers.Contains(cltName)) //this works, but requires extra step
//I should be able to us if(Roles.IsUserInRole(cltName, "Debug"))... here?!?
{
return string.Format("Result: {0}", (A + B).ToString("N2"));
}
else
{ //this is just to get a different result if NOT in role 'Debug'
return string.Format("Result: {0}", ((int)A + (int)B).ToString("N2"));
}
}
Perché sono chiamate a 'Roles.GetRolesForUser (cltName)' e IsUserInRole fallendo?
Ottengo il nome utente corretto da "ServiceSecurityContext", Se abilito l'attributo [PrincipalPermission], viene rifiutato se chiamo il servizio con l'utente Admin, come previsto.
Quindi perché PrincipalPermission è in grado di ottenere il ruolo utente corretto? Perché posso utilizzare Roles.GetUsersInRole ("Debug") per ottenere tutti gli utenti corretti MA Non riesco a chiamare Roles.IsUserInRole (..) ??
Ci sono alcuni post che suggeriscono errori di configurazione di certificati// membri, ma non riesco a vedere come posso arrivare così lontano e avere ancora una configurazione sbagliata, e soprattutto, solo alcuni dei metodi dei ruoli falliscono, non tutti. Qualche indicazione?
Una parola per il risultato di ritorno, se uso il mio soluzione Ruolo e chiamare tramite Debug, il servizio restituisce doppia precisione, se chiamo con admin [PrincipalPermission] disabili, ottengo intero precisione indietro
saluti, Andreas
essa può aiuta: http://msdn.microsoft.com/en-us/library/ff648163.aspx –
Ho seguito questo esempio la creazione di wsHTTP, e sì, usano quello che chiamano "controlli dei ruoli imperativi" e Roles.IsUserInRole(). Ma usano anche il provider di ruolo Membership ASP.NET predefinito. Io uso MVC 4 e il nuovo provider SimpleMembership. Non c'è nulla nel link che riesco a trovare sul perché questo metodo specifico NON funziona – Andreas