Mam następującą konfigurację testową, wszystkich pracujących:Roles.IsUserInRole() nie działa w WCF przy użyciu wsHttpBinding i MVC 4
-WCF Zastosowanie prowadzenie MathService.svc, konfiguracja używać SimpleMembershipProvider
-MVC 4 Internet App użyciu domyślnego SimpleMembershipProvider
-Membership jest:
- 3 Role: 'Debug', 'Administrator' i 'Edytor'
- 2 użytkowników: 'Debug' w Debug rola i Administratora (ya, debugowanie użytkownik w roli debugowania)
- 'admin' w Administrator Role
-Certificates, o ile mogę powiedzieć, pracuje, ja można połączyć się z usługą za pomocą wshttp
Kod metody usługi.
//[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"));
}
}
Dlaczego rozmowy do 'Roles.GetRolesForUser (cltName)' i isUserInRole braku?
Otrzymuję poprawną nazwę użytkownika z "ServiceSecurityContext", Jeśli włączę atrybut [PrincipalPermission], otrzymam odrzucenie, jeśli zadzwonię do usługi z administratorem, zgodnie z oczekiwaniami.
Dlaczego więc funkcja PrincipalPermission może uzyskać prawidłową rolę użytkownika? Dlaczego można użyć Roles.GetUsersInRole ("Debug"), aby uzyskać wszystkich poprawnych użytkowników , ale nie mogę wywołać Roles.IsUserInRole (..)?
Istnieje kilka wpisów sugerujących błędy konfiguracji certyfikatu// członkostwa, ale nie widzę, jak mogę uzyskać tak daleko i nadal mają błędną konfigurację, a przede wszystkim, tylko niektóre z metod Role zawodzą, nie wszystkie. Jakieś wskazówki?
słowo o wyniku powrotnego, jeżeli używam obejścia rola i wywołać poprzez Debug, usługa zwraca podwójnej precyzji, jeśli zadzwonię do administratora [PrincipalPermission] niepełnosprawnych, mam całkowitą precyzja powrotem
Pozdrowienia, Andreas
może ona pomaga: http://msdn.microsoft.com/en-us/library/ff648163.aspx –
Śledziłem że przykład konfigurowania wsHTTP i tak, używają tego, co nazywają "imperatywnymi kontrolami roli" i Roles.IsUserInRole(). Ale używają również domyślnego dostawcy roli członkostwa ASP.NET. Używam MVC 4 i nowego dostawcy SimpleMembership. Nie ma nic w łączu, które mogę znaleźć na temat dlaczego ta konkretna metoda NIE działa – Andreas