Vb.net - WCF und Proxies


#1

Hey Leute,

heute mal etwas in einer ganz anderen Sprache.

Worum geht es:
Mir wurde die Aufgabe gestellt, ein kleines Tool zu basteln, welches in verschiedenen Unternehmensnetzen mit unterschiedlichen Proxy und Firewall und Gateway Konfigurationen diese ermitteln und im besten Fall eine funktionierende Verbindung zum zentralen Server herstellen. Schlägt dieses fehl soll das Tool eine möglichst genaue Fehlermeldung ausgeben, warum die Verbindung fehlgeschlagen ist.
Dabei besteht wohl bie den aktuellen Codes das Problem: Die Fehlermeldungen die fliegen sind wohl schlicht nicht genau genug um den Fehler einfach und schnell zu finden, was dann aktuell wohl in längeren Support-Sitzungen und -Gesprächen gipfelt wo dann mit der IT versucht wird mühevoll den Fehler zu finden und zu beheben.

Haken an der Sache: Es wird bei dem von dem ich diese Aufgabe erhalten habe ausschließlich mit VB.NET gearbeitet - und das WCF-Framework eingesetzt - und ich hab von beiden absolut keinen Plan.

Ich hab mir also mal n vb.net crash course gegeben um erstmal ein Gefühl für die Sprache zu bekommen - und muss sagen: auch wenn vieles ähnlich ist tut mir der Kopf von einigen Umständlichkeiten ganz schön weh.
Zusätzlich: Ich hab nur ein knappes Zeitfenster bis zweite Mai-Woche um mich da überall reinzuarbeiten und zumindest erstmal erste Lösungsansätze zu präsentieren.

Da ich aber den Tag über auch noch 9h arbeiten gehe bleibt Abends nicht viel Zeit mich darum zu kümmern (vor allem weil heute Morgen mit dem Ausfall des PCs meines Vaters noch wieder was dazu gekommen ist was mich zusätzlich ablenkt).

Ich habe mir daher erstmal vorgenommen anstatt direkt mit der Umsetzung in Code zu beginnen erstmal mögliche Probleme und deren mögliche Lösungen anzugehen. Das “in Code gießen” sollte am Ende noch das Einfachste werden.

Da ich es bisher nicht gefunden habe, einfach mal die direkten Fragen, die ich untersuchen möchte:

-DNS: eigentlich rudimentär - aber möglicherweise wichtig: Gibt es Möglichkeiten (ggf. direkt über die Win32-API) die aktuellen DNS-Einstellungen abzufragen? (In Java geht das ja z.B. nicht, oder wenn nur mit sun.* Klassen.) Zusätzlich: kleines DNS-Framework damit nicht so viel selbst gecoded werden muss.

-Proxy: gleiches für die System-Proxy-Einstellungen

-low-level: Mir ist klar dass es in Enterprise-Netzen auch gerne mal bis Level 2 runtergeht auf der dann “Sicherheitsmaßnahmen” umgesetzt werden - was dann in höheren Schichten (so 4 und aufwärts) nur noch schwer nachvollziehbar ist. Da auch die zugrunde liegende WinSock-API nicht viel an Fehlercodes liefert wird es wohl wie in Java soweit gehen und über C irgendwas low-level mäßig implementieren zu müssen um da Fehler zu finden. - Gibts da was?

-Rechte: Gut, unter Java eher weniger das Problem, aber ich denke in der Welt von M$ schon eher wichtig: Rechte-Management. Ich kenn mich zwar nicht aus - aber da ich es auch von meiner Arbeit kenne: Je höher die Position desto mehr Rechte, gerade was den Internetzugriff angeht. Es bringt also wenig wenn mein Tool als Dienst mit höheren Rechten läuft und daher vielleicht eine Verbindung aufbauen kann - wenn die eigentliche Anwendung nur mit Nutzerrechten läuft und dann nicht raus kommt.

Ich weiß - ist viel für wenig Zeit - aber zum Glück auch erstmal nur ein recht spezielles Thema was zwar Fach-Kenntnis, dafür aber allgemein recht wenig Wissen erfordert. Mir fehlt halt schlicht die Zeit mich damit so tief zu befassen wie es vielleicht nötig ist, und auch einfach die Möglichkeiten bestimmte Umgebungen zu simulieren / mit meinen Mitteln nachzustellen.

Da es auch unteranderem für mich um eine mögliche Ausbildung oder gar Anstellung geht möchte ich da natürlich versuchen das best-mögliche rauszuholen, dafür ist aber leider das Zeitfenster sehr knapp vorgegeben (hat sich alles eher Zufällig zum Oster-Wochenende über Bekannte ergeben).

Würde mich über Rückmeldungen freuen. Vielleicht hat ja jemand mit sowas Erfahrungen oder sogar “auf der anderen Seite” und kennt sich mit dem Kram aus der mir quasi im Weg steht (ich will ja nichts unbefugt “brechen” - es soll nur möglichst genau die Fehlerursache eingegrenzt werden).

Sen


#2

ja klar - das Programm sitzt auf einem Rechner, was irgendwie testen soll ob es eine Verbindung zum Server aufbauen kann. Und da gibt es nur ein ja oder nein. Zum nein kommt noch ein lokaler Grund, NICHT was die Router oder die Proxy dazwischen machen. Gut, die Proxy sollten bei einem Aufbau auch noch einen Fehler melden - das wars aber.

Für mich liest sich das wie die Eierlegendewollmilchsau über die Analyse für Netzwerkprobleme. Wenn Du das Programm schreibst, gründe Deine eigene Firma und vertreibe das Ding selber. Wirst reicht.

VB.NET ist komisch:

'Declare a single-dimension array of 5 values  
Dim numbers(4) As Integer   

Du kannst aber auch Beispiele aus C# verwenden, da wirst Du für einige Fragen wohl eher fündig. Generell kann ich Dir nur empfehlen zu C# zu wechseln. Da findest Du auch schneller Zugriff auf die Windows-API etc.

WCF habe ich selber noch nicht verwendet. Mir reichen da die WinForms.


#3

Einen Ansatz wie ich sowas in Java angehen würde hätte ich sogar grob - und dank JNA auch bedingt plattform-übergreifend - nur ist es halt bedingung vom “aufgabensteller” dass zielsprache ausschließlich vb.net genutzt wird (und ja - es gibt schon ein paar schräge Eigenheiten).
Es soll halt letzlich für mich quasi als “Prüfung” dienen ob ich der mir zugedachten Aufgabe fähig bin - steht halt ne Ausbildung in Aussicht (bin ich seit Jahreswechsel dran - bisher kein Glück gehabt).
Dacht halt nur, dadurch dass Zielplattform Windows ist, dass DotNET da bisschen mehr Möglichkeiten bietet gerade was Fehlersuche angeht da es ja doch sehr systemnah ist und man so Zugriff auf Informationen hat an die man z.B. mit Java nicht ran kommt. Und da noch ein DotNET-spezifischrs Framework genutzt wird bin ich erstmal naiv von ausgegangen: Wenn das Netzwerk standardkonform aufgebaut und eingerichtet ist sollte es auch standardkonforme Status-Meldungen geben die dann durch die jeweils zuständigen Layer verarbeitet werden und aussagekräftige Fehlermeldungen erzeugen. - Und scheinbar wird es aktuell wohl genau daran bzw. and fehlerhaft administrierten Netzen liegen dass es eben nicht so einfach wie Socket socket=new Socket(“Host”, port); ist.