2009-10-14 32 views
5

Tôi đang cố tạo một trang Asp.Net đơn giản để đọc các bộ đếm Perfmon từ một máy từ xa.Truy cập từ chối đọc bộ đếm Perfmon từ máy từ xa (Asp.Net)

Khi tôi chạy trang bằng cách sử dụng máy chủ web phát triển Visual Studio tất cả là tốt, tuy nhiên khi tôi cố gắng chạy cùng một trang khi lưu trữ trên IIS tôi nhận được một lỗi truy cập bị từ chối trên dòng instantiates quầy Perfmon:

PerformanceCounter freeSpaceCounter = new PerformanceCounter("LogicalDisk", "Free Megabytes", "D:", "RemoteMachine12"); 

Đây là ngoại lệ tôi nhận được:

Exception Details: System.ComponentModel.Win32Exception: Access is denied 

tôi đã cố gắng sử dụng cả truy cập nặc danh (với bản thân mình như là người dùng ẩn danh) và Integrated Windows Authentication - cả hai không làm việc. Rõ ràng một số tài khoản khác được sử dụng để đọc các quầy PerfMon (như tài khoản ASPNET). Làm cách nào để trang của tôi truy cập các quầy PerfMon bằng tài khoản của tôi thay vì tài khoản đó?

Trả lời

6

Sự cố bạn gặp phải ở đây là IIS chạy trong ngữ cảnh của tài khoản cục bộ (theo mặc định). Tài khoản cục bộ này không tồn tại trên máy từ xa và do đó không thể kết nối để nhận các bộ đếm hiệu suất. Khi bạn sử dụng máy chủ web phát triển VS, nó chạy dưới tài khoản cục bộ của riêng bạn và vì vậy mọi thứ hoạt động.

Nếu bạn ở trong môi trường miền, bạn có thể cấu hình nhóm ứng dụng IIS để chạy như một tài khoản miền có quyền truy cập vào cả hai máy và mọi thứ sẽ hoạt động, tuy nhiên bạn có thể muốn kiểm soát nhiều hơn.

Bạn có thể sử dụng xác thực cơ bản, với ứng dụng được định cấu hình cho mạo danh (hoặc nếu bạn đang sử dụng IIS7 có hồ bơi được định cấu hình để chạy trong tài khoản đã xác thực) hoặc bạn mạo danh ngay trước khi bạn đọc bộ đếm.

Có một vài cách khác nhau để mạo danh - an toàn nhất là cấu hình IIS để sử dụng xác thực tích hợp và sau đó quấn lên gọi

PerformanceCounter freeSpaceCounter = null; 
using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate()) 
{ 
    freeSpaceCounter = new PerformanceCounter("LogicalDisk", 
           "Free Megabytes", "D:", "RemoteMachine12"); 
} 

Nếu bạn không muốn xác thực thì bạn sẽ phải cấu hình hồ bơi ứng dụng hoặc mã cứng tên người dùng và mật khẩu trong đơn của bạn - đây phải là phương sách cuối cùng, xem KB306158

+0

Cảm ơn - đó chính là câu trả lời tôi đang tìm kiếm, đã xử lý! – Justin

2

Từ MSDN:

Để đọc bộ đếm hiệu suất trong Windows Vista, Windows XP Professional x64 Edition, hoặc Windows Server 2003, bạn phải là thành viên của Performance Monitor nhóm người dùng hoặc có quyền quản trị.

Các vấn đề liên quan