2011-08-11 92 views
0

我有一個令人沮喪的問題,試圖使用System.DirectoryServices.DirectoryEntry.Invoke()方法來回收遠程IIS服務器上的應用程序池。模仿異常調用DirectoryEntry.Invoke方法

基本上下文是兩臺客戶端計算機和一臺IIS 7.0服務器計算機(Windows 2008 Server)myServer,它們都在同一個Windows域中。我想在客戶機上運行代碼到 回收IIS服務器上的AppPool。

下面是相關的代碼片斷:

的DirectoryEntry的DirectoryEntry =新的DirectoryEntry( 「IIS:// myServer上/ SVC/AppPools/SomeAppPool」,domainUserid,密碼,AuthenticationTypes.Secure);

directoryEntry.Invoke(「Recycle」,null);

從一臺客戶端計算機上,代碼運行成功,但在其他客戶端計算機上,代碼拋出與模擬有關的異常(請參見下文)。 我在兩臺客戶端計算機上以相同的域用戶身份登錄,並在代碼中使用相同的域用戶信息。

我已經檢查了服務器端事件查看器和其他日誌,看看在服務器上處理請求的方式是否存在一些明顯的差異,並且做了大量的搜索而沒有成功。

任何人都可以提供一個線索,以尋找什麼或可以運行哪些診斷(在客戶端計算機上或服務器計算機上)以確定發生這種情況的原因?

感謝您的幫助!馬丁

2011-08-10 22:35:39,478 [10] WARN - ActionRestartIIS:異常重新啓動IIS System.Reflection.TargetInvocationException:異常已被調用的目標拋出 。 ---> System.Runtime.InteropServices.COMException(0x80070542):未提供所需的模擬級別, 或提供的模擬級別無效。 (從HRESULT異常:0x80070542)在System.DirectoryServices.DirectoryEntry.Invoke內部異常堆棧跟蹤--- 的 ---結束(字符串方法名,對象[]參數)

+0

在回答自己的問題的優良傳統,這是我學到的東西。我修改我的代碼以使用System.Management類,這些類似於跨域更好地工作。示例代碼如下: – user304582

回答

0

在回答中的一個自己的細傳統問題,這是我學到的東西。我修改我的代碼以使用System.Management類,這些類似於跨域更好地工作。示例代碼如下:

ConnectionOptions connectionOptions = new ConnectionOptions();

connectionOptions.Authority =「ntlmdomain:」+ this.domain;

connectionOptions.Username = this.username; connectionOptions.Password = this.password;

connectionOptions.EnablePrivileges = true;

connectionOptions.Authentication = AuthenticationLevel.PacketPrivacy;

ManagementScope managementScope = new ManagementScope(@「\」+ this.iisserver + @「\ root \ microsoftiisv2」,connectionOptions);

managementScope。連接();管理對象appPool = new ManagementObject(managementScope,new ManagementPath(「IISApplicationPool.Name ='W3SVC/AppPools /」+ apppool +「'」),null);

appPool.InvokeMethod(「Recycle」,null,null);