尝试连接到远程IIS服务器时出现“拒绝访问”-C#当我尝试从IIS下运行的C#应用程序运行时5.1当我的程序连接到远程IIS6服务器时,我收到“AccessDeined”COMException。有任何想法吗?我对原始问题有所有相同的问题。更新-4/1/09我找到了这个解决方案(http://www.codeproject.com/KB/cs/Start_Stop_IIS_Website.aspx),它包含一个连接到IIS服务器以启动和停止网站的窗口应用程序。我能够在我的工作站上运行它并连接到IIS服务器。呃....为什么我可以运行这个独立的应用程序而不是我的ASP.NET应用程序?原始当我尝试使用DirectoryEntry.Exist方法从远程计算机连接到IIS以检查IIS服务器是否有效时,我收到“拒绝访问”COMException。stringpath=string.Format("IIS://{0}/W3SVC",服务器);if(DirectoryEntry.Exist(path)){//dosomethingisvalid....}我是活动目录组成员,该组已添加到我尝试连接的IIS服务器的管理员组。有没有人遇到过这个问题并且知道如何解决?更新:@Kev-这是一个ASP.NET应用程序。另外,我可以通过IIS6管理器在没有用户名和密码的情况下连接到远程服务器。@Chris-我正在尝试连接到远程服务器以显示虚拟目录的数量并确定每个目录的.NET框架版本。看到这个问题。@dautzenb-我有一个在IIS5.1下运行的ASP.NET应用程序试图连接到IIS6服务器。我可以在远程服务器上本地ASPNET帐户的安全日志中看到失败审核。当我尝试调试应用程序时,我正在我的域帐户下运行,但访问仍然被拒绝。更新2:@Kev-我能够使用以下重载构建创建DirectoryEntry对象:运行时.InteropServices.COMException'异常”。此外,AuthenticationType属性设置为Secure。更新3:每次我尝试建立连接时,远程IIS服务器的安全事件日志中都会出现以下两个失败审核条目:第一件事:事件类别:帐户登录事件ID:680记录的尝试:MICROSOFT_AUTHENTICATION_PACKAGE_V1_0登录帐户:ASPNET源工作站:错误代码:0xC0000234第二个事件:事件类别:登录/注销事件ID:529登录失败:原因:未知用户名或错误密码用户名:ASPNET域名:(MyDomain)登录类型:3登录过程:NtLmSsp身份验证包:NTLM工作站名称:(MyWorkstationId)调用方用户名:-调用方域:-调用方登录ID:-调用方进程ID:-中转服务:-源网络地址:10.12.13.35源端口:1708Impersonation设置为true,用户名和密码为空。它使用远程IIS服务器上的ASPNET帐户。如果是身份问题,您可以尝试将您的IIS5.1应用程序设置为使用集成Windows身份验证,然后将以下内容添加到您IIS5.1网站上system.web下的web.config以启用模拟。由于这是一个ASP.NET应用程序,它在IIS的应用程序池中运行。该应用程序池以特定用户(“本地系统”、“网络服务”或其他)运行。该用户是否有足够的权限连接到远程服务器?有关详细信息,请参阅MSDN。这看起来可能是双跳问题。如果您使用NTLM来模拟网站的当前用户,则该模拟只能在该服务器上运行(在本例中为您的IIS5.1服务器)。如果您尝试使用该网站连接到另一台服务器,您实际上会遇到问题,因为它无法将令牌传递给您在模拟期间使用的另一台服务器。如果你用机器调试站点,也是如此,转到另一个框。您的本地计算机正在对您进行身份验证,但它无法将您冒充到另一台服务器。我过去使用的所有解决方案都要求您对应用程序池进行硬编码以使用具有权限的帐户,设置很烦人。帐户到在其他计算机上具有权限的域帐户,或者使用在域帐户下的IIS5.1计算机上运行的Windows服务连接到其他服务器。如果您使用的是Kerberos,则不适用,但AD默认使用NTLM。你具体在哪里读书?它是否与您的应用程序在同一路径中?当我遇到这个问题时,我发现只需在Windows文件共享上验证我自己就可以解决问题。根据经验,我认为WMI/ADSI/COM对未经身份验证的用户没有很好的支持。我相信当您未与Windows域相关联时会出现问题。如果它确实是一个NTLM双跳问题,您可以使用SETSPN实用程序为目标IIS服务器创建一个名为实例的服务主体。然后您可以进入ActiveDirectory,然后允许计算机对象(基本上是NETWORKSERVICE或LOCALSERVICE主体)将其凭据委托给正确注册的SPN。然后你可以到处跳!但要小心!当你启用双跳时,人们会用尖锐的东西伤害自己!好的知识库文章:http://support.microsoft.com/kb/929650我相信DirectoryEntry.Exists会默默地忽略提供的任何凭据,而是使用经过身份验证的用户的凭据。这似乎与您描述的行为相符。对于AD工作,我们从不使用它。我有点难过为什么你不能让它工作。你可以试试临时工。实例化DirectoryEntry对象时,您可以使用以下构造函数重载之一:publicDirectoryEntry(stringpath,stringusername,stringpassword)记录在:MSDN:DirectoryEntryConstructor(string,string,string)...或...publicDirectoryEntry(stringpath,stringusername,stringpassword,AuthenticationTypesauthenticationType)记录在:MSDN:DirectoryEntryConstructor(string,string,string,AuthenticationTypes)碰巧我在我的虚拟服务器盒上构建一个测试AD环境,以便New项目做类似的事情。当我启动并运行它时,我会玩一个游戏,看看我是否可以重现您遇到的问题。同时,让我们知道如果您尝试上面引用的这些构造函数重载会发生什么。更新(回答Michaels的评论):由于我没有想到的原因,我们不能在特定情况下使用DirectoryEntry.Exists(),我们的一个应用程序会立即调用此代码:publicstaticboolMetabasePathExists(stringmetabasePath){尝试{using(DirectoryEntrysite=newDirectoryEntry(metabasePath)){if(site.Name!=String.Empty){returntrue;}返回假;}}catch(COMExceptionex){if(ex.Message.StartsWith("系统找不到指定的路径")){returnfalse;}LogError(ex,String.Format("metabasePath={0}",metabasePath));扔;}catch(Exceptionex){LogError(ex,String.Format("metabasePath={0}",metabasePath));扔;您可以将构造函数替换为上述之一。诚然,这是在黑暗中刺伤:)。以上就是C#学习教程:尝试连接远程IIS服务器时出现“拒绝访问”-C#分享的全部内容,如果对大家有用还需要详细了解C#学习教程,希望大家多多指教多多关注—本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
