2009-08-17 8 views
3

Je cours Classic ASP sur Windows 2008 Server x64 en mode 64 bits. ADODB fonctionne bien en 64 bits avec ASP classique. J'ai un problème avec la mienne .NET COM DLL. J'ai créé une DLL .NET COM avec ce code comme exemple:ASP classique en mode 64 bits et .NET COM problème de registre DLL

using System.Runtime.InteropServices; 
namespace TestNamespace 
{ 
    [Guid("C446E97E-B415-4677-B99E-9644657FC98"), 
    ProgId("TestNamespace.TestClass"), 
    ComVisible(true)] 
    public class TestClass 
    { 
     [ComVisible(true)] 
     public void TestMethod(string s) 
     { 
      //some code that uses System.Messaging to send a message 
     } 
    } 
} 

La DLL est compilée pour Any CPU. Dans ASP créer objet et méthode Execute:

Set test = Server.CreateObject("TestNamespace.TestClass") 
test.TestMethod("test string") 
Set test = Nothing 

Je me inscris DLL à l'aide RegAsm:

%windir%\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe /tlb /codebase TestNamespace.dll 

Sur la plate-forme x86 l'ASP et la DLL sont en cours d'exécution très bien.

Sur Windows 2008 Server J'ai essayé:

  • Compile DLL pour x64 et enregistrer à l'aide ... \ Framework64 \ v2.0.50727 \ RegAsm.exe
  • Compile pour différentes plates-formes et de placer dans différents endroits, y compris GAC
  • beaucoup plus

Les erreurs (situations différentes):

  • Microsoft VBScript erreur d'exécution '800a01ad' Server.CreateObject a échoué
  • Erreur d'objet serveur 'ASP 0177: 80070002' Server.CreateObject Échec
  • Erreur d'objet serveur 'ASP 0177: 800401f3' Server.CreateObject a échoué
  • serveur Erreur d'objet 'ASP 0177: 80131040' Échec de Server.CreateObject

La seule façon de travailler sur Windows 2008 Server x64, lorsque le pool d'applications ASP a été basculé en mode 32 bits. Mais j'en ai besoin pour travailler en 64bit! Je pense que le problème n'est pas avec les autorisations, parce que 32bit ont fonctionné.

Quelqu'un at-il de l'expérience en ASP classique et COM .NET fonctionnant tous les deux en 64 bits?

+0

Trouvé, que tout est ok jusqu'à ce que System.Messaging soit utilisé dans la méthode.Un service Windows, qui consomme des messages, créé et installé pour la plate-forme x64 fonctionne correctement avec System.Messaging. Probablement c'est un problème avec le processus 64bit asp.dll. –

Répondre

1

Trouvé, que tout est ok jusqu'à ce que System.Messaging soit utilisé dans la méthode. Un service Windows, qui consomme des messages, créé et installé pour la plate-forme x64 fonctionne correctement avec System.Messaging. Probablement c'est un problème avec le processus 64bit asp.dll.

1

"Mais j'en ai besoin pour travailler en 64bit!" Pourquoi? Vous ne serez jamais capable de charger n'importe quel DLL 32 bits dans un processus 64 bits and you will need to go out of proc if you need to do such communication - est-ce que vous voulez? Que comptez-vous faire avec votre espace d'adressage supplémentaire?

A topical blog post regarding what you're trying to go 64 bit for is this one by Rick Byers

Si vous faites vraiment croire que ce soit un bon investissement de votre temps, there's an article here on the internals of 64 bit COM which might help in figuring it out for yourself from first principles.

(je nourris instincts similaires à aller 64 bits dès que possible et faire avec tout cet héritage < 64 bittedness, mais parfois les choses ne sont pas cassées.)

Questions connexes