Benutzer mit den meisten Antworten
Best practice Kommunikation Website - local Client

Frage
-
Hallo NG,
was ist euer Vorschlag um eine Kommunikation zwischen einer Website und dem lokalen Windows-Rechner herzustellen?
Es soll dort auf lokal installiere Programm voll zugegriffen werden können und exe-Files gestartet, als auch dlls angesprochen werden.Auf der Website drückt man einen Button, anschließend soll der "lokale Dienst" gestartet werden.
Hat mir hier jemand vielleicht ein Beispiel oder sonstige Tipps und Anregungen wie man das Problem angeht?
Schreibe ich eine Silverlight-Anwendung? wenn ja wie starte ich da, ist das lokale Programm in Silverlight eingebettet, oer kann ich einen beliebigen Windows-Client schreiben der die Aktion ausführt? wie bekomme ich diesen Windows-Client am elegantesten verteilt und bei Bedarf angestartet?Vielen Dank schon mal für eure Hilfe.
Gruss Benni
Antworten
-
Hallo Zusammen,
hier die Lösung:
http://social.msdn.microsoft.com/Forums/de-DE/silverlightde/thread/44c8b696-0d4d-416a-b3f5-3b43b6743e68
habe es so auch umgesetzt und funktioniert wie gewünschtGruss
- Als Antwort markiert Benni_1983 Donnerstag, 1. März 2012 12:50
Alle Antworten
-
Hi,
was ist euer Vorschlag um eine Kommunikation zwischen einer Website und dem lokalen Windows-Rechner herzustellen?
das kommt drauf an, was Du auf dem Client installieren kannst/willst/darfst.
Es soll dort auf lokal installiere Programm voll zugegriffen werden können und exe-Files gestartet
Ah ja. Mehr nicht? Ist ja einfach^^
Im Ernst: Das sowas ggfs. ziemlich unsicher ist, weißt Du aber?
als auch dlls angesprochen werden.
? Das hab ich nicht verstanden. Wie willst Du DLLs ansprechen und wofür?
Auf der Website drückt man einen Button, anschließend soll der "lokale Dienst" gestartet werden.
:) Dafür müsstest Du erstmal auf jedem einzelnen Client eine Anwendung laufen haben, die die Befehle entgegennimmt. In der Regel sind solche Rechner Teil eines Botnetzes und sind daher viren-/trojanerverseucht :)
Hat mir hier jemand vielleicht ein Beispiel oder sonstige Tipps und Anregungen wie man das Problem angeht?
Wenn das so einfach wäre.
Schreibe ich eine Silverlight-Anwendung? wenn ja wie starte ich da, ist das lokale Programm in Silverlight eingebettet, oer kann ich einen beliebigen Windows-Client schreiben der die Aktion ausführt? wie bekomme ich diesen Windows-Client am elegantesten verteilt und bei Bedarf angestartet?
Mit Silverlight wirst Du da (IMHO auch als OOB Anwendung) nichts erreichen. Hier musst Du eine lokale Anwendung erstellen, die bspw. per Socket, ... eine dauerhafte Verbindung zum Server herstellt. Andersherum gibt es ggfs. Schwierigkeiten mit Firewalls, ...
Der Client lauscht dann auf eingehende Befehle und kann diese dann interpretieren und ausführen. Du müsstest dir also einen Client schreiben, der Prozesse ausführen, Dienste starten, ... kann. Serverseitig schickst Du dann entsprechende Steuerbefehle und Parameter an den Client, dieser führt dann die lokalen Methoden aus.
Ggfs. hilft dir das hier:
https://github.com/SignalR/SignalR/wiki/SignalR-Client
Die Problematik bei Verwendung von ASP.NET auf Serverseite ist, dass eben keine dauerhafte Verbindung zu irgendwas besteht. Ein Request -> Abarbeitung -> Fertig. Du bräuchtest also serverseitig auch noch einen Controller (bspw. einen Dienst) der die Verbindungen kontrolliert und dann von ASP.NET heraus angesprochen wird, um die Befehle dann an den Client zu senden.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
danke für deine Antwort!
ich bin mir über die Problematik und Sicherheitsrisiken bewusst.
Aber da dies eine Firmeninterne Website ist, darf ich installieren was ich will, also ist das Thema Security nicht das Problem, bzw. zumindest vertrauenstechnisch nicht das Problem.Es geht darum, dass ich auf einer Webseite etwas konfiguriere, dass eventuell auf Daten aus einer lokalen Access-Datenbank angewiesen ist, aber auch Textfiles in gewissen Verzeichnisse auf dem lokalen Rechner stellt. Anschließend wird eine Anwendung gestartet die die Daten lokal verarbeitet. Dies kann daraus bestehen das ich "nur" eine EXE-Datei starte die den Rest erledigt, es kann aber auch sein, dass auf funktionen einer DLL zugeriffen werden muss, die im GAC liegt...
Ziel ist es, eine Art Click-Once-Anwendung zu haben, die auf jedem Rechner installiert wird, nachdem ich den "Button" auf der Website drücke.
Dieser Anwendung gebe ich beim Klick Parameter mit, mit der sie dann weiß was sie zu tun hat.
Entweder ich schaffe es alle Parameter mitzugeben, oder eben nur eine ID und ich habe einen Webservice?! mit dem die lokale Anwendung dann kommunizieren kann und sich die benötigten Infos abholen. Ist die abarbeitung fertig, kann sie diesem Webservice wieder den Status melden, welcher das in der Datenbank als erledigt markiert.
Eine direkte Antwort an die Website ist nicht notwendig, die lokale Anwendung soll melden wenn die Abarbeitung erledigt ist, aktualisiert man dann die Website, stehen dort die neuen Informationen auch zur Verfügung.Ich hoffe das Szenario ist nun etwas klarar. Wie gesagt ich bin mir der Problematik durchaus bewusst...
Es ist keine dauerhafte Connection zwischen Website und Client notwendig. Für die Website ist es einfach Fire&Forget...Meine Hauptfrage ist, was für einen Windowsclient?! soll ich hier schreiben, damit ich ihn sehr einfach über die Website verteilen kann, und was ist die beste Art um die Kommunikation dieser Anwendung mit dem Webservice?! zu machen. WCF?
Gruss Benni
-
Hallo Benni,
Dies kann daraus bestehen das ich "nur" eine EXE-Datei starte die den Rest erledigt, es kann aber auch sein, dass auf funktionen einer DLL zugeriffen werden muss, die im GAC liegt...
wenn ich ehrlich sein, glaube ich, dass Du eigentlich was ganz anderes brauchst. Evtl. sind auch die Anforderungen nicht ganz passend. So, wie Du es schilderst, macht das für mich keinen Sinn.
Ziel ist es, eine Art Click-Once-Anwendung zu haben, die auf jedem Rechner installiert wird, nachdem ich den "Button" auf der Website drücke.
Dieser Anwendung gebe ich beim Klick Parameter mit, mit der sie dann weiß was sie zu tun hat.Ohne, dass auf dem Client etwas läuft, das die Befehle entgegennehmen kann, wird das aber nix. Die einzige Alternative, die mir da einfällt, wäre ein Vollzugriff vom Webserver aus auf alle Clients, dann die Datei per \\rechnername\freigabe\... dort ablegen und einen Prozess, bspw. per WMI auf dem Client starten. Aber zum einen ist das sicherlich mit ziemlich komplizierten und unsicheren Berechtigungen im Netzwerk bzw. auf den einzelnen Clients verbunden und zum anderen macht es für mich so immer noch keinen Sinn.
Entweder ich schaffe es alle Parameter mitzugeben, oder eben nur eine ID und ich habe einen Webservice?! mit dem die lokale Anwendung dann kommunizieren kann und sich die benötigten Infos abholen. Ist die abarbeitung fertig, kann sie diesem Webservice wieder den Status melden, welcher das in der Datenbank als erledigt markiert.
Letzteres wäre die sinnvollere Variante. Dafür müsste aber immer noch eine Anwendung auf dem Client laufen, die die Befehle entgegennimmt.
Es ist keine dauerhafte Connection zwischen Website und Client notwendig. Für die Website ist es einfach Fire&Forget...
Doch. Du kannst in der Regel nicht aktiv von einem Server aus etwas auf dem Client aufrufen, wenn auf dem Client nichts ist, was dort lauscht.
Meine Hauptfrage ist, was für einen Windowsclient?! soll ich hier schreiben, damit ich ihn sehr einfach über die Website verteilen kann
Wenn die Clientanwendung einen Neustart des Rechners überleben soll und dazu noch laufen soll, wenn evtl. gar kein Benutzer am Rechner angemeldet ist, gar keinen. Das wäre dann ein Dienst und der lässt sich nicht einfach so mal verteilen, da der erst mal als Dienst eingerichtet werden muss.
Wie gesagt, ich würde nochmal in mich gehen und die Anforderungen genau skizzieren. Dabei das Hauptaugenmerk auf die Fragen "Warum muss ich das auf jedem einzelnen Client machen?", "Kann ich nicht einfach die notwendigen Daten vom Client zum Server laden und dann serverseitig arbeiten?", "Kann ich überhaupt vom Server aus mit Adminrechten oder ähnlichem auf jeden einzelnen Client zugreifen?", "Was mache ich, wenn der Client läuft, aber kein Benutzer angemeldet ist?", ... legen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
Wie gesagt, ich würde nochmal in mich gehen und die Anforderungen genau skizzieren. Dabei das Hauptaugenmerk auf die Fragen "Warum muss ich das auf jedem einzelnen Client machen?", "Kann ich nicht einfach die notwendigen Daten vom Client zum Server laden und dann serverseitig arbeiten?", "Kann ich überhaupt vom Server aus mit Adminrechten oder ähnlichem auf jeden einzelnen Client zugreifen?", "Was mache ich, wenn der Client läuft, aber kein Benutzer angemeldet ist?", ... legen.
es ist klar skizziert und muss genauso laufen ;-)
Es muss auf dem Client laufen, da ich Komponenten des lokalen Rechners benötige um die Arbeit zu erledigen.
Ich will auch NICHT vom Server auf den Rechner zugreifen....
Ich will einfach ne kleine Anwendung von der Website aus starten/runterladen, die dann lokal die Arbeit erledigt. (10sec) und sich anschließend wieder beendet wird. Es gibt kein Szenario das ein Client läuft und kein Benutzer angemeldet ist. Es sitzt ein Mensch vorm PC, drückt den Knopf und wartet das Ergebnis ab....
Gruss
-
Hallo Benni,
Es sitzt ein Mensch vorm PC, drückt den Knopf und wartet das Ergebnis ab....
Das habe ich dann wohl irgendwie die ganze Zeit verdrängt, sorry. Irgendwie hatte ich da einen Knoten in der Art "Admin ruft Website von seinem Client aus auf, klickt, Anwendung wird auf Clients X, Y und Z geladen und dort gestartet",
In dem Fall wäre eine Silverlight Anwendung als OOB wohl ausreichend. Darüber kannst Du dann auch andere Prozesse auf dem Client starten, wenn die OOB Anwendung "elevated" läuft.
Ob Du nun einfach jeweils eine .exe vom Server lädst und die lokal ausführst oder ob Du die Logik im Silverlight Client implementierst, bleibt dir überlassen. Einfacher dürfte aber ersteres sein, ähnlich den "Fix-It" Anwendungen von Microsoft, die jeweils nur eine kleine, genau bestimmte Aufgabe übernehmen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hi Stefan,
vielleicht hätte ich gleich genauer beschreiben sollen was gewünscht ist ;-) anyway, thx.
Weiß jemand eventuell ein Sample auf Codeplex oder sonst wo, das sowas schon mal implementiert hat? mir fehlt immer noch der Ansatz, ob ich nun 2 Anwendungen schreiben muss ode reine und wie das Deployment letzendlich abläuft.
Gruss Benni
-
Hallo Zusammen,
hier die Lösung:
http://social.msdn.microsoft.com/Forums/de-DE/silverlightde/thread/44c8b696-0d4d-416a-b3f5-3b43b6743e68
habe es so auch umgesetzt und funktioniert wie gewünschtGruss
- Als Antwort markiert Benni_1983 Donnerstag, 1. März 2012 12:50