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.
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
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