2012-04-02 9 views
3

Ich brauche eine .Net C# Komponente mit diesen beiden Anforderungen zu erstellen:Interop zwischen MSXML und .Net mit COM +

  1. Geben Sie eine XML und XSL-Pfad als Eingabeparameter sollte eine HTML-String zurück. muss
  2. Die XSLT-Engine mit dem MSXML XSLT-Prozessor über das Thema diesen beängstigenden Knowledge Base-Artikel gefunden wird implementiert, sagt *

Mit MSXML über COM Interop könnte eine Option sein, aber ich habe:

815112 INFO: Verwendung von MSXML wird nicht in .NET-Anwendungen unterstützt
http://support.microsoft.com/kb/815112

MSXML verwendet Threading-Modelle und Garbage-Collection-Mechanismen, die nicht mit dem .NET Framework kompatibel sind. Die Verwendung von MSXML in .NET Anwendungen durch COM-Interoperabilität kann zu unerwarteten Problemen führen, die schwer zu debuggen sind.

kann mit MSXML in Out-of-Process-COM+ Paket einen sicheren Weg seinen MSXML zuzugreifen einer .NET-Anwendung?
Wie in meinen Anforderungen angegeben, muss ich nicht MSXML Klassen oder Schnittstellen als Input/Output-Parameter, sondern nur Plain Vanilla-Strings behandeln.

* Die Code-Basis besteht aus Tausenden von XSL-Dateien, die auf MSXML XSLT-Engine gut laufen (MSXML 4.0), aber mit der pickier System.xml Net-Bibliothek mehr als ein Fehler geben.

+1

Ich verstehe nicht, warum nicht eine der eingebauten XML-Bibliotheken verwenden? Sie sagen, dass system.xml Ihnen Probleme bereitet. Vielleicht wäre es einfacher, das Problem zu debuggen, das Sie mit System.Xml haben. Alternativ könnten Sie die Dateien nicht "vorverarbeiten", wenn Sie (wahrscheinlich) Formatierungsprobleme haben? –

+1

Ich stimme zu 100% mit @MaximGershkovich- Ich kann mir nicht helfen, aber stellen Sie sich vor, dass die Behebung Ihres Problems mit den integrierten XML-Bibliotheken zu einer weitaus stabileren und leistungsfähigeren Codebasis führt. –

+0

@systempuntoout * was * Fehler? XML/XSLT ist ein sehr gut definiertes System - Sie sollten keine Unterschiede zwischen den Bibliotheken sehen. Es ist nicht so, dass wir versuchen, nicht hilfreich zu sein - eher als ob wir versuchen würden, Sie in Richtung des Aufzugs anstelle der Treppe zu weisen. –

Antwort

3

Ja, können Sie eine out-of-process COM+ application und verwenden Sie dann die Klassen in der System.EnterpriseServices namespace oder einem WCF (ich würde gehen mit diesem, persönlich) erstellen, um die COM + -Anwendung zu verbinden.

Natürlich bedeutet dies, dass Sie eine andere Technologie neben .NET verwenden müssen, um Ihre Komponente zu hosten, aber es ist wahrscheinlich der einfachste Weg zur Prozessisolierung und Interoperabilität mit .NET out-of-the-box .

Verwandte Themen