![]() |
WebService - Nur mit webserver möglich?
Moin !
Ich habe im web mal ein bisschen über Webservices gelesen (nicht abfragen sondern selber einen erstellen). z.B. hier: ![]() ![]() Soweit so gut ... Überall steht dort das man zum Betrieb einen Webserver braucht. Ohne geht das nicht, oder? Kann die Anwendung nicht selber auf Anfragen reagieren? Ich frage deshalb weil wir in der Firma eine normale Delphi Anwendung haben. Die muss in Zukunft aber mit der Aussenwelt sprechen. Und ein SAOP Interface mittels Webservice würde sich da anbieten. Nun ist mir aber nicht klar ob ich einer Anwendung einen Webservice hinzufügen kann, oder ob das generell immer eigenständige Anwendungen sind. Letzteres würde bedeuten ich muss zwischen meiner "normalen" Anwendung und dem webservice eine extra Kommunikation einrichten? Vielleicht hat da jemand ein paar Erfahrungen. |
Re: WebService - Nur mit webserver möglich?
Also ich glaube, der Weg über den Webserver ist der Normalfall - weil dir dann eine ganze Menge Arbeit abgenommen wird ;)
(Geht auch mit Delphi: ![]() Ansonsten kannst du natürlich immer einen IdHTTPServer in dein Programm einbauen, der eien fernsteuerung ermöglicht ;) |
Re: WebService - Nur mit webserver möglich?
Moin !
Zitat:
Zitat:
Zitat:
Nuja, es wäre halt praktisch wenn man einen (Indy?) HTTP Server einbindet, SOAP "drüber" stülpt und fertig ist die Lutzi :) Dann hatte man ein WebService Interface in der eigenen Anwendung. Bin mir aber nicht sicher ob das so klappt? |
Re: WebService - Nur mit webserver möglich?
Hallo moelski,
Zitat:
Im einfachsten Fall ist dies ein Listening Socket, der die Requests empfängt, und die XML Daten aufbereitet. Zitat:
Zitat:
Datenaustausch mit Webservices (HTTP + SOAP) ist zwar bequem, aber äußerst ineffektiv. Überall wo Performance eine Rolle spielt, hat HTTP, SOAP und Co. nichts verloren. Zitat:
1. Applikation die die Kommunikation über das Netzwerk sicherstellt (Webserver wie Appache, Tomcat, IES usw..) 2. Diese Webserver stellen wiederum Schnittstellen für Fremdanwendungen zur Verfügung (ISAPI, CGI usw.) 3. Die eigentlichen Anwendungen (ISAPI Dll's bzw. CGI) Wenn alles in die eigene Anwendung soll, muss man mindestens Punkt 1 u. 3 selber realisieren. Zitat:
Delphi bietet dahingehend, je nach Lizenz verschiedene Möglichkeiten, ISAP, NSAPI, CGI und Appache Anwendungen zu erstellen. lg. Astat |
Re: WebService - Nur mit webserver möglich?
Moin !
Danke für deine Ausführung. Performance spielt an der Stelle keine Rolle. Es geht da eher um reine Notifikationen der Anwendung. Ich habe jetzt noch was weitergesucht und das gefunden: ![]() Und nachdem ich bei D2010 das indy 10 per SVN auf aktuellen stand gewuchtet habe, konnte ich das auch umsetzen. Teste gerade mit meinem kollegen schon über INet den Webservice der rausgekommen ist - gehostet durch meine eigene Anwendung :) :) Hier habe ich auch noch Infos gefunden: ![]() Aber das habe ich noch nicht genau angesehen. Was mir jetzt noch etwas unklar ist ... Wird jeder Client der den Webservice nutzt mit einem eigenen Thread bedient? Und wenn ja ... Dann kann ich ja nicht ohne weiteres mit der Hauptanwendung Daten austauschen ... !? |
Re: WebService - Nur mit webserver möglich?
Zitat:
Bei Microsoft CRM zum Beispiel besteht der gesamte Web Service nur aus Objekten zum anlegen, suchen, speichern und löschen der bereitgestellten Geschäftsobjekte - vier sehr einfach gestrickte Methoden. Wenn man einen Zustand der Web Anwendung benötigt, führt das zu einigem Aufwand: jeder Request muss einer Session zugeordnet werden (über eine Art Transaktions-ID) und der gesamte Zustand der Sitzung muss irgendwo gespeichert und von dort her wieder geladen werden, wenn der nächste Request eintrifft. Die Wartung solcher Monster ist aufwendig. Auch sind diese Zustände nicht einfach skalierbar: wenn jedesmal ein anderer Server den nächsten Request beantworten soll (bei Load Balancing), muss der gesamte Zustand auch auf diesem Server bereitgestellt werden. Keines der Web Service Frameworks die ich bisher kennen gelernt habe arbeitet mit Zuständen, aber es waren auch noch nicht so viele :) Bei WCF (Windows Communication Framework) hat man die dazu nötigen CookieContainer bei der neueren Version aber einfach über Bord geworfen: ![]() Darin wird empfohlen, mindestens dreimal nachzudenken, bevor man Zustand in einem Web Service einbaut... Viele Grüße, |
Re: WebService - Nur mit webserver möglich?
Zitat:
Der Entwickler prüft dies, indem er ein Sleep(20000) in das Requestevent einfügt, und mit GetCurrentThreadId feststellt, ob diese unteschiedlich ist, wenn sich mehrere Instanzen des Clients sich zum Server verbinden. Zitat:
wie ein solches Client Server System überhaupt aufzubauen ist? Erklär doch mal genau was Du da eigentlich vor hast, es sieht mir alles sehr "überkompliziert" aus. Stichwort: Zitat:
lg. Astat |
Re: WebService - Nur mit webserver möglich?
Zitat:
Wenn der Standalone Web Service Server einen Request vom Client erhält, wird er in einem eigenen Thread bearbeitet (auslesen, verarbeiten, Response zum Client zurücksenden). Wenn also 'globale' Daten im Web Server verwendet werden sollen, dann müssen diese ausserhalb der Threads threadsicher verwaltet werden. Zum Beispiel wenn umfangreiche Daten aus der Datenbank gecached werden um sie nicht bei jedem Request erst auszulesen, dann sind diese in einer Liste, auf die mehrere Threads gleichzeitig zugreifen. Wenn dabei auch schreibende Zugriffe stattfinden, müssen diese natürlich so synchronisiert werden, dass es keine Konflikte gibt. Dazu können TCriticalSection & Co. verwendet werden. Tipp: ich würde den Web Service Server nicht als Windows-Formularanwendung sondern als Konsolenanwendung oder als Dienst aufbauen, damit es nicht noch störende Einflüsse der Windows Events auf das Programm gibt, der Server sollte möglichst "schlank" sein. Viele Grüße, |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz