Мне кажется, я столкнулся с проблемой при использовании клиента C # для использования веб-службы Google App Engine. Код Google App Engine, который я использую , находится здесь . Вот как будет выглядеть скрипт Python на сервере:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import logging
from StringIO import StringIO
import traceback
import xmlrpclib
from xmlrpcserver import XmlRpcServer
class Application:
def __init__(self):
pass
def getName(self,meta):
return 'example'
class XMLRpcHandler(webapp.RequestHandler):
rpcserver = None
def __init__(self):
self.rpcserver = XmlRpcServer()
app = Application()
self.rpcserver.register_class('app',app)
def post(self):
request = StringIO(self.request.body)
request.seek(0)
response = StringIO()
try:
self.rpcserver.execute(request, response, None)
except Exception, e:
logging.error('Error executing: '+str(e))
for line in traceback.format_exc().split('\n'):
logging.error(line)
finally:
response.seek(0)
rstr = response.read()
self.response.headers['Content-type'] = 'text/xml'
self.response.headers['Content-length'] = "%d"%len(rstr)
self.response.out.write(rstr)
application = webapp.WSGIApplication(
[('/xmlrpc/', XMLRpcHandler)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
На стороне клиента (в Python) это:
import xmlrpclib
s = xmlrpclib.Server('http://localhost:8080/xmlrpc/')
print s.app.getName()
У меня нет проблем с использованием клиента Python для получения значений из Google App Engine, но у меня возникают трудности при использовании клиента C # для получения значений. Ошибка, которую я получил, была 404 method not found
, когда я пытаюсь GetResponse
из веб-запроса.
Это мой код
var request = (HttpWebRequest)WebRequest.Create("http://localhost:8080/xmlrpc/app");
request.Method = "GET";
request.ContentLength = 0;
request.ContentType = "text/xml";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) //404 method not found error here.
{
}
Редактировать: Для конечных точек я пробовал:
- http://localhost:8080/xmlrpc
- http://localhost:8080/xmlrpc/
- http://localhost:8080/xmlrpc/app
- http://localhost:8080/xmlrpc/app/
Но ни один не работает
Я думаю, что URL-адрес неправильный, но я не знаю, как сделать это правильно. Есть идеи?