У меня есть функциональный SOAP-сервер, использующий Perl и клиент C #:
Сервер SOAP (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 # Клиент:
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();
}
}
В клиенте C # я вызываю класс «Queryserver» и метод «queryserver» с помощью SOAP, хотя я хотел бы иметь возможность вызывать другие методы в других классах через клиент C #, как я могу включить дополнительный "dispatch_to ( 'queryserver :: queryserver');" в мыльном сервере PERL?
1011 * Е.Г. *
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();