2012-02-03 13 views
5

He intentado controlar iTunes con ASP.NET con distintos niveles de éxito, pero ninguno que se ajuste exactamente a mi situación. He buscado en la web y probado todas las soluciones proporcionadas sin mucha suerte. He intentado utilizar muchas bibliotecas de iTunes COM diferentes (incluso la que está en el sitio web de desarrolladores de Apple), todavía sin suerte. El problema es que cuando uso el servidor de desarrollo de Visual Studio para crear una instancia del objeto COM de iTunes - iTunesApp - funciona perfectamente y me permite controlar iTunes. Esto también funciona perfectamente en una aplicación de consola y WinForms. Pero tan pronto como lo cambio para usar el servidor IIS, nada parece funcionar. Necesito que se ejecute como un sitio web en ASP.NET para que pueda recibir solicitudes de otros dispositivos. Esto tiene un tremendo potencial para construir una aplicación web para controlar y, esencialmente, construir una API basada en la web en torno a iTunes. Se lanza el siguiente error en la creación de una nueva instancia de la clase iTunesApp:Controlando iTunes con ASP.NET ejecutándose bajo 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)).

En primer lugar yo estaba usando el archivo iTunes.Interop.dll que se utiliza en muchos de los proyectos en la web. Intenté muchas veces sin suerte y luego traté de registrar el archivo DLL, que arrojó un error al no encontrar un punto de entrada en el archivo DLL. Entonces descubrí que debe dar permiso a la Identidad del grupo de aplicaciones en la que se ejecuta la aplicación web para acceder y ejecutar el servicio DCOM en Servicios de componentes de Windows. Lo hice, y también di acceso a Todos, todavía nada. Luego intenté usar la biblioteca COM instalada por iTunes (cuando vaya a Agregar referencia, en lugar de buscar el archivo DLL, fui a la pestaña COM y seleccioné la biblioteca de tipos de iTunes), no tuve suerte. Sospecho que cuando autoricé el componente DCOM de Windows, autoricé la instalación de la biblioteca COM de iTunes porque Windows reconoció que estaba instalado (y no pude registrar el iTunes.Interop.dll original: Windows no sabría que era ahí).

Ambos, el iTunes Type Library instalado y el archivo iTunes.Interop.dll, me dieron el mismo error antes mencionado. Extrañamente, el CLSID en el error (DC0C2640-1415-4644-875C-6F4D769839BA) no coincide con la "ID de aplicación" de iTunes, como se llama en la ventana Servicios de componentes \ DCOM \ iTunes \ Properties, que es F98206B5-F052-4965-9FA0-85F61BC3C19D. Mi sospecha es que no estoy dando permiso para el componente correcto de DCOM en Windows. Busqué en mi registro el CLSID en el error y no arrojó ningún resultado, así que llegué a la conclusión de que no es la ID de aplicación de ninguno de los componentes de DCOM (todas las ID de aplicación están bajo Computer\HKEY_CLASSES_ROOT\Wow6432Node\AppID, tampoco lo encontré allí). Pero dado que es el CLSID en el error, debe estar referenciado en algún lugar, simplemente no pude encontrarlo en ningún lado. La búsqueda de ID en Google tampoco es útil porque ambos arrojan resultados de búsqueda que incluyen iTunes, pero ninguno es lo suficientemente específico para el problema.

Incluso probé el enfoque multiproceso. Como las bibliotecas COM se ejecutan en el modelo STA y los servidores web se ejecutan en MTA, una de las soluciones que encontré sugirió convertir el modelo de ejecución de subprocesos del servidor a STA y luego llamar a la biblioteca COM. Esto tampoco funcionó. He duplicado este problema en 2 computadoras que se ejecutan completamente independientes, y en ambas computadoras, el Visual Studio Development Server (y las aplicaciones de consola y WinForms) pueden ejecutarlo, pero IIS no puede hacerlo.

Aquí está el código que estoy usando (sin el multihilo):

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(); 
       } 
     } 
} 

El error es tirar en la línea de: var iTunes = new iTunesApp();

Si el código multiproceso ayudaría, me pueden enviar también. En este momento estoy bastante desorientado y agradecería cualquier ayuda en cualquier capacidad. Gracias.

P.S .: Ya he buscado en Internet y he intentado todas las soluciones que he mencionado anteriormente varias veces en varias computadoras, así que tenga esto en cuenta al responder. Gracias.

Respuesta

1

No tengo experiencia con las bibliotecas de iTunes, pero los síntomas que describes me parecen un problema de seguridad. IIS probablemente se esté ejecutando como la cuenta local NETWORK_SERVICE, mientras que todo lo demás que mencionó se ejecutará (probablemente) como una cuenta de usuario normal (suya).

Para comprobar rápidamente esto, desde el administrador de IIS puede cambiar la cuenta que utiliza el grupo de aplicaciones (está debajo de la pestaña de identidad). Si esto funciona, entonces necesita averiguar qué está haciendo el control de seguridad y ver si puede autorizar NETWORK_SERVICE como una cuenta válida, o simplemente ejecutar el grupo de aplicaciones usando una cuenta diferente.

+0

Sí, pensé que ese era el problema al principio también, pero fue en vano. Intenté ejecutar Application Pool en muchas cuentas diferentes, incluida mi cuenta normal (que tiene acceso de administrador), LocalSystem, Administrator y LocalService. Ninguno de estos parece funcionar. Incluso he configurado el componente COM para que se pueda ejecutar bajo cualquier cuenta, y he intentado configurarlo para que se ejecute en cada una de esas cuentas específicas, como mencioné anteriormente. Si puede hacer que se ejecute bajo cualquier circunstancia en IIS, publique de nuevo cómo lo hizo y cuáles fueron sus configuraciones. Gracias – Anshul

+0

También intenté ir a Servicios y configurar el proceso de trabajo de IIS (w3wp.exe) e IIS para que se ejecute en mi cuenta de administrador, pero todavía no tuve suerte. – Anshul

Cuestiones relacionadas