繁体   English   中英

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

[英]DirectoryEntry.Bind Works in vb.net but fails in c#

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

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

经过多次尝试和错误,我将问题简化为一些非常简单的代码。 该网站在vb.net上工作正常。 当我将其移植到c#时,它停止能够访问远程IIS DirectoryEntry。 如果由于COM异常或访问被拒绝而失败。 我在不同的服务器和不同版本的.NET(2.0和4.5)上进行了尝试。

我现在拥有的是Visual Studio 2015中的2个解决方案。它们都针对.NET Framework 2.0。 两者都是从Empty 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网站运行良好。 我得到每个网站的简单列表。 在foreach语句中访问W3SVC.Children后,c#站点立即失败。 引发的异常是COMException:访问被拒绝。

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

关于为什么vb.net中完全相同的代码可以访问远程服务器但c#代码不能访问的任何想法?

感谢您的任何帮助!

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

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

使用以下字符串文字:

@"domain\admin username"

或者这些

"domain\\admin username"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM