簡體   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