2009-10-17 32 views
5

En mi servidor, estoy usando el ejemplo estándar para Python (con un Método Hello World adicional) y en el lado del cliente estoy usando la Biblioteca XML-RPC.NET en C# . Pero cada vez que ejecuto mi cliente obtengo la excepción de que no se encuentra el método. Cualquier idea como solucionar eso.XML-RPC C# y Python RPC Server

gracias!

Python:

from SimpleXMLRPCServer import SimpleXMLRPCServer 
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler 

# Restrict to a particular path. 
class RequestHandler(SimpleXMLRPCRequestHandler): 
    rpc_paths = ('/RPC2',) 

# Create server 
server = SimpleXMLRPCServer(("", 8000), 
          requestHandler=RequestHandler) 
server.register_introspection_functions() 

# Register pow() function; this will use the value of 
# pow.__name__ as the name, which is just 'pow'. 
server.register_function(pow) 

# Register a function under a different name 
def adder_function(x,y): 
    return x + y 
server.register_function(adder_function, 'add') 

def HelloWorld(): 
     return "Hello Henrik" 

server.register_function(HelloWorld,'HelloWorld') 

# Register an instance; all the methods of the instance are 
# published as XML-RPC methods (in this case, just 'div'). 
class MyFuncs: 
    def div(self, x, y): 
     return x // y 

server.register_instance(MyFuncs()) 

# Run the server's main loop 
server.serve_forever() 

C#

namespace XMLRPC_Test 
{ 
    [XmlRpcUrl("http://188.40.xxx.xxx:8000")] 
    public interface HelloWorld : IXmlRpcProxy 
    { 
     [XmlRpcMethod] 
     String HelloWorld(); 
    } 
    [XmlRpcUrl("http://188.40.xxx.xxx:8000")] 
    public interface add : IXmlRpcProxy 
    { 
     [XmlRpcMethod] 
     int add(int x, int y); 
    } 
    [XmlRpcUrl("http://188.40.xxx.xxx:8000")] 
    public interface listMethods : IXmlRpcProxy 
    { 
     [XmlRpcMethod("system.listMethods")] 
     String listMethods(); 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      listMethods proxy = XmlRpcProxyGen.Create<listMethods>(); 
      Console.WriteLine(proxy.listMethods()); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

Publicar la excepción que obtienes, incluido stacktrace, podría ser útil ... –

Respuesta

5

¿Funciona si cambia la declaración a esto?

[XmlRpcUrl("http://188.40.xxx.xxx:8000/RPC2")] 

Desde el Python docs:

SimpleXMLRPCRequestHandler.rpc_paths

Un valor de atributo que debe ser una tupla lista porciones ruta válida de la dirección URL para la recepción de solicitudes XML-RPC. Las solicitudes publicadas en otras rutas darán como resultado un error HTTP de "no dicha página" 404. Si esta tupla está vacía, todas las rutas se considerarán válidas. El valor predeterminado es ('/', '/ RPC2').

+0

genial. ¡Funciona! –