I have a functional SOAP server using Perl and a C# client:
SOAP Server (Perl):
use SOAP::Lite +trace;
use SOAP::Transport::HTTP;
my $daemon = SOAP::Transport::HTTP::Daemon
-> new (LocalAddr => '123.123.123.123', LocalPort => 8001, listen => 5);
$daemon -> dispatch_to('Queryserver::queryserver');
print "Contact SOAP server at ", $daemon->url, "\n";
$daemon->handle();
C# Client:
public class Client : SoapHttpClientProtocol
{
public Client()
{
this.Url = "http://123.123.123.123:8001/QUERYSERVER";
}
[SoapDocumentMethod("urn:Queryserver#queryserver", RequestNamespace = "urn:Queryserver", ResponseNamespace = "urn:Queryserver", ResponseElementName = "queryserverResponse")]
[return: System.Xml.Serialization.XmlElementAttribute("result")]
public virtual string queryserver()
{
System.Object[] results = this.Invoke("queryserver", new object[0]);
return ((string)(results[0].ToString()));
}
}
class QueryServer
{
// this public string stores the cpuworld soap function, so the CPUObject can access it.
public string resultQueryserverLoad;
public void queryserver()
{
//bug fix below
ServicePointManager.Expect100Continue = false;
// end bugfix
Client queryserverClient = new Client();
string result;
try
{
result = queryserverClient.queryserver();
}
catch (Exception exception)
{
result = exception.Message;
}
resultQueryserverLoad = result;
//Console.WriteLine(result);
//Console.ReadLine();
}
}
In the C# client I invoke the “Queryserver” class and “queryserver” method with the help of SOAP, although I would like to be able to invoke other methods in other classes via the C# client, how could I include an additional “dispatch_to(‘Queryserver::queryserver’);” in the PERL soap server?
E.g.
use SOAP::Lite +trace;
use SOAP::Transport::HTTP;
my $daemon = SOAP::Transport::HTTP::Daemon
-> new (LocalAddr => '123.123.123.123', LocalPort => 8001, listen => 5);
$daemon -> dispatch_to('Queryserver::queryserver');
**dispatch_to('<other class>::<other method>');**
print "Contact SOAP server at ", $daemon->url, "\n";
$daemon->handle();
You did not read the documentation.
dispatch_totakes a list.You probably want to define just one class and have all its public methods available for dispatch instead of enumerating lots of fully-qualified method names manually.