<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Mehrere gSOAP Services in einer Anwendung]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich benutze gSOAP momentan noch zu Testzwecken, und stehe vor dem Problem, das ich mehrere Webservices in einem Programm verwenden möchte.</p>
<p>Ich habe die soap Source Files für C++ erstellt.</p>
<p>Momentan läuft es bei mir so ab:</p>
<pre><code class="language-cpp">[...]
MyTestService service;
service.run(8080);
[...]
</code></pre>
<p>Sollte jetzt ein Request ankommen, wird er automatisch angenommen und die passende Methode ausgeführt.</p>
<p>Mein Problem ist jetzt aber, wie mache ich es am besten, wenn ich mehrere Services habe?</p>
<pre><code class="language-cpp">[...]
MyTestService1 service1;
service1.run(8080);

MyTestService2 service2;
service2.run(8080);
[...]
</code></pre>
<p>Es nimmt sich immer die erste Instanz des Requests an, und falls die Methode nicht existiert, die aufgerufen werden soll, wird ein Fehler zurück gegeben.</p>
<p>Laut gSOAP Dokumentation könnte ich mit einer copy Funktion arbeiten, welche den Request von Instanz zu Instanz kopiert, bis eine trifft. Das will ich aber nicht, ich möchte nicht Alles durchprobieren.</p>
<p>Gibt es einen effizienteren weg, event. indem ich von dem ankommenden Request irgendwie die Methode herausbekomme, die aufgerufen werden soll, oder ein anderes Identifikationsmerkmal? Event. eine ID oder einen Hash oder dgl.?</p>
<p>Oder wie macht man sowas in der Praxis sonst? Bin ich event. komplett auf dem falschen Weg?</p>
<p>Außerdem, wie handhabe ich das mit den soap Services und Threads? Die Beispiele in der Doku laufen alle auf die C-Variante hinaus, nicht aber auf C++!</p>
<p>Bitte um Hilfe und/oder Infos.</p>
<p>Danke!</p>
<p>Mfg Mani</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/283859/mehrere-gsoap-services-in-einer-anwendung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 16:56:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/283859.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Mar 2011 09:52:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehrere gSOAP Services in einer Anwendung on Mon, 21 Mar 2011 09:52:04 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich benutze gSOAP momentan noch zu Testzwecken, und stehe vor dem Problem, das ich mehrere Webservices in einem Programm verwenden möchte.</p>
<p>Ich habe die soap Source Files für C++ erstellt.</p>
<p>Momentan läuft es bei mir so ab:</p>
<pre><code class="language-cpp">[...]
MyTestService service;
service.run(8080);
[...]
</code></pre>
<p>Sollte jetzt ein Request ankommen, wird er automatisch angenommen und die passende Methode ausgeführt.</p>
<p>Mein Problem ist jetzt aber, wie mache ich es am besten, wenn ich mehrere Services habe?</p>
<pre><code class="language-cpp">[...]
MyTestService1 service1;
service1.run(8080);

MyTestService2 service2;
service2.run(8080);
[...]
</code></pre>
<p>Es nimmt sich immer die erste Instanz des Requests an, und falls die Methode nicht existiert, die aufgerufen werden soll, wird ein Fehler zurück gegeben.</p>
<p>Laut gSOAP Dokumentation könnte ich mit einer copy Funktion arbeiten, welche den Request von Instanz zu Instanz kopiert, bis eine trifft. Das will ich aber nicht, ich möchte nicht Alles durchprobieren.</p>
<p>Gibt es einen effizienteren weg, event. indem ich von dem ankommenden Request irgendwie die Methode herausbekomme, die aufgerufen werden soll, oder ein anderes Identifikationsmerkmal? Event. eine ID oder einen Hash oder dgl.?</p>
<p>Oder wie macht man sowas in der Praxis sonst? Bin ich event. komplett auf dem falschen Weg?</p>
<p>Außerdem, wie handhabe ich das mit den soap Services und Threads? Die Beispiele in der Doku laufen alle auf die C-Variante hinaus, nicht aber auf C++!</p>
<p>Bitte um Hilfe und/oder Infos.</p>
<p>Danke!</p>
<p>Mfg Mani</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2037495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2037495</guid><dc:creator><![CDATA[Steini79]]></dc:creator><pubDate>Mon, 21 Mar 2011 09:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrere gSOAP Services in einer Anwendung on Mon, 21 Mar 2011 13:20:31 GMT]]></title><description><![CDATA[<p>Das sieht so aus als würdest du zwei Services parallel auf dem selben Port horchen lassen. Halt ich für ungünstig, da du dann entweder nicht wissen kannst, welcher der beiden einen ankommenden Request annimmt, oder immer der selbe den Request nimmt und der andere völlig umsonst ins leere horcht.<br />
Ich würde einen einzelnen Service draus machen, der je nachdem was im Request steht, die Bearbeitung verschiedenen Routinen übergibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2037590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2037590</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 21 Mar 2011 13:20:31 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrere gSOAP Services in einer Anwendung on Mon, 21 Mar 2011 14:56:49 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>danke für deine Antwort!</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Das sieht so aus als würdest du zwei Services parallel auf dem selben Port horchen lassen.</p>
</blockquote>
<p>Ja genau, es horchen mind. 2 Services auf dem selben Port.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Halt ich für ungünstig, da du dann entweder nicht wissen kannst, welcher der beiden einen ankommenden Request annimmt, oder immer der selbe den Request nimmt und der andere völlig umsonst ins leere horcht.</p>
</blockquote>
<p>Das ist das oben von mir beschriebene Verhalten.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Ich würde einen einzelnen Service draus machen, der je nachdem was im Request steht, die Bearbeitung verschiedenen Routinen übergibt.</p>
</blockquote>
<p>Der momentan vorhandene Service macht das ja, alles selbständig! Nur wird das Programm so gestaltet werden, das mehrere Services existieren und zwar als library, die dann eingebunden werden.</p>
<p>Ich suche nun eine Möglichkeit, die ankommenden Requests irgendwie zu unterscheiden, damit ich die Requestbehandlung an das entsprechende Objekt weitergeben kann. Z.b. so:</p>
<pre><code class="language-cpp">if(service == &quot;getInfo1()&quot;)
{
   TestService1 ts1;
   ts1.serve();
}
else if(service == &quot;getInfo2()&quot;)
{
   TestService2 ts2;
   ts2.serve();
}
[...]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2037650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2037650</guid><dc:creator><![CDATA[Steini79]]></dc:creator><pubDate>Mon, 21 Mar 2011 14:56:49 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrere gSOAP Services in einer Anwendung on Tue, 22 Mar 2011 08:10:18 GMT]]></title><description><![CDATA[<p>[quote=&quot;Steini79&quot;]Der momentan vorhandene Service macht das ja, alles selbständig! Nur wird das Programm so gestaltet werden, das mehrere Services existieren und zwar als library, die dann eingebunden werden.[quote]<br />
Also wenn ich das richtig verstehe hast du aktuell einen Service, der die Requests an die richtigen &quot;Bearbeiter&quot;-Routinen verteilt, die keine Services sind? Warum willst du die Situation dann verschlechtern, indem du in deiner Library (oder sinds mehrerer Libs?) mehrere Services draus machst?<br />
Ne Alternative wäre doch, aus den &quot;Bearbeitern&quot; Libs zu machen und dem Service dann zu sagen, welche &quot;Bearbeiter&quot; er aktivieren soll. Dann bleibst du immernoch bei einem einzelnen Service, der nichts anderes macht, als die Requests an die Bearbeiter zu verteilen oder eben einen Fehler auszgeben, wenn der entsprechende Bearbeiter nicht freigeschaltet ist bzw. nicht existiert.<br />
Je nachdem was du erreichen willst kann der Nutzer deiner Lib auch selber Bearbeiter schreiben, die er an dem Verteiler-Service registrieren kann. Und/Oder bei bestimmten Requests werden die Libs mit dem passenden Bearbeiter nachgeladen und eingebunden, auch wenn sie ursprünglich nicht freigeschaltet waren.</p>
<p>Mein Fazit ist, dass du nur einen wirklichen Service brauchst, der am Port lauscht. Alles andere kann dahinter geregelt werden. Mehrere Services auf dem gleichen Port funktionieren ja offenbar nicht.</p>
<blockquote>
<p>Ich suche nun eine Möglichkeit, die ankommenden Requests irgendwie zu unterscheiden, damit ich die Requestbehandlung an das entsprechende Objekt weitergeben kann.</p>
</blockquote>
<p>Ich dachte das macht dein vorhandener Service schon alles?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2037998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2037998</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 22 Mar 2011 08:10:18 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrere gSOAP Services in einer Anwendung on Tue, 22 Mar 2011 09:49:23 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Also wenn ich das richtig verstehe hast du aktuell einen Service, der die Requests an die richtigen &quot;Bearbeiter&quot;-Routinen verteilt, [...]</p>
</blockquote>
<p>Nicht ganz, das wäre dann der soll zustand! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Anders ausgedrückt, ich möchte Reques-Anahme und Request-Be/Verarbeitung trennen. Das wäre kein Problem, ich verwende dazu die Methode auf der Serverseite und verteile den Input.</p>
<p>Ich glaube ich werde die gSOAP Doku noch etwas studieren.</p>
<p>Ich glaube ich werde um folgendes nicht herum kommen:</p>
<pre><code class="language-cpp">soapABCService abc;
soapUVWService uvw;
soapXYZService xyz;
...
abc.bind(NULL, 8080, 100);
...
abc.accept();
...
if (abc.serve() == SOAP_NO_METHOD)
{
   soap_copy_stream(&amp;uvw, &amp;abc);
   if (uvw.dispatch() == SOAP_NO_METHOD)
   {
      soap_copy_stream(&amp;xyz, &amp;uvw);
      if (xyz.dispatch())
         xyz.soap_stream_fault(std::cerr);
      xyz.destroy();
   }
   else
      uvw.soap_stream_fault(std::cerr);
   uvw.destroy();
}
else
   abc.soap_stream_fault(std::cerr);
abc.destroy();
...
</code></pre>
<p>Aber danke für die diskussion, das hat mich schließlich darauf gebracht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2038055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2038055</guid><dc:creator><![CDATA[Steini79]]></dc:creator><pubDate>Tue, 22 Mar 2011 09:49:23 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrere gSOAP Services in einer Anwendung on Thu, 21 Jul 2011 12:29:35 GMT]]></title><description><![CDATA[<p>Hallo Steini79,</p>
<p>hat das damit funktioniert?</p>
<p>Gruß dbo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096055</guid><dc:creator><![CDATA[dbo]]></dc:creator><pubDate>Thu, 21 Jul 2011 12:29:35 GMT</pubDate></item></channel></rss>