AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi WebService - Nur mit webserver möglich?
Thema durchsuchen
Ansicht
Themen-Optionen

WebService - Nur mit webserver möglich?

Ein Thema von moelski · begonnen am 20. Feb 2010 · letzter Beitrag vom 20. Feb 2010
Antwort Antwort
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

WebService - Nur mit webserver möglich?

  Alt 20. Feb 2010, 14:44
Moin !

Ich habe im web mal ein bisschen über Webservices gelesen (nicht abfragen sondern selber einen erstellen).
z.B. hier:
http://www.delphi-treff.de/tutorials...t/webservices/
http://blogs.embarcadero.com/pawelgl...08/12/18/38624

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.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: WebService - Nur mit webserver möglich?

  Alt 20. Feb 2010, 15:04
Also ich glaube, der Weg über den Webserver ist der Normalfall - weil dir dann eine ganze Menge Arbeit abgenommen wird
(Geht auch mit Delphi: http://www.delphi-treff.de/tutorials...rvices/page/1/ )

Ansonsten kannst du natürlich immer einen IdHTTPServer in dein Programm einbauen, der eien fernsteuerung ermöglicht
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#3

Re: WebService - Nur mit webserver möglich?

  Alt 20. Feb 2010, 15:16
Moin !

Zitat:
Geht auch mit Delphi: http://www.delphi-treff.de/tutorials/ ... -und-internet/webservices/page/1/ )
Ne. Denn da steht:
Zitat:
Wir werden die Windows-Version des Apache verwenden.
Zitat:
Ansonsten kannst du natürlich immer einen IdHTTPServer in dein Programm einbauen, der eien fernsteuerung ermöglicht
Das Programm hat schon einen TCP Server im Bauch (der muss allerdings bald umgebaut werden zum Client).

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?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#4

Re: WebService - Nur mit webserver möglich?

  Alt 20. Feb 2010, 15:47
Hallo moelski,

Zitat von moelski:
Überall steht dort das man zum Betrieb einen Webserver braucht. Ohne geht das nicht, oder?
Jein, man braucht eine Möglichkeit zur Kommunikation über das Netzwerk.
Im einfachsten Fall ist dies ein Listening Socket, der die Requests empfängt,
und die XML Daten aufbereitet.

Zitat von moelski:
Kann die Anwendung nicht selber auf Anfragen reagieren?
Ja, wenn ein Socket Listener vorhanden ist.


Zitat von moelski:
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.
Hier stellt sich die Frage, welche Services angeboten werden sollen, und wer diese nutzen soll und kann.
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 von moelski:
Nun ist mir aber nicht klar ob ich einer Anwendung einen Webservice hinzufügen kann,
oder ob das generell immer eigenständige Anwendungen sind.
Da es sich bei Webservices um standartisierte Verfahren handelt, findet auch eine Arbeitsteilungs statt.

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 von moelski:
..ich muss zwischen meiner "normalen" Anwendung und dem webservice eine extra Kommunikation einrichten?
Da gibt es wie schon erwähnt, verschiedene Schnittstellen, ISAPI, CGI und Co.

Delphi bietet dahingehend, je nach Lizenz verschiedene Möglichkeiten,
ISAP, NSAPI, CGI und Appache Anwendungen zu erstellen.


lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#5

Re: WebService - Nur mit webserver möglich?

  Alt 20. Feb 2010, 17:11
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:
http://www.digicoast.com/delphi_soap_standalone.html

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:
http://www.2p.cz/files/2p.cz/downloa..._in_delphi.pdf

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 ... !?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#6

Re: WebService - Nur mit webserver möglich?

  Alt 20. Feb 2010, 17:56
Zitat von moelski:
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 ... !?
Web Services werden meist zustandslos gestaltet. Jeder Request ist also nicht Bestandteil einer "Session". Wie bei simplen HTTP, das zustandslos ist. Der Web Service Aufruf führt nur eine Operation auf dem Server aus, die das dortige Datenmodell ändert oder abfragt.

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:

http://stackoverflow.com/questions/1...cf-web-service

Darin wird empfohlen, mindestens dreimal nachzudenken, bevor man Zustand in einem Web Service einbaut...


Viele Grüße,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#7

Re: WebService - Nur mit webserver möglich?

  Alt 20. Feb 2010, 17:57
Zitat von moelski:
Wird jeder Client der den Webservice nutzt mit einem eigenen Thread bedient?
Das kommt auf die Implementierung des Servers an, das ist beim Entwickler zu erfahren.
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 von moelski:
Und wenn ja ... Dann kann ich ja nicht ohne weiteres mit der Hauptanwendung Daten austauschen ... !?
Hier stellt sich zuerst einmal die grundsätzliche Designfrage,
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 von moelski:
Es geht da eher um reine Notifikationen der Anwendung
Blick da nicht ganz durch

lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#8

Re: WebService - Nur mit webserver möglich?

  Alt 20. Feb 2010, 18:17
Zitat von moelski:
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 ... !?
Ah, jetzt verstehe ich die Frage

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,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz