Ich habe folgenden Testaufbau, alle Arbeiten:Roles.IsUserInRole() funktioniert nicht in WCF mit wsHttpBinding und MVC 4
-WCF Anwendung eine MathService.svc ausgeführt wird, Setup SimpleMembershipProvider verwenden
-MVC 4 Internet App mit dem Standard-SimpleMembershipProvider
-Mitgliedschaft ist:
- 3 Rollen: 'Debug', 'Administrator' und 'Editor'
- 2 Benutzer: 'Debug' in Rollen Debug und Administrator (ya, Benutzer Debug in Rolle debug)
- 'Admin' in Role Administrator
-Zertifikate, soweit ich arbeiten kann sagen, ich Kann mit dem Service unter Verwendung von Wshttp
Service-Methode Code verbinden.
//[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"));
}
}
Warum sind Anrufe zu 'Roles.GetRolesForUser (cltName)' und IsUserInRole versagt?
Ich bekomme den richtigen Benutzernamen von 'ServiceSecurityContext', Wenn ich die [PrincipalPermission] -Attrib aktivieren, werde ich abgelehnt, wenn ich den Dienst mit dem Benutzer Admin wie erwartet aufrufen.
Warum also PrincipalPermission in der Lage sein, die richtige Benutzerrolle zu bekommen? Warum kann ich Roles.GetUsersInRole ("Debug") verwenden, um alle korrekten Benutzer zu erhalten ABER ich kann Roles.IsUserInRole (..) nicht aufrufen ??
Es gibt einige Beiträge, die auf Zertifikats-// Mitgliedschaftseinstellungsfehler hinweisen, aber ich kann nicht sehen, wie ich so weit komme und immer noch ein falsches Setup habe, und vor allem scheitern einige der Rollen-Methoden, nicht alle. Irgendwelche Zeiger?
ein Wort über die Rückkehr Ergebnis Wenn ich meine Rolle Abhilfe verwenden und über Debug aufrufen, der Service mit doppelter Genauigkeit zurück, wenn ich mit Admin rufen [Principal] deaktiviert, erhalte ich integer Präzision
Grüße zurück, Andreas
kann es hilft: http://msdn.microsoft.com/en-us/library/ff648163.aspx –
Ich folgte dem Beispiel wsHTTP Einrichtung und Ja, sie verwenden das, was sie "imperative role checks" und Roles.IsUserInRole() nennen. Sie verwenden jedoch auch den Standardanbieter für die ASP.NET-Mitgliedschaftsrolle. Ich benutze MVC 4 und den neuen SimpleMembership Provider. Es gibt nichts in der Verbindung, die ich darüber finden kann, warum diese spezifische Methode NICHT funktioniert – Andreas