2012-02-03 29 views
5

Próbowałem kontrolować iTunes z ASP.NET z różnym poziomem powodzenia, ale żaden nie pasuje dokładnie do mojej sytuacji. Rozglądałem się po Internecie i wypróbowałem wszystkie dostarczone rozwiązania bez powodzenia. Próbowałem używać wielu różnych bibliotek iTunes COM (nawet tego, który jest na stronie dewelopera firmy Apple), wciąż nie ma szczęścia. Problem polega na tym, że kiedy używam serwera programistycznego Visual Studio do tworzenia instancji obiektu iTunes COM - iTunesApp - działa idealnie i pozwala kontrolować iTunes. Działa to również doskonale w aplikacji Console i WinForms. Ale gdy tylko przełączę go na serwer IIS, nic nie działa. Potrzebuję go, aby działał jako strona internetowa w ASP.NET, aby mógł odbierać żądania z innych urządzeń. Ma to ogromny potencjał w budowaniu aplikacji internetowej do kontrolowania i zasadniczo budowania interfejsu API opartego na sieci Web w pobliżu iTunes. Zgłasza następujący błąd na tworzeniu nowej instancji klasy iTunesApp:Kontrolowanie iTunes z ASP.NET działającym pod 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)).

początku byłem za pomocą pliku iTunes.Interop.dll, który jest używany w wielu projektach na całym internecie. Próbowałem wiele razy bez powodzenia, a następnie próbowałem zarejestrować DLL, który rzucił błąd o nie znajdowaniu punktu wejścia do biblioteki DLL. Tak więc stwierdziłem, że musisz zezwolić na tożsamość puli aplikacji, z której działa aplikacja internetowa, aby uzyskać dostęp do usługi DCOM w usługach składników systemu Windows. Zrobiłem to, a także dałem dostęp do wszystkich, wciąż nic. Następnie próbowałem użyć biblioteki COM zainstalowanej przez iTunes (kiedy idziesz do Add Reference, zamiast przeglądania pliku DLL, przeszedłem pod kartę COM i wybrano bibliotekę typu iTunes), bez powodzenia. Podejrzewam, że gdy dałem pozwolenie na składnik DCOM systemu Windows, dałem pozwolenie na zainstalowaną bibliotekę COM iTunes, ponieważ system Windows rozpoznał, że jest zainstalowany (i nie mogłem zarejestrować oryginalnego iTunes.Interop.dll - Windows nie wiedziałby, że to było tam).

Zarówno zainstalowana biblioteka typów iTunes, jak i plik iTunes.Interop.dll, dały mi ten sam wyżej wymieniony błąd. O dziwo, identyfikator CLSID w błędzie (DC0C2640-1415-4644-875C-6F4D769839BA) nie pasuje do "Identyfikatora aplikacji" iTunes, ponieważ jest wywoływany w oknie Component Services \ DCOM \ iTunes \ Properties, czyli F98206B5-F052-4965-9FA0-85F61BC3C19D. Podejrzewam, że nie udzielam pozwolenia na prawidłowy składnik DCOM w systemie Windows. Przeszukałem mój rejestr dla CLSID w błędzie i nie zwraca on żadnych wyników, więc doszedłem do wniosku, że to nie jest identyfikator aplikacji żadnego z komponentów DCOM (wszystkie identyfikatory aplikacji są poniżej Computer\HKEY_CLASSES_ROOT\Wow6432Node\AppID - również tam nie znalazłem). Ale ponieważ jest to CLSID w błędzie, musi być gdzieś odwołany, po prostu nie mogłem go nigdzie znaleźć. Wyszukiwanie identyfikatora w Google też nie jest pomocne, ponieważ oba zwracają wyniki wyszukiwania, które zawierają iTunes, ale nie są wystarczająco szczegółowe, aby rozwiązać problem.

Próbowałem nawet podejścia wielowątkowego. Ponieważ biblioteki COM działają w modelu STA, a serwery WWW działają w MTA, jedno z rozwiązań, które znalazłem zaproponowało konwersję modelu wykonania wątku serwera na STA, a następnie wywołanie biblioteki COM. To też nie działa. Powieliłem ten problem na dwóch komputerach działających całkowicie niezależnie, a na obu komputerach program Visual Studio Development Server (i aplikacje konsolowe i WinForm) może go uruchomić, ale usługi IIS nie.

Oto kod używam (bez wielowątkowości):

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

Błąd znajduje się rzucić na linii: var iTunes = new iTunesApp();

Jeśli kod wielowątkowy pomoże, mogę zakładać, że zbyt. W tej chwili jestem prawie bezkierunkowy i doceniam każdą pomoc w każdej roli. Dzięki.

P.S .: Rozglądałem się już po Internecie i wypróbowałem wszystkie wspomniane powyżej rozwiązania wielokrotnie na wielu komputerach, więc należy o tym pamiętać, odpowiadając. Dzięki.

Odpowiedz

1

Nie mam żadnego doświadczenia z bibliotekami iTunes, ale symptomy, które opisujesz, są dla mnie kwestią bezpieczeństwa. Usługi IIS prawdopodobnie działają jako konto lokalne NETWORK_SERVICE, podczas gdy wszystko inne, o którym wspomniałeś (prawdopodobnie) działa jako zwykłe konto użytkownika (twoje).

Aby to szybko sprawdzić, w menedżerze usług IIS można zmienić konto używane przez pulę aplikacji (jest to na karcie tożsamości). Jeśli to działa, musisz albo dowiedzieć się, co robi test bezpieczeństwa i sprawdzić, czy możesz autoryzować NETWORK_SERVICE jako prawidłowe konto, czy po prostu uruchomić pulę aplikacji przy użyciu innego konta.

+0

Tak, myślałem, że to był problem na początku, ale bezskutecznie. Próbowałem uruchomić pulę aplikacji pod wieloma różnymi kontami, w tym moim regularnym kontem (z dostępem administratora), systemem lokalnym, administratorem i usługą lokalną. Żadne z nich nie działa. Nawet ustawiłem komponent COM, który ma być uruchamiany pod jakimkolwiek kontem, i próbowałem ustawić go tak, by działał pod każdym z tych konkretnych kont, o czym wspomniałem powyżej. Jeśli możesz uruchomić go w dowolnych okolicznościach w IIS, opublikuj, jak to zrobiłeś i jakie były twoje ustawienia. Dzięki – Anshul

+0

Próbowałem również przejść do usług i ustawić proces roboczy IIS (w3wp.exe) i IIS się uruchomić pod moim kontem administratora, ale wciąż nie ma szczęścia. – Anshul

Powiązane problemy