我在 IIS 7 内的 asp.mvc 应用程序中运行了一些代码。该代码应该将文件保存到 UNC 共享。这个函数是从一些控制器代码调用的,文件路径名 = "\MYSRV\sites\docs\10080003\egg.txt'
public void EnsureDocument(string filePathName ,string content,WindowsIdentity identity )
{
System.Security.Principal.WindowsImpersonationContext impersonationContext = null;
try
{
impersonationContext = ((System.Security.Principal.WindowsIdentity)identity).Impersonate();
File.WriteAllText(filePathName, content);
}
finally
{
impersonationContext.Undo();
}
}
来自 asp.net mvc 控制器的调用看起来像这样......
// pass running identity
documentSvc.EnsureDocument(filePathname, content, WindowsIdentity.GetCurrent());
//documentSvc.EnsureCaseDocument(filePathname,content,System.Security.Principal.WindowsIdentity)User.Identity);
来自 NUnit 测试的调用看起来像这样......
documentSvc.EnsureDocument(filePathname, content, WindowsIdentity.GetCurrent() );
症状是 NUnit 代码删除了文件,但是来自 asp.net mvc 的调用没有删除文件。
**测试 1:通过,删除文件 ** Nunit 代码通过身份 { AuthType=Keberos, ImpersonationLevel=none , Name="DOMAIN\Fred Blogs" } 发送,这会将文件放在 unc 上。
**测试 2:失败,不删除文件 ** 在 web.config 中使用 impersonate="true" 并进行调用
documentSvc.EnsureDocument(filePathname, content, WindowsIdentity.GetCurrent());
asp.net mvc 代码通过 { AuthType=Keberos, ImpersonationLevel=Delegation, Name="DOMAIN\Fred Blogs" } 发送,并且文件不会被删除。
** 测试 3:失败,不删除文件 ** 在 web.config 中没有 impersonate="true" 并调用和拨打电话
documentSvc.EnsureCaseDocument(filePathname,content,System.Security.Principal.WindowsIdentity)User.Identity);
asp.net mvc 代码通过 { AuthType=Negotiate, ImpersonationLevel=Delegation, Name="DOMAIN\Fred Blogs" } 发送,并且文件不会被删除。
?