Я звоню .net webservice из Linux, используя Perl (5.8.7).
Я использую библиотеку SOAP :: Lite.
Базовое доказательство концепции сработало нормально, и теперь я пробую его в реальном мире, где мне приходится много раз звонить в веб-службу. Теперь похоже, что вызов веб-службы открывает файл, но не освобождает дескриптор файла. Максимальное число доступных по умолчанию установлено равным 256, и оно быстро исчезает, после чего программа умирает. (
Вот код:
# Create the soap client
my $client = SOAP::Lite->new;
# Get raw SOAP xml output
$client->outputxml(1);
# Set connection parameters
$client->uri($namespace);
# set the url in the proxy member. The keep_alive parameter is needed if user authentication
# is used, it is passed on to the user agent class to set up an authenticated HTTP session
$client->proxy($url, keep_alive => 1);
# Set the user credentials
$client->transport->credentials("$host:$port", ''
, $user
, $password
);
# define the webservice method
$client->on_action( sub { return "$namespace$method" } );
my $soapmethod = SOAP::Data->name($method)
->attr({xmlns => $namespace});
# Generate the SOAP parameters and make the call
my @paramarray = ( \%paramhash );
my $ps = ${MakeSoapParameters(\@paramarray)};
# output the current number of filedescriptors used for this process
system("ls -l /proc/$$/fd | wc -l");
# Make the call
my $result = $client->call($soapmethod => $ps );
# output the current number of filedescriptors used for this process AFTER the call
system("ls -l /proc/$$/fd | wc -l");
Если я отслеживаю файловые дескрипторы, используемые с ls -l / proc / $$ / fd | wc -l Я заметил, что количество используемых файловых дескрипторов увеличивается при каждом вызове веб-службы.
Буду признателен за любую помощь или подсказку.