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代码不能?
谢谢你的帮助!
new DirectoryEntry("IIS://dev_websrv_01/W3SVC", "domain'admin username", "admin password");
这是你的问题。您在domain'admin
中使用反斜杠,它被解释为转义序列。
请使用以下字符串文字:
@"domain'admin username"
或者这些
"domain''admin username"