[英]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.