Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von mipa_acc
Thema: Welche Technologie für Webentwicklung (Frontend) stand ende 2018
Am im Forum: Web-Technologien

Hallo liebe Mitbenutzer des Forums,

vielen Dank für eure Informationen. Wie ihr schon bemerkt habt bin ich außerhalb des Frameworks wirklich nicht versiert, deshalb auch so eine unproffesionelle Fragestellung. Leider ist es mit meinem Wissensstand nicht leicht, sich einen roten Faden durch die Webentwicklung anzulesen, durch eure Beiträge wird mir das sicherlich leichter fallen. Vielen Dank schonmal dafür. Ich werde mir nun im Detail eure Infos durchlesen und mich dann ggf. an dieser Stelle wieder melden.

Viele Grüße
mipa_acc

Thema: Welche Technologie für Webentwicklung (Frontend) stand ende 2018
Am im Forum: Web-Technologien

Hallo liebe Community,

ich komme eher aus der Backend, bzw. Serverentwicklung und hatte bisher recht wenig mit Frontendentwicklung, bzw. Webapplikationen am Hut. Das soll sich nun ändern, da ich gerne für ein privates Projekt eine Webseite zur Darstellung von Informationen umsetzen möchte. Dieses Projekt ist durch einen Windows-Dienst (.Net Framework 4.6.2) in Verbindung mit einer SQL-Datenbank realisiert. Konkret sollen unterschiedlichste Elemente wie Text, Bilder oder Tabellen aus der Datenbank dargestellt werden. Auch sollen über die Webseite ein paar Funktionen des Dienstes angestoßen werden können.

Nun habe ich mich etwas eingelesen, bin aber von der Fülle an Informationen etwas überfordert. Ich wende mich an euch, da ich gerne mit aktuellen Technologien arbeiten will, aber mir nicht ganz sicher bin, was man denn für solch eine Angelegenheit verwendet. Was ich weiß: Die Web-Applikation muss nicht auf Linux laufen, weshalb ich gut auf .Net Core verzichten kann.

Somit seht für mich fest, ich würde gerne ASP.NET als Framework verwenden. Ist es nun ratsam, mit WebForms zu arbeiten, also mit XHTML und CodeBehind-Daten oder Mit Asp.Net MVC? Da wäre rein von der Architektur her eine bessere Trennung von Funktionen und Aussehen der Inhalte gegeben. Verwendet man da dann die Version 4 oder 5? Sollte man RazorPages verwenden, bzw. in wie fern bringt mir das Vorteile?


Vielleicht kann mir jemand von euch bei ein paar Entscheidungen helfen. Allem voran ist meine Intention dieses Beitrags auch anderen Entwicklern aufzuzeigen, was es denn Stand Ende 2018 für Möglichkeiten gibt.

Vielen Dank schon mal für eure Unterstützung!
Gruß mipa_acc

Thema: simples TCP Paket an Mikrocontroller senden funktioniert mit dem einen Code, mit dem anderen nicht
Am im Forum: Netzwerktechnologien

Vielen Dank Abt, wenn ich hinter meinen String ein \r schreibe, dann läuft die Sache!

Danke :)

Thema: simples TCP Paket an Mikrocontroller senden funktioniert mit dem einen Code, mit dem anderen nicht
Am im Forum: Netzwerktechnologien

Hallo,

erstmal vielen Dank für eure Antworten!

Wenn ich Debugge, dann stehen alle Werte passend da. Mein senderSock-Objekt (also ein Objekt vom Typ Socket) hat keine Flush-Methode.

Ich muss dazu sagen, dass ich .Net Entwickler bin und mit Miktocontroller (leider) sehr wenig am Hut habe. Deshalb verstehe ich das mit dem CR/LF leider nicht. Googeln erhab Carriage Return, also ein /n am Ende des Strings (wie in C) - oder? Das habe ich auch bereits getestet, hatte aber keine Auswirkungen.
Mit Wireshark habe ich noch nicht gearbeitet, muss ich heute Abend mal testen. Ich hoffe, ich schaffe es, die Filter passend anzupassen.

Sonst noch irgendwelche Ideen?

Vielen Dank!

Thema: simples TCP Paket an Mikrocontroller senden funktioniert mit dem einen Code, mit dem anderen nicht
Am im Forum: Netzwerktechnologien

Hallo liebe Community,

ich stehe gerade etwas auf dem Schlauch. Ich habe einen Mikrocontroller (ESP 8266) und will an diesem mittels eines TCP Pakets einen Ausgang schalten. Dies funktioniert mit einem kleinen Tool sehr gut (siehe Anhang):
Wenn ich den ASCII Code 2x4x0 sende, wird ein Ausgang geschaltet - erfolgreich.

Selbiges will ich mit diesem Code, welcher auf dem selben PC ausgeführt wird (wegen Firewall, AV, etc.) erreichen:


private void Connect_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Resolves a host name to an IPHostEntry instance                            
                IPHostEntry ipHost = Dns.GetHostByName("192.168.148.189");

                // Gets first IP address associated with a localhost 
                IPAddress ipAddr = ipHost.AddressList[0];
        
                // Creates a network endpoint                  
                IPEndPoint ipEndPoint = new System.Net.IPEndPoint(ipHost.AddressList[0], 9274);
                
                // Create one Socket object to setup Tcp connection 
                senderSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                senderSock.NoDelay = false;  

                // Establishes a connection to a remote host 
                senderSock.Connect(ipEndPoint);
                tbStatus.Text = "Socket connected to " + senderSock.RemoteEndPoint.ToString();

                Connect_Button.IsEnabled = false;
                Send_Button.IsEnabled = true;
            }
            catch (Exception exc) { MessageBox.Show(exc.ToString()); }

        }

        private void Send_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Sending message 
                string theMessageToSend = tbMsg.Text;
                //theMessageToSend = 2x4x0
                byte[] msg = Encoding.ASCII.GetBytes(theMessageToSend);

                // Sends data to a connected Socket. 
                int bytesSend = senderSock.Send(msg);

                ReceiveDataFromServer();

                Send_Button.IsEnabled = false;
                Disconnect_Button.IsEnabled = true;
            }
            catch (Exception exc) { MessageBox.Show(exc.ToString()); }
        }

IP Adresse sowie Port passt. Verbinden kann ich mich auch. Nur wenn ich die Nachricht sende, passiert nichts.

Da wir uns hier in Schicht 4 bewegen schließe ich irgendwelche "Sicherheitsfunktionen", welche in .Net standardmäßig aktiv sind (wie z.B. "HttpWebRequestElement.UseUnsafeHeaderParsing" bei HTTP Requests, Schicht 7) aus. Ich komme nur leider nicht drauf, was in meinem Beispiel anders ist, als in dem kleinen Tool. Wohlgemerkt geht es mir hier erstmal um das reine senden, wenn das läuft, dann kümmere ich mich um das Empfangen der Antwort (wie es ja auch mein kleines Tools macht).

Habr ihr einen Tipp für mich?

Viele Grüße
mipa_acc

Thema: C# DLL (.Net 1.1.4322) in .Net 4.5 verwenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Manchmal geht es schneller als gedacht...

für alle die dasselbe Problem haben. In der App.config, einfach dem startup noch eine weitere Einstellung "mitgeben":


    <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />       
    </startup>

Problem gelöst :)

Thema: C# DLL (.Net 1.1.4322) in .Net 4.5 verwenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Community,

ich habe ein Problem, welches ich leider nicht alleine lösen kann. Mir fehlt da einiges an Basiswissen.

Ich will in meiner Applikation (Windows.Forms, .Net 4.5) funktionalitäten von DLLs verwenden, welche ziemlich alt sind. Die Laufzeitversion von diesen DLLs ist 1.1.4322. In Google habe ich einige Informationen gefunden, welche mich aber nicht wirklich weiter gebracht haben. Aktueller stand ist, dass ich in der App.config in der startup Sektion folgenden Einträg ergänzt habe:


<supportedRuntime version="v1.1.4322" />

Nun erhalte ich beim Ausführen einer Methode der DLL statt der Meldung

Die Assembly im gemischten Modus wurde während Version v1.1.4322 der Laufzeit erstellt und kann nicht während der 4.0-Laufzeit ohne zusätzliche Konfigurationsinformationen geladen werden.

folgendes:
Fehler
Die Datei oder Assembly "Blub.dll" oder eine Abhängigkeit davon wurde nicht gefunden. Eine DLL-Initialisierungsroutine ist fehlgeschlagen. (Ausnahme von HRESULT: 0x8007045A)

Leider bin ich mit meinen Latein am Ende. Auch in Google finde ich nichts wirklich passendes. Warscheinlich suche ich mit den falschen Begriffen...

Könnt Ihr mir weiter helfen?

Viele Grüße
mipa_acc

Thema: WCF - Komplexe Klasse übertragen
Am im Forum: Netzwerktechnologien

Ich kann die PluginLevels Klasse Serialisieren! Das ist das spannende, bzw. das, was ich nicht verstehe...

Leider kann ich auch nicht in die inner Exception sehen, da ich keine habe. Beim Debuggen bekomme ich keinerlei Fehler. Ich bekomme die Fehlermeldung im WCF-Testclient.

Ich versuche jetzt mal - wie von Taipi88 vorgeschlagen, die config so anzupassen,
dass ich bessere Fehlermeldungen bekomme.

Wenn es jemanden Interessiert, ich stelle auch gerne den Code zur Verfügung.

Thema: WCF - Komplexe Klasse übertragen
Am im Forum: Netzwerktechnologien

Hallo,

so, Logging ist implementiert, hätte ich aber eigentlich nicht gebraucht, jetzt wird´s richtig interessant!

Ausschnitt aus meiner WcfService.svc.cs


        public AvailablePluginLight GetLightPlugin(Guid guid) {

            try {

                //Go through all Available Plugins
                foreach (AvailablePlugin currentPlugin in PluginContainer.AvailablePlugins) {

                    if (currentPlugin.Guid == guid) {

                        return new AvailablePluginLight(currentPlugin.Instance.Name,
                                                                currentPlugin.Instance.Description,
                                                                currentPlugin.Instance.Author,
                                                                currentPlugin.Instance.Version,
                                                                currentPlugin.Instance.PluginType,
                                                                currentPlugin.Instance.Guid,
                                                                currentPlugin.Instance.ClientGuiOutput,
                                                                currentPlugin.Instance.Level);

                    }

                }

                return new AvailablePluginLight();

            } catch (Exception ex) {

                Logging.SetErrorMessage("Test", ex);

            }

            return new AvailablePluginLight();

        }   <--- Ich gehe an dieser Stelle mit F11 rein

Ich erhalte mein Objekt incl. alle PluginLevel Daten! Am Ende der Methode gehe ich mit F11 weiter. Ich gelange beim Debuggen dann in meine AvailablePluginLight - Klasse, wo ich alle Getter von den Properties durchgehe. Beim return von meinem Level Scheppert´s dann:


//Ausschnitt aus der AvailablePluginLight Klasse
        [DataMember]
        public PluginLevel Level {
            get {
                return _Level;  <-- Hier ist der Ofen aus
            }
            set {
                _Level = value;
            }
        }
Ich erhalte die selbe Meldung, welche ich in Obigen Post bereit erwäht habe ( "bei System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)").

Weiter habe ich einfach mal eine Methode in meiner WcfKlasse, die Funktioniert wie folgt erweitert:


      public List<string> GetPluginWorkMethodes(Guid guid) {

            try {
                 AvailablePluginLight Blub = GetLightPlugin(new Guid("43cd6dc4-22a9-4c27-b866-a1bcbcc384ff"));
            } catch (Exception ex) {

                Logging.SetErrorMessage("Test aus funktioniertender Methode", ex);

            }

            List<string> MyList = new List<string>();
            ....
       }
Ich gelange nicht in den Catch-Block, sondern erhalte mein Objekt - so wie es sein soll (incl. PluginLevel)! Die Methode läuft nach wie vor ohne den Fehler durch.

Leider bin ich im WCF-Service Thema wirklich nicht sonderlich gut... Für mich erhärtet sich der Verdacht, dass es irgendwas mit der Übertragung zu tun hat.

Was denkt ihr?

Viele Grüße

Thema: WCF - Komplexe Klasse übertragen
Am im Forum: Netzwerktechnologien

Alles klar, dann werde ich das heute Abend umsetzen. Rein Logisch kann es aber fast an nichts anderem liegen, dass die PluginLevel - Klasse während der Laufzeit nicht vom WcfService verarbeitet kann - oder?

Thema: WCF - Komplexe Klasse übertragen
Am im Forum: Netzwerktechnologien

Ist erledigt. Exakt gleiches Verhalten + Fehler.meldung Das hatte ich vor meinem Post bereits getestet, allerdings nicht rein geschrieben. Sorry.

Ich habe auch schonmal getestet, die Namespaces in den Attributen weg zu lassen - auch gleiches Verhalten + Fehlermeldung.

AvailablePluginLight + PluginLevel haben nun nur noch bei den Properties das DataMember Attribut. Keine der verwendeten klassen hat mehr eine Angabe des Namespace im ServiceContract. Also verwenden alle tempuri.org (habe ich in dem Buch gelesen).

Thema: WCF - Komplexe Klasse übertragen
Am im Forum: Netzwerktechnologien

Hallo,

erstmal sorry, dass ich die Fehlermeldung nicht genauer spezifiziert habe. Das liegt allerdings daran, dass ich euch auch nicht genau sagen kann, was nicht past. Ich sehe nur, dass der Server beendet wurde. Folgende Meldung erhalte ich:

Fehler
Fehler beim Empfangen der HTTP-Antwort für http://localhost:1850/WCFService.svc. Die Ursache kann sein, dass die Dienstendpunktbindung kein HTTP-Protokoll verwendet. Eine andere mögliche Ursache ist, dass der HTTP-Anforderungskontext vom Server abgebrochen wird (vermutlich auf das Herunterfahren des Diensts zurückzuführen). Weitere Informationen finden Sie in den Serverprotokollen.

Server stack trace:
bei System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
bei System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
bei System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
bei System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
bei System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
bei IWCFService.GetAllPlugins()
bei WCFServiceClient.GetAllPlugins()

Inner Exception:
Die zugrunde liegende Verbindung wurde geschlossen: Unbekannter Fehler beim Empfangen..
bei System.Net.HttpWebRequest.GetResponse()
bei System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)

Inner Exception:
Von der Übertragungsverbindung können keine Daten gelesen werden: Eine vorhandene Verbindung wurde vom Remotehost geschlossen.
bei System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
bei System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
bei System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)

Inner Exception:
Eine vorhandene Verbindung wurde vom Remotehost geschlossen
bei System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
bei System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)


Leider weiß ich nicht, wie ich an bessere Fehlermeldungen kommt. Ich erhalte obige Meldung an dem Punkt im Code, an dem ich im AvailablePluginLight - Objekt das PluginLevel-Objekt im Getter zurück gebe, also bei:

Dass irgendwas mit der Verbindung nicht passt schließe ich aus, da ich ja - wenn ich keine Plugins in der AvalablePluginLight - Klasse verwende, alles klappt.


   [DataMember]
        public PluginLevel Level {
            get {
                 return _Level;  //<-- Erzeugt die obige Meldung
            }
            ...

Frage:
Gibt es eine Möglichkeit, wie ich an genauere Fehlermeldungen komme?

Vielen Dank für euer bemühen!

Thema: WCF - Komplexe Klasse übertragen
Am im Forum: Netzwerktechnologien

Hallo Community,

anscheinend habe ich einen grundlegenden Denkfehler in meinem Projekt. Denn nirgends finde ich jemanden, der eine ähnliche Problematik hat. In Fachbüchern wie z.B. "Verteilte Systeme und Services mit .NET 4.5" habe ich diesbezüglich auch nichts gefunden.

Foldender Aufbau:
Der Aufbau meines Projekts befindet sich im Anhang.

In meinem WcfService habe ich unter anderem folgenden OperationContract:


    ...
    namespace HomeCom.Server {
    ...

    [ServiceContract(Namespace = "http://HomeCom.Server.WCFService")]
    public interface IWCFService {

        [OperationContract]
        List<AvailablePluginLight> GetAllPlugins();

        [OperationContract]
       ...
    }

Das AvailablePluginLight hat under anderem folgenden Datamember:


        [DataMember]
        public PluginLevel Level {
            get {
                return _Level;
            }
            set {
                _Level = value;
            }
        }

Die PluginLevel - Klasse sieht so aus. Sie befindet sich in einem anderen Namespace, als die AvailablePluginLight - Klasse, oder der WcfService ist:


...
namespace HomeCom.Server.PluginInterface {
    [Serializable]
    [DataContract(Namespace="http://HomeCom.Server.WCFService")]
    public class PluginLevel {
        [DataMember]
        private string _Layer = null;

        [DataMember]
        private string _Underlayer = null;

        [DataMember]
        private bool _IsUsable = false;

        [DataMember]
        public bool IsUsable { ....   }

        [DataMember]
        public string Layer { ....   }
        }

        [DataMember]
        public string UnderLayer { ....   }

        public PluginLevel() {        }

    }
}


Im Klartext, mein AvailablePluginLight besitzt als Propertie eine eigene erstellte Klasse. Diese liegt allerdings in einem anderen Projekt, also auch in einem anderen Namespace.
Wenn ich meinen WcfService Debugge und anschließend die GetAllPlugins() - Methode aufrufe, erhalte ich einen Fehler, da der Dienst nicht mehr zur Verfügung steht (er ist abgeschmiert).

Folgende Tatsachen habe ich heraus gefunden:
Wenn ich in meiner AvailablePluginLight - Klasse das PluginLevel als Propertie entferne, funktioniert alles wie es soll. Meines erachtens liegt es daran, dass sich die Klasse eben in einem anderen Namespace befindet. Natürlich ist dieser in meinem WcfService als Verweis eingefügt (sonst könnte ich ja nicht mal kompilieren), aber zur Laufzeit, sprich genau dann, wenn ihn meine AvailablePluginLight - Klasse "returnt", stürzt mir mein WcfService ab.

Meine Frage:
Wie schaffe ich es, meinem WcfService während der Laufzeit, die PluginLevel - Klasse "verwendbar" zu machen? Habe es - wie ihr seht - bereits mit den Namespace-Attribut probiert, leider vergebens. Habe ich irgendwo einen Denkfehler?

Vielen Dank erstmal, dass Ihr euch das alles durchgelesen habt.

Gruß
mipa_acc

Thema: best practice - Plugins zu Ansteuerung von Geräten auf dem Server (Datenaustausch/Schnittstelle)
Am im Forum: Rund um die Programmierung

Hallo Community,
ich habe eine Frage zu „best practise Techniken„ im Bereich Schnittstellen/Plugins und hoffe, dass ich hier im Bereich Basistechnologien richtig bin.

Beschreibung:
Ich habe im Bereich eines Studienprojekts vor, eine Client/Server basierte Software zu erstellen, welche Modular aufgebaut ist. Es handelt sich dabei um ein System, unter dem man verschiedene Netzwerkpheripheriegeräte ansteuern kann. Für jedes Gerät soll man am Server ein Plugin hinzufügen können, welches dann unterschiedliche Funktionen (abhängig von dem Gerät) implementiert.
Folgende Geräte sollen angesteuert im ersten Step werden können:

    - IP-Power Switches (hier sollen einzelne Ausgänge geschalten werden können)
    - WebCam (Hier soll das Livebild abgegriffen werden)
    - LAN-Intrarot-Sender (Hier soll man verschiedene IR-Signale senden können)
    - Usw.

Mein Plan ist nun, einen Server zu erstellen, dem ich Plugins hinzufügen kann. In jedem Plugin soll die entsprechende Logik implementiert werden.
Man soll auf verschiedene Art und Weise auf den Server zugreifen können. Im ersten Schritt soll das über eine Weboberfläche realisiert werden. Später kann man das noch auf ein Windows-Phone APP, etc. erweitert werden. Der Datenaustausch soll mittels Webservices von statten gehen (dachte ich mir).

Meine Frage ist nun:
    - Sind Webservices zum Datenaustausch gut, oder gibt es was „geschickteres“?
    - Wie stelle ich es an, dass ich eine Schnittstelle (zwischen Server und den einzelnen Plugins) habe, die so modular ist, dass ich alle möglichen Anwendungsfälle abdecken kann? Das muss irgendwie über Interfaces laufen, leider geht mir da allerdings etwas der Background ab. Gibt es hier irgendwo Literatur oder best practises

Vielen Dank im Voraus für eure Infos!
mipa_acc

Thema: Windows Explorer mit UNC Netzwerkpfad öffnen - Authentifizierung
Am im Forum: Netzwerktechnologien

Hallo Community,

ich habe ein Problem. Ich würde gerne mit

Process.Start("explorer.exe", Path);

Den Windows Explorer öffnen. Lokal funktioniert das auch wunderbar. Wenn in meiner Path Variable aber @"\\10.0.100.50\c$\Windows" steht, funktioniert die ganze Sache nicht mehr.
Das Problem ist mir bekannt -> ich müsste zuersteinmal \\10.0.100.50 im Explorer öffnen um mich auf dem Rechner zu authentifizieren. Anschließend ist das mit meinem C# Code auch kein Problem mehr.
Meine Frage ist nun, wie schaffe ich es Codetechnisch, mich vor dem öffnen des Explorers schon passen zu authentifizieren?

Mir wäre auch schon geholfen, wenn ihr mir ein paar Suchbegriffe für Google posten könntet. Hab mich noch nie in diesem Bereich bewegt. Von dem her habe ich leider auch keinen Lösungsansatz.

Gruß

Thema: Events Controllübergreifend empfangen
Am im Forum: GUI: Windows-Forms

Danke für deine Antwort!

Natürlich habe ich mir die FAQ schon durchgelesen. Ich arbeite ja schon mit Events aber eben nur im Zusammenhang der MainForm und eines UserControls.

Wie gebe ich die Events in der MainForm weiter? Ich steh grad aufm Schlauch. Könntest du mir evtl. ein kurzes Beispiel zeigen?

Thema: Events Controllübergreifend empfangen
Am im Forum: GUI: Windows-Forms

Hallo,

ich habe ein leichtes Verständnissproblem, bzw. zu wenig Ahnung, wie man folgende Problematik am besten lösen kann.

Erstmal eine kurze Beschreibung:
Auf meiner MainForm liegen unter anderem zwei von mir erstellte UserControlls (Action und Indicator). Ich habe mir diese UserControls erstellt, damit ich nicht ohne Ende Code in meiner MainForm habe und weil es für mich übersichtlicher ist. Die Daten mit denen mein Programm arbeitet stelle ich in einer Statischen Containerklasse (Container) für alle meine Controls bereit. So weit so gut.

Das Problem das ist jetzt habe ist, dass mein Action Control Daten verarbeitet und ich den aktuellen Status in meinem Indicator Control darstellen will. Sprich mein Action Control wirft Events (z.B neue Datei). Leider weiß ich jetzt nicht, wie ich mein Indicator Control dazu bringen kann, sich an diese Events anzuhängen. Kann ich das über meine Container Klasse machen oder gibt es einen eleganteren Weg?
Beide Controls liegen auf meiner MainForm.

Gruß

Thema: Programm mit Plugin´s erweiterbar machen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Community,

bin mittlerweile etwas aus der Übung geraten... Ich würde mit gerne ein kleines Programm zusammenbauen und habe dazu eine Technische Frage.

Im Grunde will ich ein Verwaltungsprogramm programmieren, welches Plugins laden kann. Das Programm an sich hat keine Funktionen. Es lädt aber beim Systemstart verschiedene DLLs welche sich im Programmordner befinden.
Hintergrund ist folgender: Wir haben verschiedene Abteilungen. Einige davon brauchen dieselben Programmteile, andere haben separate Programmteile und wiederum andere brauchen Programmteile gar nicht. Um alles so übersichtlich wie möglich zu gestalten dachte ich mir, dass ich das mit eben einem Verwaltungsprogramm realisiere und dieses lädt dann je nachdem, welche DLLs hinterlegt sind, verschiedene Programmteile.

Mein Problem ist nun, wie ich es schaffe, dass das Verwaltungstool Dynamisch alle DLLs rein lädt. Bin ich da auf dem richtigen Weg, wenn ich mich mit Interfaces auseinander setze?
Hättet ihr dazu evtl. Links, bzw. ein paar Suchbegriffe unter denen ich das finde was ich brauche?

Vielen Dank im Voraus!

Gruß

Thema: RibbonDropDownItem - kein ClickEvent?
Am im Forum: Office-Technologien

Hallo,

ich weise einem RibbonGallery Control Dynamisch RibbonDropDownItems zu.


                foreach (String CurrentLine in System.Text.RegularExpressions.Regex.Split(Sr.ReadToEnd(), "\r\n")) {

                    Microsoft.Office.Tools.Ribbon.RibbonDropDownItem tempRibbonDropDownItem = this.Factory.CreateRibbonDropDownItem();
                    tempRibbonDropDownItem.Label = CurrentLine;
                    tempRibbonDropDownItem.Tag = CurrentLine;                    
                    this.symbolGallery.Items.Add(tempRibbonDropDownItem);
                
                }

Leider finde ich nirgends eine Möglichkeit, auf so ein Item zuzugreifen. Mein Objekt tempRibbonDropDownItem hat kein Click Event (es hat gar keine Event´s). Kann das sein oder mache ich etwas falsch?

Das Click Event des RibbonGallery Control´s wird zwar mit jedem Klick auf ein Item ausgelöst, leider komme ich an dieser Stelle auch nicht weiter. Als Parameter bekomme ich ein Microsoft.Office.Core.IRibbonControl übergeben. Jedoch schaffe ich es nicht, auf das RibbonDropDownItem zuzugreifen.

Wäre für Tipp´s dankbar!

Gruß

Thema: WordAddIn - Dll erstellen, welche global genutzt werden kann.
Am im Forum: Office-Technologien

Hallo,

ich stehe vor einem riesigen Problem.

Ich habe ein WordAddIn (.Net Framework 4, VSTO4) für Word 2010 geschrieben.

Dieses WordAddIn muss ich all unseren Terminalserver-Usern zur Verfügung stellen.

Mittels ClickOnce habe ich einen installer erstellt. Wenn ich als Terminalserver-User diesen installer ausführe, so habe ich das AddIn in Word zur Verfügung. Voraussetzung ist, dass der Terminalserver-User schreibrechte in dem Dateispeicherort für die Ausbeitsgruppenvorlagen hat. Dann funktioniert alles wunderbar.

Mein Problem ist, dass wir ca. 100 Terminalserver-User auf 8 Terminalserver verteilen. Ich müsste jetzt für jeden User auf jedem der 8 Server das ClickOnce Setup ausführen, damit alle User auf allen Servern mit dem AddIn arbeiten können.

Das ist nicht wirklich Optimal. Jetzt habe ich gesehen, dass es für Word auch ein AddIn von OneNote gibt. Hier müsste man einfach die DLL des AddIns (diese könnte ich in auf ein Netzlaufwerk legen) einfach in Word importieren. So in der Art würde ich auch gerne mein AddIn zur Verfügung stellen.

Stellt sich für mich nur die Frage, wie ich mein AddIn als DLL zur verfügung stelle. Habe bisher leider nicht wirklich etwas darüber gefunden.

Habt ihr evtl. ein paar Tipp´s für mich?

Gruß

Thema: ClickOnce - Signieren - Zertifikat funktioniert nur einmal
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

ich habe ein WordAddIn für Word 2010 geschrieben und will es mit ClockOnce ausbringen. Ich arbeite mit dem VS 2010 und VSTO4.

Folgende Konstellation: Mein Setup liegt auf unserem NAS im Netzwerk. Mittels einem kleinen Script starte ich beim Anmelden eines Users am Terminalserver die Setup.exe auf meinem Nas. So will ich mir die Manuelle Installation aller User ersparen. Es handelt sich hierbei doch um fast 120 Leute.

Wenn mein Setup nun bei der Anmeldung gestartet wird erhalte ich folgende Fehlermeldung: Customized functionality in the application will not work because the certificate used to sign the deployment manifest for ExOffTag or its location is not trused.

Folglich bin ich her gegangen und habe mittels einer MSDN Hilfeseite folgendes gemacht:
In meinen Projekteigenschaften habe ich mit unter Signing ein neues Test-Zertifikat erstellt. Folglich habe ich in meinem Projekt eine neue *.pfx Datei (ExOffTab.Gui_Cert.pfx) erhalten. Diese Datei habe ich auf meinen Terminalservern kopiert und in den beiden Speichern (Vertrauenswürdige Stammzertifizierungsstellen und Vertrauenswürdige Herausgeber) installiert.
So wie es auf der Hilfeseite beschrieben war.
Dann habe ich mich sehr gefreut, weil bei der ersten Anmeldung von einem TS-User hat die ganze Sache auch funktioniert. Aber leider nur einmal. Beim zweiten User hat´s schonwieder nicht mehr geklappt.

Nun bin ich ganz ehrlich etwas ratlos... Wenn ich das Zertifikat erneut auf den Terminalservern installiere, dann funktioniert´s wieder einmal.

Habe ich irgendetwas übersehen oder kann es an dem liegen, dass ich den Pfad wo die Setup Datei liegt irgendwo noch als Vertrauenswürdig deklarieren muss?

Gruß

Thema: Word2010 AddIn - Ribbon Refresh
Am im Forum: Office-Technologien

Hallo,

ich versuche verzweifelt, den namen meines Tab´s in dem Word 2010 Ribbon während der Laufzeit zu aktualisieren.

Habt ihr eine Idee, welche Methode ich da verwenden kann?

Ich gehe mal sehr stark davon aus, dass ich das von Word selbst aus machen muss. Deshalb suche ich in der Word-Klasse Application nach einem Refresh oder ähnliches. Bisher habe ich nur ScreenRefresh() gefunden, das bringt aber leider nichts.

Gruß

Thema: VS 2010 - Windows Dienst - Debug Problem
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Vielen Dank für eure Antworten!

Hatt zusätzlich vergessen, alle Prozesse aller Benutzer und in allen Sitzungen anzuzeigen.

Gruß

Thema: VS 2010 - Windows Dienst - Debug Problem
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

ich hänge gerade an einem etwas merkwürdigem Problem was ich leider nicht nachvollziehen kann...

Als erstes muss ich euch sagen, dass es das erste mal ist, dass ich einen Windows Dienst mit Vistual Studio 2010 programmiere. Habe das bisher immer mit dem 2008er Studio gemacht.


Visual Studio habe ich mit Administratorrechten geöffnet.

Anschließend habe ich ein neues Projekt (WindowsService) erstellt.

In meiner Service1.cs lasse ich mir beim Starten des Dienstes nach einem Sleep von 10 Sekunden in mein TEMP Verzeichnis eine Datei erstellen (ist ja nur ein Testprojekt).

Nun klicke ich im Designer meiner Service1.cs Datei mit der Rechten Maustaste und füge einen Installer hinzu.

Ich kompilliere mein Projekt und installiere den Dienst mit der VS Eingabeaufforderung (mit Adminrechten gestartet). Dies mache ich indem ich das installutil verwende.

Nun sehe ich den Dienst in der Windows MMC. Wenn ich den Dienst Starte wird auch meine Datei angelegt.

Zu meinem Problem komme ich wenn ich Debuggen will -> Ich starte den Dienst. Nun setzte ich meinen Breakpoint und gehe unter dem Registerreiter "Debug" auf "Attach to process". Jetzt kann ich mich auf alle Dienste drauf schalten außer auf meinen Testdienst. Dieser ist nämlich ausgegraut.


Leider habe ich überhaupt keinen Plan warum das so ist. Könnt Ihr mir da helfen?

Vielen Dank im Voraus.

Gruß
mipa_acc

Thema: Schnellbaustein einfügen
Am im Forum: Office-Technologien

Hallo,


in dem neuen Word (2007) in dem Tab Einfügen gibt es einen Button namens Schnellbausteine. Hier wählt man dann den Organizer für Schnellbausteine aus.

Nun findet man einige Standardvorlagen. Unter anderem sind hier aber auch die Autotexte meiner zusätzlich eingebundenen Vorlagendatei (Content.dotm) zu finden.

Ich würde gerne aus meinem C# AddIn solche Autotexte in dem aktuall vorhandenen Dokument einfügen.

Hat irgendwer eine Idee wie ich das realisieren kann?

Hätte auch schon daran gedacht, dieses Einfügen meiner Autotexte mittels dem Makroaufzeichungstool aufzuzeichnen und dann dieses Makro aus meinem C# WordAddIn auszuführen.
Finde das aber eine eher umständliche und nicht saubere Lösung.

Vielen Dank im Voraus!

Gruß

Thema: Schnellbaustein einfügen
Am im Forum: Office-Technologien

Hallo Community,

ich bin gerade dabei mir ein WordAddIn zu Programmieren, mit dem ich unter anderem per Klick auf einen Button einen Schnellbausten einfügen will.

Da ich noch nie ein WordAddIn programmiert habe tu ich mich da relativ hart.

Ich gehe jetzt erstmal so vor, dass ich mir eine Statische Container Klasse erstelle, in der ich auf das aktuelle Word Dokument verweise. Diesen Verweis stelle ich gleich beim starten des AddIns in der Methode ThisAddIn_Startup her.

Sobald der User nun auf den Button klickt, lese ich den aktuellen Benutzername aus und füge anschließend einen Autotext ein.

Leider habe ich bisher nirgends in Erfahrung bringen können, wie ich Codetechnisch einen Autotext einfüge.

Hättet ihr da evtl. einen Link, CodeSnippet oder ähnliches zum nachlesen?

Gruß

Thema: Kann XML nicht mehr deserialisieren - Eigene Klassen in Verwendung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Alles klar!

Vielen Dank. Dann komm ich klar.

Gruß

Thema: Kann XML nicht mehr deserialisieren - Eigene Klassen in Verwendung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ok, das leuchtet mir ein, dass es ihn da beim Deserialisieren wirft...

Aber wie kann ich das umgehen?

Ich muss da -1 stehen haben, sonst bekomme ich probleme, wenn ich mit einer Foreach Schleife über meine Klasse gehe...

Sorry, steh etwas aufm Schlauch.

Gruß

Thema: Kann XML nicht mehr deserialisieren - Eigene Klassen in Verwendung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Verdammt... hab den Wald vor lauter Bäumen nicht gesehen.

Vielen Dank!

Irgendwie hab ich aber trotzdem noch das Problem, dass der XMLSerializer trotz dem [XmlIgnore] Attribut des Current Propertie versucht zu deserialisieren... Hab ich da noch was übersehen?


        #region Properties
        public List<WordUser> Content {
            get { return _Content; }
            set { _Content = value; }
        }

        /* Needed since Implementing IEnumerator*/
        [XmlIgnore]
        public object Current {
            get {
                return _Content[_Position];
            }
        }
        #endregion

Gruß

Thema: Kann XML nicht mehr deserialisieren - Eigene Klassen in Verwendung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich habe ein Problem. Ich habe eine Klasse (WordUserList) ich ich serialisiert habe. Wenn ich die XML nun wieder deserialisieren will, bekomme ich eine OutOfRange Exception. Ich bin völlig ratlos warum dies so ist.

So sehen meine Klassen aus:


  //Hier müssen alle Typen angegeben werden, mit denen ich in der WordUserList arbeite.
    //Das Problem ist, dass der Serialisierungsvorgang on the fly passiert. Deswegen muss ich vorher schon angeben,
    //mit welchen selbstgeschriebenen Klassen ich arbeite, dass der XMLSerializer das Schema meiner Klassen kennt.
    [Serializable]
    [XmlInclude(typeof(WordUser))]
    [XmlInclude(typeof(Department))]
    public class WordUserList :IEnumerable, IEnumerator {

        [XmlIgnore]
        private int _Position = -1;

        private List<WordUser> _Content;

        #region Properties
        
        public List<WordUser> Content {
            get { return _Content; }
            set { _Content = value; }
        }
        #endregion

        /* Needed since Implementing IEnumerable*/        
        public IEnumerator GetEnumerator() {

            return (IEnumerator)this;
        
        }

        /* Needed since Implementing IEnumerator*/        
        public bool MoveNext() {

            if (_Position < _Content.Count - 1) {

                _Position++;
                return true;
            } else {

                return false;
            
            }
        
        }

        /* Needed since Implementing IEnumerator*/        
        public void Reset() {

            _Position = -1;
        
        }

        /* Needed since Implementing IEnumerator*/        
        public object Current {
            get {
                return _Content[_Position];
            }
        }
                
        public WordUserList() {

            _Content = new List<WordUser>();

        }
                
        public void Add(WordUser user) {

            _Content.Add(user);
        
        }
                
        public void Add(object user) {

            

        }
                
        public void SaveList() {

            SaveTheList(@"S:\Allgemein\Word_2007_Makros\ExOffTab.xml");
        
        }
                
        public void SaveList(string path) {

            SaveTheList(path);

        }
                
        private void SaveTheList(string path) {

            try {

                XMLHelper.SaveInXml(this, path);

            } catch {

                System.Windows.Forms.MessageBox.Show("Fehler beim speichern der ExOffTab.xml", "ExOffTab.Core", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
            
            }
            
        
        }



    [Serializable]
    [XmlInclude(typeof(Department))]
    public class WordUser {

        private string _Name;
        private List<Department> _AllowedDepartments;
        private string _LastUsedTemplate;
        private string _LastUsedName;
        private string _LastUsedPrinter;


        public string UserName {
            get { return _Name; }
            set { _Name = value; }
        }

        public List<Department> AllowedDepartments {
            get { return _AllowedDepartments; }
            set { _AllowedDepartments = value; }
        }

        public string LastUsedTemplate {
            get { return _LastUsedTemplate; }
            set { _LastUsedTemplate = value; }
        }

        public string LastUsedName {
            get { return _LastUsedName; }
            set { _LastUsedName = value; }
        }

        public string LastUsedPrinter {
            get { return _LastUsedPrinter; }
            set { _LastUsedPrinter = value; }
        }

        public WordUser() { 
        
        
        }

    }


    [Serializable]
    public enum Department {

        Fertigteile,
        Garagen,
        Holzbau,
        Bausanierung,
        Verwaltung,
        Komplettbau,
        IngBuero,
        Leipzig,
        CSV,
        Dahmit

    }


 public class XMLHelper {

        public static WordUserList LoadFromXml(string pathToFile) {

            WordUserList tempBase = new WordUserList();

            XmlSerializer xmlSer = new XmlSerializer(typeof(WordUserList));
            FileStream myStream = new FileStream(pathToFile, FileMode.Open);
            tempBase = (WordUserList)xmlSer.Deserialize(myStream);

            myStream.Close();

            return tempBase;
        }


        public static void SaveInXml(WordUserList wordUserList, string savepath) {

            XmlSerializer xmlSer = new XmlSerializer(typeof(WordUserList));
            FileStream myStream = new FileStream(savepath, FileMode.Create);
            xmlSer.Serialize(myStream, wordUserList);

            myStream.Close();

        }


    }

Ich bekomme nicht direkt einen Fehler, sondern Sobald die XML Datei wieder deserialisiert wird ( tempBase = (WordUserList)xmlSer.Deserialize(myStream); ) steht in meinem tempBase Objekt bei der Propertie Current diese System.ArgumentOutOfRange Exception.

Könnt Ihr mir bitte etwas auf die Sprünge helfen... Kapier´s leider grad gar nicht.

Vielen Dank im Voraus!

Gruß