Using SimpleXMLRPCServer in a Windows Service
Rudy Schockaert
rudy.schockaert at gmail.com
Tue Nov 28 03:49:00 EST 2006
I found the problem.
Actually both pieces of code work now. The problem was that when I run
the SimpleXMLRPCService in a Windows Service, the STDERR needs to be
redirected to a real file. I guess some kind of buffer overflow occurs
when you don't do this.
I added the following lines:
<snip>
def SvcStop(self):
sys.stdout = self.stdout
sys.stderr = self.stderr
.....
def SvcDoRun(self):
self.stdout = sys.stdout
self.stderr = sys.stderr
sys.stdout = file("c:/temp/my.log", "a+", 0)
sys.stderr = sys.stderr
....
</snip>
On11/25/06, Gabriel Genellina <gagsl-py at yahoo.com.ar> wrote:
> At Thursday 23/11/2006 06:52, Rudy Schockaert wrote:
>
> >After some Googling I found a post of someone who wanted to do exactly
> >as what I want to do now.
> >There is however a problem in his code that makes the service fails
> >after the first connection. I slightly modified his code and now I can
> >run the service longer before I run into trouble.
> >I then tried making the SimpleXMLRPCServer multi-threaded, hoping the
> >problem would disappear, but no avail.
> >The code is as follows:
> >The commented part in the while loop is from the original code.
>
> The original (commented-out) code should be fine. You have to wait
> for 2 events: the service stop signal, or an incoming connection.
> Anyway, you always have to catch exceptions; override handle_error at least.
>
> Another approach (not involving events) would be to set a (not so
> big) timeout on the socket, and test for self.stop_requested on each iteration.
>
> > server = ThreadedSimpleXMLRPCServer(("", 8080))
> > object = OBJECT()
> > server.register_instance(object)
> > self.socket = server.socket
> >
> > while 1:
> > #win32file.WSAEventSelect(server,
> >self.hSockEvent,win32file.FD_ACCEPT)
> > #rc =
> >win32event.WaitForMultipleObjects((self.hWaitStop,self.hSockEvent), 0,
> >win32event.INFINITE)
> > #if rc == win32event.WAIT_OBJECT_0:
> > # break
> > #else:
> > # server.handle_request()
> > # win32file.WSAEventSelect(server,self.hSockEvent, 0)
> > # #server.serve_forever() ## Works, but breaks the
>
>
> --
> Gabriel Genellina
> Softlab SRL
>
> __________________________________________________
> Correo Yahoo!
> Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
> ¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar
>
>
More information about the Python-list
mailing list