2012-02-03 9 views
5

Ho cercato di controllare iTunes con ASP.NET con vari livelli di successo, ma nessuno che si adatta perfettamente alla mia situazione. Ho guardato il Web e provato tutte le soluzioni fornite senza molta fortuna. Ho provato a utilizzare molte diverse librerie COM di iTunes (anche quella che si trova sul sito Web degli sviluppatori di Apple), ancora senza fortuna. Il problema è che quando utilizzo il server di sviluppo di Visual Studio per creare un'istanza dell'oggetto COM di iTunes - iTunesApp - funziona perfettamente e mi consente di controllare iTunes. Funziona perfettamente anche in un'app Console e WinForms. Ma non appena lo passo per utilizzare il server IIS, nulla sembra funzionare. Ne ho bisogno per funzionare come un sito Web sotto ASP.NET in modo che possa ricevere richieste da altri dispositivi. Ciò ha un enorme potenziale per la creazione di un'app Web per il controllo e in sostanza per la creazione di un'API basata sul Web attorno a iTunes. Si getta il seguente errore sulla creazione di una nuova istanza della classe iTunesApp:Controllo di iTunes con ASP.NET in esecuzione su 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)).

Prima stavo usando il file iTunes.Interop.dll che viene utilizzato in molti dei progetti in tutto il web. Ho provato molte volte senza fortuna e poi ho provato a registrare la DLL, che ha generato un errore nel non trovare un punto di ingresso nella DLL. Quindi ho scoperto che devi dare il permesso all'identità del pool di applicazioni su cui è in esecuzione l'app web per accedere ed eseguire il servizio DCOM in Servizi componenti Windows. L'ho fatto e ho anche dato l'accesso a Tutti, ancora niente. Poi ho provato ad usare la libreria COM che è installata da iTunes (quando vai su Aggiungi riferimento, invece di navigare nel file DLL, sono andato sotto la scheda COM e ho selezionato la libreria dei tipi di iTunes), senza fortuna. Sospetto che quando ho dato il permesso al componente DCOM di Windows, ho dato il permesso alla libreria COM di iTunes installata da quando Windows lo ha riconosciuto come installato (e non sono riuscito a registrare l'originale iTunes.Interop.dll - Windows non avrebbe saputo che era Là).

Entrambi, la libreria dei tipi di iTunes installata e il file iTunes.Interop.dll, mi hanno dato lo stesso errore di cui sopra. Stranamente, il CLSID nell'errore (DC0C2640-1415-4644-875C-6F4D769839BA) non corrisponde a "Application ID" di iTunes, come viene chiamato nella finestra Servizi componenti \ DCOM \ iTunes \ Properties, che è F98206B5-F052-4965-9FA0-85F61BC3C19D. Il mio sospetto è che non sto dando il permesso al componente DCOM corretto in Windows. Ho cercato il mio registro per il CLSID nell'errore e non ha restituito alcun risultato, quindi ho concluso che non è l'ID applicazione di alcun componente DCOM (tutti gli ID applicazione sono sotto Computer\HKEY_CLASSES_ROOT\Wow6432Node\AppID - non è stato trovato nemmeno lì). Ma dal momento che è il CLSID nell'errore, deve essere referenziato da qualche parte, non riuscivo a trovarlo da nessuna parte. La ricerca dell'ID su Google non è utile perché entrambi restituiscono risultati di ricerca che includono iTunes, ma nessuno specifico del problema.

Ho anche provato l'approccio multithread. Poiché le librerie COM vengono eseguite nel modello STA e i server Web vengono eseguiti in MTA, una delle soluzioni che ho trovato suggeriva di convertire il modello di esecuzione del thread del server in STA e quindi chiamare la libreria COM. Questo non ha funzionato neanche. Ho duplicato questo problema su 2 computer che girano completamente indipendenti, e su entrambi i computer, il Visual Studio Development Server (e le applicazioni Console e WinForms) possono eseguirlo, ma IIS non può farlo.

Ecco il codice che sto utilizzando (senza il multithreading):

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'errore è lanciare alla linea: var iTunes = new iTunesApp();

Se il codice multithread aiuterebbe, posso pubblicare anche questo. Sono praticamente senza direzione a questo punto e apprezzerei qualsiasi aiuto in qualsiasi capacità. Grazie.

P.S .: Ho già guardato in Internet e provato tutte le soluzioni che ho menzionato più volte su più computer, quindi tienilo a mente quando rispondi. Grazie.

risposta

1

Non ho esperienza con le librerie di iTunes, ma i sintomi che descrivi mi sembrano un problema di sicurezza. IIS è probabilmente in esecuzione come account locale NETWORK_SERVICE mentre tutto ciò che hai citato è (probabilmente) in esecuzione come un normale account utente (il tuo).

Per controllare rapidamente, in Gestione IIS è possibile modificare l'account utilizzato dal pool di applicazioni (si trova nella scheda Identità). Se questo funziona, allora è necessario capire cosa sta facendo il controllo di sicurezza e vedere se è possibile autorizzare NETWORK_SERVICE come account valido, o semplicemente eseguire il pool di applicazioni utilizzando un account diverso.

+0

Sì, ho pensato che era il problema in un primo momento anche, ma senza successo. Ho provato a eseguire il pool di applicazioni in molti account diversi, incluso il mio account normale (che ha accesso come amministratore), LocalSystem, Administrator e LocalService. Nessuno di questi sembra funzionare. Ho persino impostato il componente COM per poter essere eseguito su qualsiasi account, e ho provato a impostarlo per l'esecuzione in ciascuno di questi account specifici come ho menzionato sopra. Se è possibile eseguirlo in qualsiasi circostanza in IIS, si prega di postare come l'avete fatto e quali erano le vostre impostazioni. Grazie – Anshul

+0

Ho anche provato ad andare in Servizi e impostare IIS worker process (w3wp.exe) e IIS stesso da eseguire sotto il mio account admin, ma ancora senza fortuna. – Anshul