我使用lib xml-rpc.net.2.5.0 在C#中创建XML RPC客户端,调用一些python方法。客户端位于Windows7计算机中,服务器位于运行红帽的VMWare中。
调用python函数的客户端代码(main方法中的代码):
IRemoteKillTest iRemoteKillTest = XmlRpcProxyGen.Create<IRemoteKillTest>();
int result = iRemoteKillTest.kill();
Console.WriteLine("Result = " + result);
Console.ReadLine();
客户端界面:
[XmlRpcUrl("http://192.ZZZ.YYY.XXX:8000/RPC2")]
public interface IRemoteKillTest : IXmlRpcProxy
{
[XmlRpcMethod]
int kill();
}
[XmlRpcUrl("http://192.ZZZ.YYY.XXX:8000/RPC2")]
public interface IRemoteMsgTest : IXmlRpcProxy
{
[XmlRpcMethod]
string msg();
}
服务器代码:
from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler
import subprocess
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ('/RPC2',)
server = SimpleXMLRPCServer(("192.ZZZ.YYY.XXX", 8000), requestHandler=RequestHandler)
server.register_introspection_functions()
class MyFuncs:
def msg(self):
return "It Works!"
def kill(self):
status = subprocess.call("ps -ef | grep <my_grep_info> | grep -v grep | awk '{ print $2 }' | xargs kill", shell=True)
return status
server.register_instance(MyFuncs())
server.serve_forever()
如果客户端从python调用函数 msg ,则会成功执行并将字符串返回给c#,但如果它调用函数 kill ,则会出现以下异常:
XmlRpcFaultException:
Server returned a fault exception: [1] exceptions.Exception:method "kill" is not supported
它适用于任何其他python方法,如os.listdir,subprocess.Popen等。 我已经在VMWare red hat中运行的python客户端调用 kill 方法进行测试,并且它可以工作。
我需要尽快给予帮助,所以如果有人已经面对它并且有一个解释,那将是非常有用的。 在此先感谢和问候,