myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » Wie entwickle ich am Besten ein Tool, das die Verbindung zum Application-Server prüft?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie entwickle ich am Besten ein Tool, das die Verbindung zum Application-Server prüft?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
eMsentry eMsentry ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.07.2020
Beiträge: 2
Entwicklungsumgebung: Visual Studio 19
Herkunft: Deutschland


eMsentry ist offline

Wie entwickle ich am Besten ein Tool, das die Verbindung zum Application-Server prüft?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich bin recht neu in C# und wollte euch Fragen bezüglich eines kleineren Tools stellen.

Unzwar möchte ich ein Tool erstellen, welches man von beliebigen Standorten (z. B. bei Kunden) mittels einen überreichten Connection-Strings ausführen kann.
Ich möchte quasi vorab herausfinden, ob die Verbindung von einem jeweiligen Standort (Rechner) auf einen bestimmten Application Server möglich ist.
Oftmals kam es nämlich vor, das die Verbindung wegen blockierter Ports oder sonstiges nicht möglich war.


Nun wollte ich mich, bevor ich mich ins getümmel stürze, ersteinmal informieren wie ich da am besten vorgehe?


Vielen Dank & bleibt Gesund!
14.07.2020 08:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.659
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo eMsentry,

führe einfach eine Dummy-Abfrage zum Application-Server durch.
Wenn du den Server auch beeinflussen kannst, so z.B. eine "Hallo"-Abfrage, die vom Server die Zeit zurückgibt, etc.
So kannst du prüfen ob die Verbindung passt und auch ob die Authentifizierung / Autorisierung soweit OK ist.

Zitat:
wegen blockierter Ports oder sonstiges nicht möglich war

Für so einen Zweck macht das sinn. Generell sind solche Tests aber mit Vorsicht zu genießen, da zwischen Test, der OK liefert, und späterer Verwendung viel passieren kann. D.h. im Betrieb kann einfach der Reqeust zum Server abgefeuert werden und falls es ein Problem gibt via Exception-Handling darauf reagieren, z.B. indem ein neuer Versuch nach kurzer Wartezeit durchgeführt wird (siehe dazu  Polly).

Auch interessant in diesem Zusammenhang:  Health checks in ASP.NET Core

mfG Gü
14.07.2020 09:26 Beiträge des Benutzers | zu Buddylist hinzufügen
KroaX KroaX ist männlich
myCSharp.de-Mitglied

avatar-4080.jpg


Dabei seit: 31.08.2009
Beiträge: 298
Herkunft: Köln


KroaX ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Eine wichtige Frage wäre was für eine Art Verbindung du testen möchtest. Als einfachste Methode gilt hier eigentlich ein Ping auf den Server. Wenn du das für bestimmte Ports benötigst hilft dir ggf. dieser Stackoverflow post  Ping a Specific Port


mycsharp.de  Moderationshinweis von gfoidl (14.07.2020 09:30):

Bitte beachte  [Hinweis] Wie poste ich richtig? Punkt 3.1
 
14.07.2020 09:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Platoon Platoon ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.02.2017
Beiträge: 3
Entwicklungsumgebung: VS 2015 Pro (Arbeit), VS 2017
Herkunft: NRW


Platoon ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das hängt von so vielen Faktoren ab....

Welche Verbindung steht? (VPN, ist die DB per WebService oder direkt erreichbar?)

Ein Ping ist nur dann Sinnvoll wenn man sicherstellen kann, dass die Firewall das ICMP Protokoll und damit in Verbindung gesetzt auch Pings durchlässt und darauf antwortet.
28.07.2020 21:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
eMsentry eMsentry ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.07.2020
Beiträge: 2
Entwicklungsumgebung: Visual Studio 19
Herkunft: Deutschland

Themenstarter Thema begonnen von eMsentry

eMsentry ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,
erstmal danke für eure Hilfe.

Ich habe mich jetzt intensiver mit dem Thema beschäftigt und wollte euch als Programmierneuling mal Fragen was ihr vom bisherigen Stand hält

C#-Code:
using Independentsoft.Webdav;
using System;
using System.Data.SqlClient;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;


namespace ConnectionCheck
{
    public class ConnectionType
    {
        setColor messageColor = new setColor();

        string SQLConnectionString = "";
        string WebDAVfileUrl = "";
        string webAPIbaseadd = "";
        string webAPIresponse = "";

        public void sqlServer()
        {
            SqlConnection cnn = new SqlConnection();
            cnn.ConnectionString = SQLConnectionString;

            try
            {
                cnn.Open();
                cnn.Close();
                messageColor.Green("SQL | Verbindung konnte hergestellt werden.");
            }
            catch (SqlException ex)
            {
                if (ex.Message.Contains("Netzwerkbezogener oder instanzspezifischer Fehler"))
                    messageColor.Red("SQL | Bitte öffnen Sie die den TCP-Port 1433 und UDP-Port 1434.");
                else
                    messageColor.Red("SQL | Verbindung konnte nicht hergestellt werden.");
            }
            catch (Exception ex)
            {
                messageColor.Red(ex.Message);
            }
        }

        public void webDAV()
        {
            NetworkCredential credential = new NetworkCredential("username", "password");
            WebdavSession session = new WebdavSession(credential);
            Resource resource = new Resource(session);

            try
            {
                bool exist = resource.Exists(WebDAVfileUrl);

                if (exist)
                    messageColor.Green("WEBDAV | Verbindung konnte hergestellt werden.");
                else
                    messageColor.Red("WEBDAV | Fehlerhafte URL oder Login-Credentials.");
            }
            catch (WebException ex)
            {
                if (ex.Message.Contains("Die Verbindung mit dem Remoteserver kann nicht hergestellt werden."))
                    messageColor.Red("WEBDAV | Bitte öffnen Sie die den TCP-Port 444.");
                else
                    messageColor.Red("WEBDAV | Fehlerhafte URL oder Login-Credentials.");
            }
            catch (Exception ex)
            {
                messageColor.Red(ex.Message);
            }
        }

        async Task webApiAsync()
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(webAPIbaseadd);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                try
                {
                    HttpResponseMessage response = await client.GetAsync(webAPIresponse);
                    if (response.IsSuccessStatusCode)
                        messageColor.Green("API | Verbindung konnte hergestellt werden.");
                    else
                        messageColor.Red("API | Fehlerhafte URL");
                }
                catch (HttpRequestException ex)
                {
                    if (ex.Message.Contains("Fehler beim Senden der Anforderung."))
                        messageColor.Red("API | Bitte öffnen Sie die den TCP-Port 19081.");
                    else
                        messageColor.Red("API | Verbindung konnte nicht hergestellt werden.");
                }
                catch (Exception ex)
                {
                    messageColor.Red(ex.Message);
                }
            }
        }

        public void webApi()
        {
            webApiAsync();
        }
    }
}

Mir wurde gesagt ich soll die Anwendung so konzipieren,
dass man die Verbindungstest via Button einer WindowsForm ausführen kann und der Nutzer quasi über die Form die Textausgaben bekommt,
und zusätzlich manuell über die Console - also die Anwendung soll nicht 'Form'-abhängig sein.

Außerdem soll ich jede Funktion asynchron machen damit die Anwendung später nicht einfriert (?)

Allgemein würde mich auch interessieren wo ihr die Probleme im Code seht und ob ihr den ein oder anderen tipp für mich habt.


Ich danke euch und bleibt Gesund :)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eMsentry am 31.07.2020 15:19.

31.07.2020 15:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Papst Papst ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.09.2014
Beiträge: 284
Entwicklungsumgebung: VS2017
Herkunft: Kassel


Papst ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Sofern die Verbindungstests deinen Anforderungen genügen und funktionieren kann man das so machen.

Allerdings solltest du das wie du es machst noch einmal überarbeiten.
-> Trenne Logik von UI  [Artikel] Drei-Schichten-Architektur
-> Beim prüfen von Exception Strings bedenke, dass diese nur bei dir auf Deutsch sein könnten. Bei jemanden mit einem englischen Sprachpaket (OS) sind diese auf Englisch
-> Nutze keine "Magic Strings" zum kommunizieren, das ist UI Aufgabe, nicht Logik. Das lässt sich so z.B. nicht lokalisieren. Nutze z.B. Enums oder Ereignisbasierte "Benachrichtigungen"
-> Methoden können Rückgabewerte haben, dadurch kannst du dann später Wiederverwendbarkeit steigern.

Ich hätte vermutlich ein Interface definiert IConnectionTester o.ä. und dann davon drei Implementierungen bereit gestellt, je eine für SQL, WebDav und HTTP.
Denn die Intention und die Rückgabe sind exakt diegleichen, nur die Transportverbindung nicht. Damit hättest du es auch später einfacher, wenn du weitere Dienste testen willst (z.B. FTP oder SSH, ...)
01.08.2020 12:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 09.08.2020 19:34