2012-02-03 15 views
5

Tôi đã cố gắng kiểm soát iTunes với ASP.NET với mức độ thành công khác nhau, nhưng không có gì phù hợp với tình hình của tôi một cách chính xác. Tôi đã xem xét trên web và thử tất cả các giải pháp được cung cấp mà không có nhiều may mắn. Tôi đã thử sử dụng nhiều thư viện iTunes COM khác nhau (ngay cả trên thư viện của nhà phát triển Apple), vẫn không có may mắn. Vấn đề là, khi tôi đang sử dụng máy chủ phát triển Visual Studio để tạo ra một thể hiện của đối tượng iTunes COM - iTunesApp - nó hoạt động hoàn hảo và cho phép tôi kiểm soát iTunes. Điều này cũng hoạt động hoàn hảo trong một ứng dụng Console và WinForms. Nhưng ngay sau khi tôi chuyển đổi nó để sử dụng máy chủ IIS, không có gì có vẻ làm việc. Tôi cần nó để chạy như một trang web dưới ASP.NET để nó có thể nhận được yêu cầu từ các thiết bị khác. Điều này có tiềm năng to lớn để xây dựng một ứng dụng web để kiểm soát và về cơ bản xây dựng một API dựa trên Web trên iTunes. Nó ném các lỗi sau trên tạo ra một thể hiện mới của lớp iTunesApp:Kiểm soát iTunes với ASP.NET đang chạy dưới IIS

Retrieving the COM class factory for component with CLSID {DC0C2640-1415-4644-875C-6F4D769839BA} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).

Trước tiên tôi đã sử dụng iTunes.Interop.dll tập tin được sử dụng trong rất nhiều các dự án khắp nơi trên web. Tôi đã thử nhiều lần mà không có may mắn và sau đó cố gắng đăng ký DLL, mà đã ném một lỗi về việc không tìm thấy một điểm vào DLL. Vì vậy, sau đó tôi thấy rằng bạn phải cấp quyền cho ứng dụng nhận dạng hồ bơi mà ứng dụng web đang chạy theo acces và thực hiện dịch vụ DCOM trong Windows Component Services. Tôi đã làm điều đó, và cũng cho phép mọi người, vẫn không có gì. Sau đó, tôi đã thử bằng cách sử dụng thư viện COM được cài đặt bởi iTunes (khi bạn vào Add Reference, thay vì duyệt đến file DLL, tôi đã đi theo tab COM và chọn iTunes Type Library), không may mắn. Tôi nghi ngờ rằng khi tôi cho phép thành phần Windows DCOM, tôi đã cho phép thư viện iTunes COM đã cài đặt từ khi Windows nhận ra rằng khi được cài đặt (và tôi không thể đăng ký bản gốc iTunes.Interop.dll - Windows sẽ không biết nó là ở đó).

Cả hai, Thư viện kiểu iTunes đã cài đặt và tệp iTunes.Interop.dll, đã cho tôi lỗi tương tự như trên. Kỳ lạ thay, CLSID trong lỗi (DC0C2640-1415-4644-875C-6F4D769839BA) không khớp với "ID ứng dụng" của iTunes, vì nó được gọi trong cửa sổ Component Services \ DCOM \ iTunes \ Properties, là F98206B5-F052-4965-9FA0-85F61BC3C19D. Nghi ngờ của tôi là tôi không cho phép thành phần DCOM chính xác trong Windows. Tôi đã tìm kiếm sổ đăng ký của mình cho CLSID trong lỗi và không trả về kết quả nào, vì vậy tôi đã kết luận rằng đó không phải là ID ứng dụng của bất kỳ thành phần DCOM nào (tất cả ID ứng dụng dưới Computer\HKEY_CLASSES_ROOT\Wow6432Node\AppID - cũng không tìm thấy trong đó). Nhưng vì nó là CLSID trong lỗi, nó phải được tham chiếu đến một nơi nào đó, tôi chỉ không thể tìm thấy nó ở bất cứ đâu. Tìm kiếm một trong hai ID trên Google không hữu ích vì cả hai đều trả lại kết quả tìm kiếm bao gồm iTunes nhưng không có đủ cụ thể cho vấn đề.

Tôi thậm chí đã thử phương pháp đa luồng. Vì các thư viện COM chạy trong mô hình STA và các máy chủ web chạy trong MTA, một trong các giải pháp mà tôi đã tìm thấy đề xuất để chuyển đổi mô hình thực hiện luồng của máy chủ thành STA và sau đó gọi thư viện COM. Điều này cũng không hiệu quả. Tôi đã nhân đôi vấn đề này trên 2 máy tính chạy hoàn toàn độc lập, và trên cả hai máy tính, Visual Studio Development Server (và Console và WinForms ứng dụng) có thể chạy nó, nhưng IIS không thể.

Dưới đây là đoạn code tôi đang sử dụng (không có đa luồng):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Security.Principal; 
using System.Threading; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using iTunesLib; 


namespace NewASPXNetduino2 
{ 
     public partial class _Default : System.Web.UI.Page 
     { 
       protected void Page_Load(object sender, EventArgs e) 
       { 
         Response.Write(WindowsIdentity.GetCurrent().Name + "\n"); 

         var iTunes = new iTunesApp(); 

         iTunes.Play(); 
       } 
     } 
} 

Lỗi này là ném vào dòng: var iTunes = new iTunesApp();

Nếu mã đa luồng sẽ giúp đỡ, tôi có thể đăng bài mà quá. Tôi khá nhiều hướng vào thời điểm này và sẽ đánh giá cao bất kỳ sự giúp đỡ nào trong bất kỳ khả năng nào. Cảm ơn.

P .: Tôi đã xem xét trên Internet và đã thử tất cả các giải pháp mà tôi đã đề cập ở trên nhiều lần trên nhiều máy tính, vì vậy hãy ghi nhớ điều đó khi trả lời. Cảm ơn.

Trả lời

1

Tôi không có kinh nghiệm về thư viện itunes, nhưng các triệu chứng bạn mô tả giống như vấn đề bảo mật đối với tôi. IIS có khả năng chạy như tài khoản cục bộ NETWORK_SERVICE trong khi mọi thứ khác bạn đã đề cập là (có thể) đang chạy như một tài khoản người dùng thông thường (của bạn).

Để kiểm tra nhanh điều này, từ trong trình quản lý IIS, bạn có thể thay đổi tài khoản mà nhóm ứng dụng sử dụng (nó nằm trong tab nhận dạng). Nếu điều này làm việc, thì bạn cần phải tìm ra những gì đang thực hiện kiểm tra bảo mật và xem liệu bạn có thể ủy quyền cho NETWORK_SERVICE như một tài khoản hợp lệ hay chỉ chạy pool ứng dụng bằng một tài khoản khác.

+0

Vâng tôi nghĩ đó là vấn đề lúc đầu cũng vậy, nhưng vô ích. Tôi đã cố chạy Application Pool dưới nhiều tài khoản khác nhau, bao gồm tài khoản thông thường của tôi (có quyền truy cập quản trị), LocalSystem, Administrator và LocalService. Không ai trong số này dường như làm việc. Tôi thậm chí đã thiết lập thành phần COM được phép chạy dưới bất kỳ tài khoản nào và tôi đã cố gắng thiết lập nó để chạy theo từng tài khoản cụ thể như tôi đã đề cập ở trên. Nếu bạn có thể chạy nó trong mọi trường hợp dưới IIS, vui lòng đăng lại cách bạn đã thực hiện và cài đặt của bạn. Cảm ơn – Anshul

+0

Tôi cũng đã cố gắng để đi vào dịch vụ và thiết lập quá trình công nhân IIS (w3wp.exe) và IIS chính nó để chạy theo tài khoản quản trị của tôi, nhưng vẫn không có may mắn. – Anshul