2009-10-17 4 views
5

На моем сервере я использую стандартный пример для Python (с дополнительным Hello World Method), а на стороне клиента я использую библиотеку XML-RPC.NET в C# , Но каждый раз, когда я запускаю свой клиент, я получаю исключение, что метод не найден. Любые идеи, как это исправить.XML-RPC C# и Python RPC-сервер

спасибо!

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

Опубликовать исключение, которое вы получите, включая stacktrace, возможно, будет полезно ... –

ответ

5

ли работа, если вы измените объявление на это?

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

От Python docs:

SimpleXMLRPCRequestHandler.rpc_paths

Значение атрибута, который должен быть кортежем список действительных частей путь к URL для получения запросов XML-RPC. Запросы, отправленные на другие пути, приведут к ошибке HTTP 404 «нет такой страницы». Если этот кортеж пуст, все пути считаются действительными. Значение по умолчанию: ('/', '/ RPC2').

+0

отлично. Оно работает! –

Смежные вопросы