Laden...
frisch
myCSharp.de - Member
130
Themen
2.082
Beiträge
frisch durfte 2 Jahre lang auf eine Schule gehen und dort C und C++ lernen und dann musste er wieder von vorne anfangen... Meine Homepage ist in ASP.net programmiert. Einfach mal vorbeischauen. (Btw: Mir ist Funktionalität wichtiger als Design)
Letzte Aktivität
vor 12 Jahren
Dabei seit
18.08.2005
Alter
39
Beruf
Fachinformatiker Anwendungsentwicklung
Herkunft
Coburg / Oberfranken
Interessen
PC, Billard, Skaten, Musik
Website
Blog
Erstellt vor 13 Jahren

OMG ich versuch schon die ganze Zeit einen Post zu machen und bekomm immer nen Fehler. Mit deinem Snippet klappts, danke. Werde den Code jetzt analysieren.

Erstellt vor 14 Jahren

Hallo,

also ich habe ja vor kurzem was zum COM Interop gefragt, soweit funktioniert meine DLL auch sehr gut. Ich kann Methoden aus vbScript heraus aufrufen.

In meiner COM Dll habe ich 2 .net DLLs referenziert. Meine COM Dll soll ja eigentlich nur ein Wrapper für die Methoden zu den anderen DLLs sein. Wenn ich aber eine Methode aufrufe, die eine Schnittstelle (erstellt in der referenzierten DLL) zurück gibt, erhalte ich eine Fehlermeldung

Die Assembly "MyAssembly, Version=1.2.0.0, Culture=neutral, PublicKeyToken=ea89749a4160daca" kann nicht gefunden werden.

Der Stack Trace lautet wie folgt:

   bei System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly()
   bei System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo, String name)
   bei System.Runtime.Serialization.Formatters.Binary.BinaryConverter.TypeFromInfo(BinaryTypeEnum binaryTypeEnum, Object typeInformation, ObjectReader objectReader, BinaryAssemblyInfo assemblyInfo, InternalPrimitiveTypeE& primitiveTypeEnum, String& typeString, Type& type, Boolean& isVariant)
   bei System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadArray(BinaryHeaderEnum binaryHeaderEnum)
   bei System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
   bei System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCh

Wenn ich die COM DLL aus einer .net Anwendung Invoke, tritt kein Fehler auf. Ich habe auch schon versucht, die referenzierten DLLs in der Methode erstmal in die AppDomain zu laden aber ohne Erfolg.

Im Netz gibts auch keine Hilfe.

Hatte schon mal jemand dieses Problem?

Erstellt vor 14 Jahren

eine COM-dll solltest Du ganz normal als Verweis referenzieren können, wie eine .NET-dll
Wenn Du das machst, kannst Du die COM-Dll von inem .NET-Projekt aus testen. Mit der Problematik, dass ich ja bei direkter Referenzierung frei nach Launer komplexe Datentypen zurückgeben kann, ich bei COM jedoch beschränkt bin bzw. das Marshalling explizit definieren muss.

Könnte also sein, dass ich eine DLL herausgebe, die bei mir zwar funktioniert, bei C++-Entwicklern allerdings nicht.

Erstellt vor 14 Jahren

Hallo MarsStein,

habe ich gerade auch nachgelesen 😃

Warum COM?
Eine Partnerfirma, welche meine Schnittstelle nutzen möchte, entwickelt auf Navision und angeblich können die DLLs nicht direkt anbinden. (Habe selbst keine Erfahrung mit Navision)

Gibt es eine Möglichkeit, meine COM-Methoden zu testen? Bin leider nicht erfahren mit C++, sonst würde ich da die Aufrufe schreiben.

Wenn es keine andere Möglichkeit gibt, werde ich wohl nicht drum herum kommen, eine C++ Anwendung zum Testen zu schreiben.

Erstellt vor 14 Jahren

Hallo,

ich habe eine IPC-Schnittstelle in mein Projekt eingebunden. Nun muss es auch möglich sein einige Funktionen der IPC-Schnittstelle mittels COM (DLLImport) anzusprechen. Den Wrapper habe ich soweit schon gebaut. Zum testen enthält die DLL ein Interface und eine Klasse, beides implementiert die Methode "Test" welche nur einen Boolean "true" zurück gibt. Die DLL ist als COM registriert, wenn ich aber versuche einen DLL Import zu machen, erhalte ich eine EntryPointNotFound-Exception.

Ich habe mir nun schon -zig Tutorials durchgelesen und meine Konfiguration überprüft, es hat jedoch leider nichts geholfen. Der Dependency-Walker macht mir auch ziemliche Probleme, dieser zeigt mir nämlich nichts an. Muss ich also davon ausgehen, dass die Methode nicht exportiert wird?

Hier mal der allgemeine Aufbau meines Projekts:

COM-Dll:

[Guid("6091A51C-F3A7-4b9f-AD5F-ACA89C77D905"),
    InterfaceType(ComInterfaceType.InterfaceIsIDispatch),
    ComVisible(true)]
    public interface IIpcWrapper {
        [DispId(1)]
        bool Test();
    }

[Guid("EF66017D-8A42-40ce-A372-A6740D55E9F2"),
    ClassInterface(ClassInterfaceType.None),
    ProgId("MyProgId"),
    ComVisible(true)]
    public class IpcWrapper : IIpcWrapper {
        public IpcWrapper() {
        }

        [DispId(1)]
        public bool Test() {
            return true;
        }
    }

Aufrufendes Programm:

public class ComCaller {
        [DllImport("MyDll.dll")]
        public static extern bool Test();

        public void DoSomething() {
            bool result;

            result = Test();
        }
    }
Erstellt vor 14 Jahren

Hallo Loewchen0507,

die Fehlermeldung kenne ich aus einem Datenbanksystem welches wir verwenden. Versuch mal die Größe der Spalte zu erweitern (Also varchar(500) zu varchar(1000) oder smallint zu int)

Erstellt vor 14 Jahren

Hallo,

Ich nehme an die Objekte werden aus einer Datenbank gelesen, wäre es nicht möglich dass die Anfrage einfach viel zu lang dauert und ein Timeout greift? Nein, das würde mir ja während des Debuggens auffallen 😃

Also habe das ganze aber mal Testweise in einen Stream serialisiert und mir dann das Xml als String zurückgegeben. Der String ist 7.370.043 Zeichen lang... Da bleibt mir wohl nur die Möglichkeit, das ganze irgendwie als Dateidownload bereit zu stellen und dann irgendwie in den Client zu deserialisieren.

//Nachtrag: Habe jetzt mal nen Stresstest gemacht und bin zu folgendem Ergebnis gekommen

Länge ok zum senden: 2885333
Länge nicht ok zum senden: 2888833

Ich schau mir nochmal meine Konfigurationsdateien an...

Erstellt vor 14 Jahren

Hallo MarsStein,

  1. richtig, wenn ich z.B. nur 10 Objekte in die Collections einfüge tritt der Fehler nicht auf.
  2. die Exception sagt leider sehr wenig aus aber ich poste sie trotzdem mal:
System.Net.WebException wurde nicht von Benutzercode behandelt.
  Message="Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung wurde unerwartet getrennt.."
  Source="K3.Import"
  StackTrace:
       bei XXX_DoWork(Object sender, DoWorkEventArgs e) in XXX.cs:Zeile 174.
       bei System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
       bei System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
  InnerException: 

Der Webservice selbst liefert keine Fehlermeldung beim debugging...

Erstellt vor 14 Jahren

Hallo,

ich habe einen WebService erstellt. Dieser funktioniert soweit einwandfrei. Heute ist eine neue Methode hinzugekommen. Diese liest Objekte aus unserer Datenbank aus und gibt diese an eine Clientanwendung zurück. Das Zurückgegebene Objekt besteht aus 4 Listen, wobei Liste 1 eher eine Liste von einer komplexen Klasse ist. Liste 2-3 enthalten jeweils eine Klasse, die nur 2 int und 1 bool Property enthalten.

Jedoch kann die 4. Liste bis zu 50.000 Einträge besitzen. Ist dies der Fall, erhalte ich vom Client eine WebException:_ "Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung wurde unerwartet getrennt.."_

Habe im WebService in der Web.config die Werte meines HttpBindings raufgesetzt aber komme dennoch zu keinem Erfolg.

Muss ich etwa im Client selbst noch etwas einstellen, damit dieser so große Datenpakete vom WebService erhalten kann?

Der Fehler taucht übrigens während des Debuggens auf (Service und Client im Debug). Live will ich das so nicht testen.

Danke.

Erstellt vor 14 Jahren

Hallo,

habe SC2 [UK-Import] vorbestellt und es wurde am Freitag losgeschickt. Ist bis heute leider noch nicht angekommen... 😦

Hätte mir vielleicht doch lieber die digitale Version zulegen sollen.

10 von 2.082 Beiträgen