Entwickler-Ecke
Verteilte Systeme - App -> Webservice -> App (SOAP XML)
CurdledMilk - Mi 30.09.09 08:23
Titel: App -> Webservice -> App (SOAP XML)
Hallo ich hoffe mal ich bin Hier im richtigen Bereich des Forums und Ihr könnt mir bei meinem Problem Helfen =)
Es geht um Folgendes:
Ich bekomme von einem (externen) Programm eine XML basierte Nachricht an einen Webservice geschickt und will diese sobald sie ankommt automatisch verarbeiten lassen. Desweiteren möchte ich über den eingang dieser Nachricht informiert werden um dem Nutzer dies sichtbar zu machen. Den Webservice und die App beim Endnutzer wird von mir geschrieben.
Ich nutze:
Microsoft Visual Web Developer Express 2008 (für den Webservice)
Microsoft Visual C# Express 2005 (für die Anwendung)
Meine Überlegung:
Der Webservice erhält die XML Nachricht, wandelt diese um (liest die values aus dem XML aus und speichert sie in Variablen) und löst ein Event in meiner EndAnwendung aus. Darauf hin greift meine Client Anwendung auf den Webservice zu (z.B. über eine get Methode) und holt sich so die Daten.
Meine Probleme:
Ist dies überhaupt der richtige Ansatz? Gibt es evt. eine viel einfachere und bessere Möglichkeit das Problem zu lösen?
Wenn ja --> was sind eure Ideen
Wenn nein -->
Wie kann ich vom Webservice mein Programm informieren das neue Daten angekommen sind? (evt. über Events?)
Wenn ich auf Klassenvariablen im Webservice zugreife und diese setze sind diese nach dem Zugriff wieder "weg" ... Ich kann sie static machen dann geht es. Nur weiß ich nicht ob das die "optimale" Lösung ist.
Das sind erst einmal meine Überlegungen und ich hoffe Ihr könnt mir da einen Anstoß in die richtige Richtung geben.
PS: mir geht es hier weniger um Code (außer wenn er für das Verständnis notwendig wäre) sondern mehr um Ideen und Lösungsansätze, evt. Stichworte worüber man sich informieren sollte etc.
danielf - Mi 30.09.09 12:37
Hallo,
ist der Transport der Informationen per WebService zwingend? Wo wird der Server/Client laufen?
Dein Vorschlag sollte prinzipiell umsetzbar sein und eigenltlich auch logisch :)
Alternativ könntest du die Kommunikat per Tcp oder Udp direkt machen (vorzugsweise per TCP damit die Packete/Verbindung überwacht wird). Dann verbindet sich der Client zum Server, regestriert sich für gewünschte Daten und wartet dann auf diese. Wäre auch (wie WebServices) sprachenunabhänig und auf einem niedrigerem Niveau (können meist auch Skripte damit umgehen).
Gruß Daniel
CurdledMilk - Mi 30.09.09 13:51
Hallo ... vielen Dank für die Antwort ... noch einmal genauer zur architektur
1 PC mit einem Server (Integrationssoftware) an diesem hängen mehrere DB (Auf diese wird vom Web zugegriffen)
auf diesem Rechner läuft auch der Webservice
1 PC mit der BackOffice Anwendung
Situation:
Wenn auf einer der DB informationen eingehen werden diese durch die Integrationssoftware repliziert und auch an die Bockofficeanwendung weitergegeben. Es ist wichtig das die Daten schnell verarbeitet werden, da sie erst nach einer Kontrolle (wird durch einen Mitarbeiter gemacht) weiterverarbeitet werden können.
Die Integrationssoftware hat Schnitstellen zu verschiedenen DBMS, Dateisystemen, OfficeAnwendung, R/3 - Systemen etc. und ebend zu WebSerivces.
mein aktueller ansatz ist das ich beim Start der Backoffice anwendung eine Methode vom Webservice asynchron aufrufe und diese mich über eingehende Daten informiert und mir diese zurückschickt.
Dazu lass ich im Webservice eine Variable (Flag) dauerhaft in einer while schleife überprüfen. Sobald das Flag gesetzt wird, wird die while schleife verlassen und die Daten werden zurück gegeben. In der BackOffice Anwendung informier ich den Mitarbeiter mit hilfe einer MessageBox über die eingehenden Daten =) ...
--------------------------------------------------------
Da die Integrationssoftware die Daten direkt per XML (SOAP im wsdl Format) an einen Webservice schicken kann denke ich das die Kommunikation über den Webservice am sinvollsten ist. Man könnte die Daten auch in XML files iwo automatisiert ablegen lassen oä. Ich denke aber nicht das dies unbedingt besser ist - vor allem da die Daten ja eher Temporär in der Backoffice Anwendung zur Verfügung stehen müssen (Kontrolle durch den Mitarbeiter).
--------------------------------------------------------
Am liebsten würde ich einen Methodenaufruf in meiner lokalen Anwendung duch den Webservice auslösen lassen, da mir die While Schleife im Webservice nicht wirklich gefällt ^^. Doch dazu hab ich bis jetzt keine Möglichkeit gefunden. Was meint Ihr dazu?
Viele Grüße
CurdledMilk - Do 01.10.09 09:01
Ich habe mal ein kleines bsp. erstellt nach welchem schema ich verfahre:
Webservice -->
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| public class Service1 : System.Web.Services.WebService { static private string myString = "";
[WebMethod] public string HelloWorld() { myString = "";
while ( myString.Equals("")) {
Thread.Sleep(2000); } return myString; }
[WebMethod] public void setMyString(string eingabe) { myString = eingabe; }
} |
Client -->
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| namespace WindowsApplication1 { public partial class Form1 : Form { private static MyDelegate del;
public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { Service1 SendenService = new Service1(); del = new MyDelegate(SendenService.HelloWorld); AsyncCallback callback = new AsyncCallback(MyCallbackProc); del.BeginInvoke(callback, null); }
public static void MyCallbackProc(IAsyncResult ar) { MessageBox.Show((del.EndInvoke(ar))); }
public delegate string MyDelegate();
} } |
kannst ja ma schaun ob das so in etwa dem entspricht was man machen "darf" ... wie gesagt ich find die lösung so nich besonders toll ... aber es funktioniert
edit: Ich habs grad mal etwas länger laufen ... Dann bekomm ich nen Laufzeitfehler wegen nem Timeout ... scheint also doch nie die optimale Lösung zu sein iwie
Kha - Do 01.10.09 17:06
Wenn Anwendung und Server im gleichen Netzwerk sind, ist ein Webservice unnötig. Es sollte über WCF o.Ä. möglich sein, die Anwendung beim Server als Client zu registrieren und sie dann über neue Daten informieren zu lassen.
CurdledMilk - Fr 02.10.09 07:58
danke erst ma für die antwort :)
ich habe auf der Integrationssoftware keinerlei möglichkeiten mir eine neue schnitstelle zu schaffen. Ich hab da nur einen administrativen zugang und kann da halt so sachen auswählen wie nachriten an einen webservice schicken, nachrichten als xml datein hinterlegen etc.
evt. hab ich ja auch falsch verstanden was du meinst :) ... kannst ja noch mal bisl genauer drauf eingehen ...
Kha - Fr 02.10.09 19:05
Das bezog sich auf deinen Server ;) . Wenn die Integrationssoftware Web-Services braucht, kann man da nichts machen, aber für die Kommunikation zwischen eigenen Komponenten solltest du wirklich Netzwerk-APIs wie WCF verwenden. Damit habe ich mich allerdings noch nie beschäftigt, kann dir dort leider nicht weiterhelfen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!