Сервер SOAP с использованием C # и PERL - PullRequest
0 голосов
/ 18 января 2012

У меня есть функциональный 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();

1 Ответ

0 голосов
/ 18 января 2012

Вы не читали документацию.dispatch_to принимает список.

dispatch_to(
    'Queryserver::queryserver',
    'OtherClass::other_method',
);

Возможно, вы хотите определить только один класс и иметь все его открытые методы, доступные для отправки, вместо того, чтобы перечислять множество полностью определенных имен методов вручную.

...