2012-05-29 13 views
6

Stworzyliśmy jeden .Net Assembly i udostępniliśmy go jako obiekt COM. Kiedy próbujemy odsłonić dowolną metodę tego obiektu na stronie ASP, pojawia się błąd "80131509". Nie otrzymujemy żadnego błędu podczas tworzenia obiektu. tzn. Server.CreateObject przechodzi.Błąd '80131509' w ASP Strona

Działa to dobrze w naszym środowisku programistycznym, ale otrzymujemy ten błąd w środowisku UAT. Rozwój i UAT są prawie takie same, z tym, że UAT jest bezpieczniejszy. Próbowałem wszystkich możliwych sposobów, ale bez powodzenia. Pracuję nad tym problemem przez ostatnie 4 dni i każda pomoc zostanie doceniona.

Podejrzewam, że może wystąpić problem z uprawnieniami IIS 7 w zakresie ujawniania tej biblioteki DLL. Ale nie wiesz, co to może być? Przekazaliśmy również pełne prawa do IUSR.

Kod:

set obj = Server.CreateObject("DataAccess") 
dim rs 
set rs=obj.GetLocations("All") <--- **Here i am getting an error.** 
+1

Czy plik .dll jest zarejestrowany na serwerze UAT, tzn. Z 'regsvr32'? – mellamokb

+0

Przepraszam, zapomniałem wspomnieć o tej części. Tak dll jest zarejestrowany na serwerze UAT za pomocą Regasm. – Bugreport

+0

Czy zarejestrujesz się.Zestaw NET do użytku zarówno w wersji 32-bitowej, jak i 64-bitowej? Nie wiem, czy klasyczne ASP działa jako proces 32-bitowy lub 64-bitowy (prawdopodobnie pod w3wp.exe). Zauważ, że czasami wywołanie CreateObject może przebiegać bezgłośnie, pojawia się tylko błąd podczas próby użycia obiektu. Sugeruję, aby spróbować utworzyć utworzony przez Microsoft obiekt COM widoczny w systemie COM, aby sprawdzić, czy system działa w zasadzie, zanim dowiesz się, co jest nie tak z twoją konkretną implementacją. – Dai

Odpowiedz

2

Mamy kilka dll com Jest w mojej pracy, a my często napotkasz problemy gdzie zarejestrować DLL z regasm i dll nie działa. Działa w innych środowiskach, ale z jakiegoś powodu po prostu nie zadziała w tej jednej instancji. Komputery podręczne są zmienne. Czasami będziemy go rejestrować, wyrejestrowywać, ponownie rejestrować i restartować. Czasem w tajemniczy sposób zaczynają działać, innym razem nie.

Jest jeszcze kilka rzeczy, które mogą pójść nie tak.

Upewnij się, że ustawiono odpowiednie uprawnienia dla folderów, w których znajduje się dll i dla samej biblioteki dll. Upewnij się również, że wszystkie zależne biblioteki DLL są obecne i mają również odpowiednie uprawnienia. Upewnij się, że wszystko, do czego dll potrzebuje dostępu, ma również odpowiednie uprawnienia.

Jeśli to się nie powiedzie, otwórz regedit. Wyszukaj identyfikator powiązany z obiektem com. Czasami odkryjesz, że ścieżki, które zawiera rejestr, są pomieszane. Wyczyść wszelkie odwołania do obiektu COM, zrestartuj i ponownie zarejestruj.

Widziałem również wyjątek zgłaszany do konstruktora powodującego problemy. Po uruchomieniu obiektu com wysadza w powietrze. W jednym z naszych obiektów dodano metodę wysyłania wiadomości e-mail w przypadku wystąpienia wyjątku.

W jednym przypadku mieliśmy stary obiekt com, który nie był już zgodny z wersją uruchomionych okien. Jeśli zmodernizowałeś serwer, może to być problem. W naszym przypadku napisaliśmy własny komponent, aby zastąpić zepsuty stary.

Również upewnić się, że jeśli obiekt com jest silnie wpisany skorzystanie z „regasm/TLB/codebase fickle_com_object.dll”

W skrócie istnieje kilka rzeczy, które powodują obiektu COM nie działa:

  1. wiele ścieżek w rejestrze
  2. Błędne uprawnień zabezpieczeń folderów
  3. upaść, gdy tworzony

Być może jedna z tych rzeczy rozwiąże Twój problem. Wiem, jak trudno czasem. Powodzenia!

Powiązane problemy