XML RPC - 从C#调用python函数

时间:2014-03-26 22:56:06

标签: c# python xml-rpc remote-access

我使用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 方法进行测试,并且它可以工作。

我需要尽快给予帮助,所以如果有人已经面对它并且有一个解释,那将是非常有用的。 在此先感谢和问候,

0 个答案:

没有答案