DirectoryEntry.Bind在vb.net中有效,但在c#中失败

本文关键字:但在 失败 有效 DirectoryEntry vb net Bind | 更新日期: 2023-09-27 18:27:50

我正在更新一个不久前在vb.net中编写的网站。该网站对远程网站进行一些基本管理,如回收应用程序池或停止网站实例。它主要用于列出IIS服务器上的站点以及基本信息。

我决定用C#重写它,因为这是我日常选择的语言。

经过多次尝试和错误,我将问题归结为一些非常简单的代码。该网站在vb.net中运行。当我将其移植到c#时,它无法访问远程IIS目录条目。如果由于COM异常或访问被拒绝而失败。我在不同的服务器和不同版本的.NET(2.0和4.5)上尝试过

我现在拥有的是Visual Studio 2015中的两个解决方案。它们都以.NET Framework 2.0为目标。两者都是根据空ASP.NET网站模板创建的。创建后,我添加了对2.0.NET程序集System.DirectoryServices的引用。然后添加了一个名为default.aspx的web表单。我在aspx页面中添加了文本控件,然后打开代码隐藏文件并添加了以下内容:

default.aspx。cs:

using System;
using System.DirectoryServices;
namespace CSWebInfo
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var result = String.Empty;
            DirectoryEntry W3SVC = new DirectoryEntry("IIS://dev_websrv_01/W3SVC", "domain'admin username", "admin password");
            foreach (DirectoryEntry s in W3SVC.Children)
            {
                result += s.Properties["ServerComment"][0].ToString() + "<br />";
            }
            LiteralDisplay.Text = result;
        }
    }
}

default.aspx.vb:

Imports System.DirectoryServices
Public Class _default
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim result As String = ""
        Dim W3SVC As New DirectoryEntry("IIS://dev_websrv_01/W3SVC", "domain'admin username", "admin password") 
        For Each s As DirectoryEntry In W3SVC.Children
            result += s.Properties("ServerComment").Value + "<br />"
        Next        
        LiteralDisplay.Text = result
    End Sub
End Class

我什么也没碰。web.config文件与模板中的文件保持原样。

这应该列出dev_websrv_01服务器上每个站点的友好名称。

vb.net网站运行良好。我得到了每个网站的简单列表。访问W3SVC.foreach语句中的Children后,c#站点立即失败。引发的异常是COMException:拒绝访问。

这两个站点都是直接从Visual Studio运行的,在我的台式机上使用IISExpress,与服务器物理连接到同一个网络域。

有什么想法吗?为什么vb.net中完全相同的代码可以访问远程服务器,而c代码不能?

谢谢你的帮助!

DirectoryEntry.Bind在vb.net中有效,但在c#中失败

 new DirectoryEntry("IIS://dev_websrv_01/W3SVC", "domain'admin username", "admin password");

这是你的问题。您在domain'admin中使用反斜杠,它被解释为转义序列。

请使用以下字符串文字:

@"domain'admin username"

或者这些

"domain''admin username"
相关文章: