Сбой вызова метода перевода в Моисее как службе, использующей xml-rpc

Я сталкиваюсь с исключением, вызывающим moses (Статистический машинный перевод) как службу с установленным xmlrpc. Я сначала открываю порт для сервера Моисея

--Listening on port 8082

но главная проблема - когда я отправляю запрос на отдых с параметром тела в формате xml.

<methodCall>
<methodName>translate</methodName>
<params>
<param>
<value>
<array>
<data>
<value>
<array>
<data>
<value>
<string>struct</string>
</value>
<value>
<string>struct</string>
</value>
</data>
</array>
</value>
</data>
</array>
</value>
</param>
</params>
</methodCall>

Когда я выполняю его как запрос POST на http://xxx.xxx.xxx.xxx:8082/RPC2

Я замечаю, что служба на порте завершается с ошибкой за исключением "прерывание вызывается после создания экземпляра" xmlrpc_c::fault "Aborted"

Я думаю, что основная проблема связана со структурой тела XML, но я не могу найти какую-либо документацию в Интернете для метода перевода. Какие-либо предложения? Спасибо.

ОБНОВИТЬ

Обратите внимание, что если я открою порт с настройкой

--threads all

Я никогда не получаю ответ.

1 ответ

Решение

Рабочий подход, но, возможно, не самый чистый и безопасный, это вызов клиента Python из C# или java, так как не существует библиотеки в nuget для выполнения этой работы.

ProcessStartInfo start = new ProcessStartInfo();

            start.FileName = "C:\\python\\python.exe";

            start.Arguments = $"C:\\python27\\client.py {word}";

            start.UseShellExecute = false; // Do not use OS shell

            start.CreateNoWindow = true; // We don't need new window

            start.RedirectStandardOutput = true; // Any output, generated by application will be redirected back

            start.RedirectStandardError = true; // Any error in standard output will be redirected back (for example exceptions)

            using (Process process = Process.Start(start))
            {
                using (StreamReader reader = process.StandardOutput)
                {
                    string stderr = process.StandardError.ReadToEnd(); // Here are the exceptions from our Python script

                    string output = process.StandardOutput.ReadToEnd();

                    string result = reader.ReadToEnd(); // Here is the result of StdOut(for example: print "test")
                }
            }

и клиент что-то вроде этого client.py

Другие вопросы по тегам