使用自托管的WCF WebServiceHost进行模拟得到'发生操作错误.'错误

本文关键字:错误 操作 模拟 WebServiceHost WCF | 更新日期: 2023-09-27 18:18:36

所以我一直在努力解决这个问题。我有一个自托管的WCF服务:

var webServiceHost = new WebServiceHost(helloWorld);
webServiceHost.Authorization.ImpersonateCallerForAllOperations = true;
var uri = new Uri(BaseUri + webService.UriDirectory);
var webHttpBinding = new WebHttpBinding(webHttpSecurityMode);
webHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
var sep = webServiceHost.AddServiceEndpoint(IHelloWorld, webHttpBinding, uri);
var webHttpBehavior = new WebHttpBehavior {HelpEnabled = true};
sep.Behaviors.Add(webHttpBehavior);
webServiceHost.Open();
我已经在我的方法中应用了以下属性:
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public List<GpoItem> GetAll()
{
    using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
    {
        // Execute GPO code here...
        return new List<GpoItem>();
    }
}

为了添加更多的上下文,我基本上有一个web服务,允许一个人登录到一个网页,在域上创建一个GPO。在控制台中运行它可以正常工作,因为我是以登录域用户的身份运行它。将其作为Windows服务运行,会给我一个"访问被拒绝"的异常。因此需要模拟。我在上面输入了以下修改后的代码,我得到了"发生了一个操作错误"。(来自HRESULT: 0x80072020的异常)'。谷歌显示这仍然是一个许可问题。我以管理员身份登录到Web服务测试环境,因此我具有完全的访问权限,并且我已经证明,我可以以管理员身份在控制台中运行它。我觉得我在某个地方缺少了一些标志设置。

任何想法?

[Update1]我已经尝试将服务从本地系统切换到网络服务,但我仍然得到同样的问题。

[Update2]当我登录到托管WCF服务的服务器(作为本地系统运行),并直接在该机器上使用浏览器时,一切正常。委派用户身份验证似乎是一个问题……

使用自托管的WCF WebServiceHost进行模拟得到'发生操作错误.'错误

显然,人们只能从WCF属性中获得一个只能用于本地资源访问的模拟级令牌。相反,我必须使用LogonUser API,以便获得具有网络资源访问权限的委托级令牌。[1]

[1] http://msdn.microsoft.com/en-us/library/ff649252.aspx