Windows XMLRPC Service

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Mon Jun 18 05:16:01 EDT 2007


En Mon, 18 Jun 2007 00:25:25 -0300, <half.italian at gmail.com> escribió:

> I'm trying to serve up a simple XMLRPC server as a windows service.  I
> got it to run properly, I'm just not sure how to stop it properly.
> Most of the documentation/examples I found for this was from forums,
> so I'd love some links to relevant info also.  Here's what I
> have...taken from the cookbook with the xmlrpc server added:
>
>     def __init__(self, args):
>         win32serviceutil.ServiceFramework.__init__(self, args)
>         # Create an event which we will use to wait on.
>         # The "service stop" request will set this event.
>         self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
>
>     def SvcStop(self):
>         # Before we do anything, tell the SCM we are starting the stop
> process.
>         self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
>
>         # quit the xmlrpc sever
>         self.server.quit()

What is quit()? As the server may be processing a request I'd move any  
finalization code below, after exiting the while loop.

>
>         # And set my event.
>         win32event.SetEvent(self.hWaitStop)
>
>     def SvcDoRun(self):
>         # Serve up the XMLRPC forever
>         self.server =
> SimpleXMLRPCServer.SimpleXMLRPCServer(("10.0.1.6", 8000))
>         self.server.register_instance(MyClass())
>         self.server.serve_forever()
>
>         win32event.WaitForSingleObject(self.hWaitStop)

The simplest solution is to replace serve_forever with a loop waiting on  
hWaitStop:

         while WaitForSingleObject(self.hWaitStop, 0)==WAIT_TIMEOUT:
             self.server.handle_request()

Set the socket timeout to a reasonable value (you'll have to wait that  
time before exiting). Also, a ThreadingTCPServer may be better if you  
expect more than a request at a time. If you search past messages you may  
find other ways.

-- 
Gabriel Genellina




More information about the Python-list mailing list