ich stehe gerade vor der Aufgabe, dass ich eine C# DLL in ein VBA Projekt einbinden und verwenden soll.
Soweit so gut.
Ich kann bereits in VBA C# Klassen instantizeren und Methoden auf diesen aufrufen. Auch kann ich die Rückgabewerte verarbeiten.
Jetzt stehe ich aber vor der Aufgabe, dass ich in VBA auf Events aus der DLL reagieren soll.
Hier bin ich bisher gescheitert. Ich weiß, dass ich eine Instanz mit "WithEvents" in VBA erzeugen muss. Jedoch gelingt mir das nicht, da mit immer die Fehlermeldung kommt
Fehler
Objekt löst keine Automatisuerungsereignisse aus
Daher die Grundlegende Frage: Wie muss ich hierzu meine C# Klasse Definieren(Attribute, Events, Delegates, Methoden, ...) und wie muss ich Sie dann in VBA instanzieren damit das klappt?
Die Unterschiede zwischen den einzelnen MS SQL Server Editionen kann man sehr gut über die MS-Webseite heraus bekommen. Jedoch beschränken sich diese Unterschiede hauptsächlich auf die Tool und die Ressourcen.
Kann mir jedoch jemand erklären, ob es auch Unterschiede in der eigentlichen Datenbank gibt?
D.h. läuft eine DB (mit Tabellen, Funktionen, Trigger, StoredProcedures usw.) aus der z.b. Enterprise Edition auch in der Expressedition und umgekehrt?
Über Sinn und Unsinn der Möglichkeit ein Interface direkt zu instanzieren möchte ich jetzt nicht philosophieren.
Mir ging es erstmal nur darum, ob es auch möglich ist.
ich habe mir mit XSD.exe ein Schema in C# übersetzt. Ein ComplexType hat dabei einen Default value.
daraus macht XSD.exe ein System.ComponentModel.DefaultValueAttribute.
Ich habe mal gelesen, dass bei der Objektserialisierung der defaultwert nicht mit ins XML geschrieben wird.
Jedoch finde ich den MSDN Eintrag nicht mehr. Ich finde lediglich etwas zu
XmlAttributes.XmlDefaultValue:
Zitat
Wenn der einem Feld oder einer Eigenschaft zugewiesene Wert dem Standardwert des Felds oder der Eigenschaft entspricht, wird er von XmlSerializer nicht zur XML-Instanz serialisiert
Ich bräuchte jedoch eine Quelle, wo es für das DefaultValueAttribute dokumentiert ist. Kann mir da bitte einer helfen?
Die Fehlermeldung ist klar. Sorry. hätte sie auch gleich mit posten können:
Fehler
System.Net.WebException: Die Verbindung mit dem Remoteserver kann nicht hergestellt werden. ---> System.Net.Sockets.SocketException: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht ordnungsgemäß reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat XXX.XXX.XXX.XX:XXX
bei System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
bei System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
bei System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
--- Ende der internen Ausnahmestapelüberwachung ---
bei System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
bei System.Net.HttpWebRequest.GetRequestStream()
hilft das weiter???
Den Timeout hoch zu setzten bringt auch nichts. Und wie gesagt, wenn ich die MAIN starte geht es ja auch. Also prinzipiell ist die Verbindung da
ich baue mir gerade eine Windows Dienst. Dieser soll auf das Internet zugreifen können. Für das Debuggen habe ich eine Main-Funktion eingebaut. Dmit klappt alles Super. Baue ich aber den Dienst und starte Ihn über "Services" bekomme ich keine Internet verbindung mehr. Als Service Account für den ProjektInstaller habe ich LocalSystem gewählt.
Wie schaffe ich es, dass ich auch als service zugriff auf das Internet erhalte?
das holen des RequestStreams läuft bei mir in einen timeout. Jedoch schon nach 10 Sec. Ich habe doch aber 30 konfiguriert. Wieso wird das nicht verwendet.
Außerdem habe ich festgestellt, dass ich beim Debuggen den timeout nicht bekomme sondern nur im "echten" lauf. Woran kann das liegen.
ich habe ein programm, welches mittels eines Threads ständig auf eine Queue zugreift.
Queue.Dequeue liefer eine Exeption wenn nichts drinn ist. Also wollte ich vorher mit Queue.Count prüfen.
Mein Thread läuft alle 5 sekunden.
Jetzt habe ich aber das problem, dass mein Programm mit 50% CPU läuft. kommentiere ich Queue.Count aus und verwernde stattdessen Queue.Dequeue mit try/Catch drum herum läuft das Programm nur noch mit 1%.
ich habe mit mit Consolen-Ausgaben mal auch Zeitausgaben gemacht, und habe festgestellt, dass das Stream.write immer zwischen 5 und 10 secunden dauert.
Wieso ist das so?? das Bytearray hat im Schnitt nur eine Länge von 230.
Dein Code sieht auch etwas verwirrend aus.. besonders der teil wo du auf den BaseStream drauf zugreifst.. das ist meist keine gute Idee.
Normalerweise brauchst Du den TextWriter und XmlTextWriter überhaupt nicht. Benutz einfach nur den XmlSerializer.. (es sei denn Du hast anforderungen die das nicht erlauben) Default ist da IMHO schon UTF8.
Gruß
So waren leider alle Beispiele gestrickt, die ich zur XML-Serialisierung in einen String gefunden habe. Hast du eine alternative?
Danke im Voraus!
folgendermaßen serialisiere ich zur Zeit ein Objekt in ein XML:
TypeTest.TypeTestMessage message = new TypeTest.TypeTestMessage();
message.id = 33;
message.ItemElementName = TypeTest.ItemChoiceType.Choice1;
message.Item = new TypeTest.ChoiceType1();
message.Item.Element = new int[] { 1, 2, 3, 4 };
String XmlizedString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(TypeTest.TypeTestMessage));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, message);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
Console.WriteLine(XmlizedString);
Console.ReadLine();
soweit so gut. Jedoch bekomme ich folgende Fehlermeldung:
"Temporäre Klasse kann nicht generiert werden (result=1).\r\nerror CS0030: Der Typ TypeTest.ChoiceType1 kann nicht in TypeTest.ChoiceType2 konvertiert werden.\r\nerror CS0029: Der Typ TypeTest.ChoiceType2 kann nicht implizit in TypeTest.ChoiceType1 konvertiert werden.\r\n"
Ich verstehe jedoch das Problem nicht! Die C# Klasse habe ich mir mit xsd.exe aus einem XSD erzeugt.
Ich denke, der Fehler liegt schon bei der Klassenerzeugung via xsd.exe. Hier wird für das itemFeld direkt ChoiceType1 verwendet. Verwende ich nun bei der Instanzierung jedoch als ItemElementName ChoiceType2 ist mir klar, dass es kracht. Jedoch kracht es auch bei ChoiceType1.
Die Webseite verlangt keine Authentifizierung, sondern sie hat ein Zertifikat welches von VeriSign bestätigt wird. Somit muss ich es nicht selbst irgendwo in nem Storage vorhalten.
Meine Frage ist daher, ob ich dazu noch irgend etwas berücksichtigen muss, oder nicht. Die Forensuche und das Internet haben mir hierzu nicht wirklich geholfen!
bis gestern lief mein System (WebServer <-> ApplikationServer <-> database) wunderbar. Dann war Windows-Path-Tag. Jetzt bekomme ich folgende Fehlermeldung:
System.Runtime.Remoting.RemotingException: The method 'ServerObjectManager' was not found on the interface/type 'XXX.IGate, XXX.server.interfaces, Version=3.5.116.0, Culture=neutral, PublicKeyToken=null'.
Es klingt nach einen Versions-Konflikt. Aber an der Anwendung selbst hat sich nichts geändert. Und auf der Testumgebung ist es in Ordnung. Die Konfiguration ist bei beiden Umgebungen gleich.
ich baue mir grad einen Windows Service. Dieser muss ja in einem bestimmten Zeitrum "hochgefahren" sein, da sonst der DienstManager meckert.
Da beim Starten des Services lange dauernde Aktionen durchgeführt werden müssen, habe ich das eigentliche initialisieren in eine separate Methode ausgelagert. Diese starte ich durch einen Thread. Ich habe gedacht, der Service ist damit abgekoppelt von der eigentlichen Initialisierung. Entsprechend meiner Logausgaben sehe ich auch, dass nach dem Starten des Threads noch ein "service started" im Logfile erscheind, und der Thread im Hintergrund läuft.
Jedoch reicht das scheinbar dem DienstManager nicht, da er noch auf das Ende des Threads wartet. Was mache ich falsch? Wie schaffe ich es, dass der Dienst startet und trotzdem eine längere Initialisierung läuft?