2012-05-29 6 views
6

Abbiamo creato un. Assieme .Net e reso accessibile come oggetto COM. Quando stiamo cercando di esporre qualsiasi metodo di questo oggetto nella pagina ASP otteniamo un errore "80131509". Non riceviamo alcun errore quando stiamo creando un'istanza dell'oggetto. Ad esempio, Server.CreateObject sta passando.errore '80131509' in ASP Pagina

Questo sta funzionando bene nel nostro ambiente di sviluppo, ma stiamo ricevendo questo errore nell'ambiente UAT. Sviluppo e UAT sono quasi gli stessi, tranne che UAT è più sicuro. Ho provato tutti i modi possibili ma senza fortuna. Sto lavorando su questo problema negli ultimi 4 giorni e qualsiasi aiuto sarà apprezzato.

Sospetto che possa esserci qualche problema di autorizzazione con IIS 7 sull'esposizione di tale DLL. Ma non sei sicuro di cosa possa essere? Abbiamo anche dato pieno diritto all'IUSR.

Codice:

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

Il file .dll è registrato sul server UAT, ad es. Con 'regsvr32'? – mellamokb

+0

Scusa se ho dimenticato di menzionare quella parte. Sì dll è registrato sul server UAT usando Regasm. – Bugreport

+0

Hai registrato il tuo.Assemblaggio NET per uso a 32 e 64 bit? Non so se Classic ASP viene eseguito come processo a 32 o 64 bit (presumibilmente in w3wp.exe). Si noti che a volte una chiamata a CreateObject può fallire silenziosamente, si ottiene l'errore solo quando si tenta di utilizzare l'oggetto. Ti suggerisco di provare a creare un'istanza di un oggetto .NET visibile in Microsoft sviluppato da Microsoft per vedere se il sistema funziona in linea di principio, prima di scoprire cosa c'è che non va nella tua particolare implementazione. – Dai

risposta

2

Abbiamo un paio di DLL COM di al mio lavoro e spesso incorrere in problemi in cui abbiamo registrare la DLL con regasm e la DLL non funziona. Funziona in altri ambienti live ma per qualche motivo semplicemente non funzionerà in questa unica istanza. Le ragazze sono volubili. A volte lo registriamo, lo annulliamo la registrazione, lo registreremo nuovamente e il riavvio. A volte iniziano misteriosamente a lavorare altre volte no.

Ci sono ancora un paio di cose che possono andare storto.

Assicurarsi che le autorizzazioni corrette siano impostate nelle cartelle in cui si trova la dll e sulla dll stessa. Assicurarsi inoltre che siano presenti eventuali DLL dipendenti e che dispongano anche dell'autorizzazione corretta. Assicurati che tutto ciò a cui la dll ha bisogno di accedere abbia anche le autorizzazioni corrette.

Se ciò non riesce, aprire regedit. Cerca il guid associato all'oggetto com. A volte scoprirai che i percorsi del registro sono stati tutti mescolati. Eliminare eventuali riferimenti all'oggetto com, riavviare e registrarlo di nuovo.

Ho anche visto un'eccezione lanciata nel costruttore che causa problemi. Quando l'oggetto com si avvia, esplode. In uno dei nostri oggetti è stato aggiunto un metodo per inviare un'email quando si verifica un'eccezione.

In un caso avevamo un vecchio oggetto com che non era più compatibile con la versione di Windows in esecuzione. Se hai aggiornato il server su cui si trova potrebbe essere il problema. Nel nostro caso abbiamo scritto il nostro componente per sostituire quello vecchio rotto.

fare in modo che, se l'oggetto COM è fortemente tipizzato che si utilizza il "regasm/tlb/codebase fickle_com_object.dll"

Insomma ci sono diverse cose che causano oggetto COM a non funzionare anche:

  1. percorsi multipli nel registro
  2. autorizzazioni di protezione sbagliato su cartelle
  3. Crashing quando si sta creando

Forse una di queste cose risolverà il tuo problema. So quanto può essere difficile a volte. In bocca al lupo!