我们使用自定义主体和身份类型(ProdigyPrincipal/ProdigyIdentity),因为我们需要在我们的程序和服务中提供额外信息.在程序中,我们设置了主体和身份.与WCF服务通信时,将设置主体和标识,但在转换为我们自己的类型后,主体和标识为空.
我注意到在调试模式和单元测试模式下运行之间存在差异.在调试模式下,主体和标识的类型是WindowsPrincipal和WindowsIdentity类型.在单元测试模式下,类型是GenericPrincipal和GenericIdenity.在转换为自定义类型的两种情况下,值都为null.
设置和获取主体/身份是通过Thread.CurrentPrincipal完成的.在绑定部分的App.configs中,安全模式设置为"传输".
用于设置/获取主体和身份的已用函数:
protected static bool SetProdigyPrincipal()
{
#region require Thread.CurrentPrincipal should not be null
if (Thread.CurrentPrincipal == null) // OK
{
throw new InvalidOperationException("SetProdigyPrincipal(): Thread.CurrentPrincipal should not be null");
}
#endregion require Thread.CurrentPrincipal should not be null
var prodigyPrincipal = Thread.CurrentPrincipal as ProdigyPrincipal;
#region require prodigyPrincipal should not be null
if (prodigyPrincipal == null) // NOT OK
{
throw new InvalidOperationException("SetProdigyPrincipal(): prodigyPrincipal should not be null");
}
#endregion require prodigyPrincipal should not …Run Code Online (Sandbox Code Playgroud)