मैं निम्नलिखित परीक्षण सेटअप, सभी काम कर रहे है wsHttpBinding और MVC का उपयोग कर:Roles.IsUserInRole() WCF में काम नहीं कर 4
-WCF आवेदन एक MathService.svc चल रहा है, सेटअप SimpleMembershipProvider
-MVC उपयोग करने के लिए 4 इंटरनेट अनुप्रयोग डिफ़ॉल्ट का उपयोग कर SimpleMembershipProvider
-Membership है:
- 3 भूमिका: 'डिबग', 'प्रशासक' और 'संपादक'
- 2 उपयोगकर्ता: भूमिका प्रशासक
-Certificates में भूमिका डिबग और प्रशासक (फिर, भूमिका डिबग में उपयोगकर्ता डिबग)
सेवा विधि कोड का उपयोग कर सेवा से कनेक्ट कर सकते हैं।
//[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"));
}
}
'Roles.GetRolesForUser (cltName)' और IsUserInRole में नाकाम रहने के लिए कॉल क्यों हैं?
मुझे 'ServiceSecurityContext', से सही उपयोगकर्ता नाम मिलता है यदि मैं [प्रिंसिपलप्रमिशन] अट्रिब को सक्षम करता हूं तो मुझे अस्वीकार कर दिया जाता है यदि मैं उपयोगकर्ता व्यवस्थापक के साथ सेवा को कॉल करता हूं।
तो प्रिंसिपलप्रमिशन सही उपयोगकर्ता भूमिका क्यों प्राप्त कर पाएगा? मैं सभी सही उपयोगकर्ताओं को प्राप्त करने के लिए Roles.GetUsersInRole ("डीबग") का उपयोग क्यों कर सकता हूं लेकिन मैं Roles.IsUserInRole (..) को कॉल नहीं कर सकता ??
प्रमाण पत्र/सदस्यता सेटअप त्रुटियों का सुझाव देने वाली कुछ पोस्ट हैं, लेकिन मैं नहीं देख सकता कि मैं अब तक कैसे प्राप्त कर सकता हूं और अभी भी गलत सेटअप कर सकता हूं, और सबसे ऊपर, केवल कुछ भूमिकाएं विफल हो गई हैं, सभी नहीं। कोई संकेतक?
वापसी परिणाम के बारे में एक शब्द, अगर मैं अपने रोल तरीके का उपयोग करें और डीबग के माध्यम से कहते हैं, सेवा डबल परिशुद्धता देता है, अगर मैं व्यवस्थापक के साथ फोन [PrincipalPermission] विकलांग, मैं पूर्णांक परिशुद्धता वापस
सादर, एंड्रियास मिल
भी हो काम करता है में मदद करता है: http://msdn.microsoft.com/en-us/library/ff648163.aspx –
मैं पीछा किया कि उदाहरण wsHTTP की स्थापना, और हां, वे "अनिवार्य भूमिका जांच" और भूमिकाओं का उपयोग करते हैं। IsUserInRole()। लेकिन वे डिफ़ॉल्ट एएसपी.NET सदस्यता भूमिका प्रदाता का भी उपयोग करते हैं। मैं एमवीसी 4 और नया SimpleMembership प्रदाता का उपयोग करता हूं। इस लिंक में कुछ भी नहीं है जिसके बारे में मुझे पता चल सकता है कि यह विशिष्ट विधि – Andreas