我从使用 C# 编写的 Windows 服务调用以下代码:
try
{
ServerManager m = new ServerManager();
if(m != null)
{
SiteCollection sites = m.Sites; //I get exception here
}
}
catch (Exception ex)
{
}
我得到这个例外:
{“文件名:redirection.config\r\n错误:无法读取配置
文件\r\n\r\n":null}
这意味着什么?有什么方法可以在 ServerManager 或我的中预测它吗?m
变量在抛出之前?
Update:现在查看您的评论后我可以完整地回答这个问题,问题是您的应用程序引用了错误的 Microsoft.Web.Administration.dll,看到错误告诉我您正在引用 IIS Express 版本而不是“完整”IIS版本(7.0.0.0)。因此,请修改您的应用程序代码以添加对 c:\windows\system32\inetsrv\Microsoft.Web.Administration.dll 中的引用。
这是一个权限问题。
您需要确保以管理员组或系统成员的身份运行 Windows 服务。我的猜测是,您可能正在将服务作为本地服务或网络服务运行,并且这些服务无权读取位于 %windows%\system32\inetsrv\config 中的配置文件。
其他信息:
Redirection.config 是 IIS 用于确定是否应该从正常路径 (%windir%\system32\inetsrv\config\applicationHost.config) 读取其配置,或者在集中配置时从外部 UNC 文件共享读取配置的文件。用于许多服务器。这就是为什么这是第一个要解析的文件之一,因此您会收到该特定文件的访问被拒绝错误。
关于预测,最好的办法是在 try/catch 中创建它并处理它。读取配置时可能会发生许多异常,例如权限(您可以通过确保可以读取(例如 File.OpenText())到 %windir%\system32\inetsrv 中的 Redirection.config、ApplicationHost.config 来预测这一情况\config 但这是猜测,还有其他一些,例如访问密码的加密密钥、无效的配置等)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)