2010-02-02 5 views
5

Wir haben eine ASP.NET 1.1-Webanwendung. Es ruft ein C++ - COM-Objekt auf, das wiederum ein .NET-COM-Objekt aufruft. Ursprünglich war dieses .NET COM-Objekt eine .NET 1.1-Assembly. Jetzt müssen wir dieses .NET-COM-Objekt ändern, und in diesem Prozess verwenden wir jetzt Visual Studio 2008, sodass es jetzt ein .NET 2.0-COM-Objekt ist. Wir stellen jetzt fest, dass unsere ASP.NET 1.1-Webanwendung weiterhin das C++ - COM-Objekt aufrufen kann, aber das C++ - COM-Objekt kann CoCreateInstance() für das neue .NET 2.0-COM-Objekt nicht aufrufen. Wenn wir die Webanwendung für die Verwendung von .NET 2.0 Framework konfigurieren, kann das C++ - COM-Objekt das .NET 2.0-COM-Objekt aufrufen, wodurch jedoch die Webanwendung unterbrochen wird.Können Sie ein .NET 2.0-COM-Objekt aus einer ASP.NET 1.1-Webanwendung aufrufen?

Momentan plane ich das .NET COM-Objekt mit Visual Studio .NET 2003 neu zu erstellen, damit ich es zu einer .NET 1.1-Assembly machen kann. Aber ich würde das lieber nicht tun, wenn es möglich wäre. Ich weiß, wir sollten unsere Web-App auch auf .NET 2.0 upgraden, aber das wird länger dauern.

Gibt es eine Möglichkeit für unsere ASP.NET 1.1-Webanwendung, das .NET 2.0-COM-Objekt über das C++ - COM-Objekt aufzurufen?

Vielen Dank für Anregungen.

-Dave Herrmann

+1

Keine Möglichkeit, die .NET 1.1-Anwendung auf .NET 2.0 zu aktualisieren? Es gibt sehr wenig in .NET 2.0, das eine .NET 1.1-Anwendung beschädigen würde. –

Antwort

1

Nicht, wenn Sie es in-Prozess ausführen. Die Laufzeiten von .Net v1.1 und v2.0 können in einem Prozess nicht nebeneinander bestehen. Wer immer zuerst geladen wird, gewinnt.

Sie sollten es jedoch in einem separaten Prozess in einem COM + -Aktivierungskontext ausführen können. Dies könnte eine sinnvolle Lösung für Ihre Situation sein.

+0

Ja, das ist was ich herausgefunden habe. Meine .NET 2.0-COM-Assembly ist ein in-proc-COM-Objekt, da es als Teil von IIS ausgeführt wird. Also, ich denke, meine einzige Lösung ist, die alte Entwicklungsumgebung von Visual Studio .NET 2003 neu zu installieren und meine Assembly dort mit .NET 1.1 neu aufzubauen. Danke für die Antworten. -Dave Herrmann –

+0

Sie können In-Process-COM-Objekte in einem separaten Prozess ausführen und die COM + -Infrastruktur die Aufrufe für Sie marshalieren. Es ist eine einfache Frage der Konfiguration. Sie könnten das zuerst versuchen ... – codekaizen

0

Quick Vorschlag - es kann nichts einfacher machen ... aber es gibt einen möglichen Weg darum, warum nicht eine Speicherzuordnung für IPC-Kommunikation zwischen der .NET 1.1 und der .NET 2.0-Anwendung, zum Beispiel, erstellen , C++ - COM erstellt eine Speicherzuordnung zum Lesen/Schreiben, das .NET 1.1-Objekt öffnet die Speicherzuordnung, schreibt einige Daten, das C++ - COM-Objekt liest es und delegiert den Aufruf an das .NET 2-COM-Objekt ... und gibt Daten zurück über die Speicherkarte ... Entschuldigung, wenn ich Ihnen keinen besseren Vorschlag geben könnte ... sind Sie durch Zeitaufwand eingeschränkt?

.NET 1.1 -> C++ COM -> .NET 2.0 COM

hoffe, das hilft, Mit freundlichen Grüßen, Tom.

+0

Ich denke, nur die Konfiguration eines COM + -Kontextes wäre viel einfacher ... kein Code + Neukompilieren erforderlich. – codekaizen

+0

@codekaizen: oh ok ... mein Vorschlag war ein bisschen extrem .... :) – t0mm13b

0

Wenn ich Sie richtig verstehe, möchten Sie Ihre Baugruppe auf 1.1, nicht auf 2.0 bauen. Warum versuchen Sie nicht, den Befehlszeilencompiler zu verwenden? Sie müssen VS 2003 nicht nur zum Kompilieren und Erstellen einer Assembly installieren.

Wenn Sie nicht wissen, wie Sie starten, VS auf einem Sandbox-Rechner installieren, ein Projekt erstellen und das Ausgabefenster überprüfen - Sie sehen, welche Befehle zum Kompilieren und Erstellen verwendet werden (csc.exe oder vbc.exe) die wichtigsten) In den meisten Fällen handelt es sich nicht um Raketenwissenschaft.

Eine andere Option: 2.0 im Allgemeinen bewegen - wird nicht wirklich weh tun.

P.S .: .NET COM Objekt ist schlecht Schreibweise. Nenne es eine Versammlung.

Verwandte Themen