我们有一项使用 WCF 和模拟的服务。
用户可以使用属于 Active Directory 系统的凭据登录到客户端应用程序。
用户登录是模拟服务端。
当登录的用户在其主机上设置为本地管理员时,这可以正常工作。
但是当他们是非特权(标准)用户时会出现问题。我们收到一个异常,指出“访问被拒绝”“我们的 DLL 之一”。(它发生在我们所有的 DLL 上)
我们有一项使用 WCF 和模拟的服务。
用户可以使用属于 Active Directory 系统的凭据登录到客户端应用程序。
用户登录是模拟服务端。
当登录的用户在其主机上设置为本地管理员时,这可以正常工作。
但是当他们是非特权(标准)用户时会出现问题。我们收到一个异常,指出“访问被拒绝”“我们的 DLL 之一”。(它发生在我们所有的 DLL 上)
这实际上是一个简单的部署环境权限问题。
使用代码访问安全策略工具 (Caspol.exe)只需应用正确的权限即可。msdn上有一个使用指南。
实际的命令行字符串是
CasPol.exe -addgroup 1 -strong -file D:\deployment_location\WcfServiceHost.exe -noname -noversion FullTrust
这是在一组服务上执行的。由于我们的版本号经常更改,使用“更新”很有帮助,该服务还需要在我们的设置中使用 FullTrust。
要为各种机器重复使用该修复程序,请创建一个 PowerShell 脚本(或批处理文件)并使用“polchgprompt”参数关闭提示,以便脚本可以在无需干预的情况下执行。
polchgprompt - “启用或禁用在 Caspol.exe 使用会导致策略更改的选项运行时显示的提示。”
脚本结构:
CasPol.exe -polchgprompt off
--all the individual service calls--
CasPol.exe -addgroup 1 -strong -file D:\deployment_location\WcfServiceHost.exe -noname -noversion FullTrust
...
CasPol.exe -polchgprompt on