[Mono-list] Service or daemon with Mono?
Amc Gmail
amc1999 at gmail.com
Tue Jul 14 16:24:45 EDT 2009
Hmmm... hard to say, i did remoting part 4+ years ago :) in .net 1.1 era :)
It sees to be I am not doing anything special, but keep in mind i am using mode="SingleCall"
Here is more details:
<system.runtime.remoting>
<application>
<service>
<wellknown type="Rmt.RmtBridge, Rmt" objectUri="Rmt"
mode="SingleCall"
/>
</service>
<channels>
<channel ref="tcp" name="RmtChannel" port="12345">
</channel>
</channels>
</application>
</system.runtime.remoting>
And all remoting types/methods are in one class:
namespace Rmt {
public class RmtBridge : MarshalByRefObject {...}
}
Service has multiple threads and some of them are control threads which i am using to kill real worker threads if they are hang. Control thread code look like:
public override void ControlThreadLoop() {
// Configure remoting
bool isInitOk = InitRemoting();
if (IsStop()) return; // exit signaled
if (!isInitOk) {
// Fail to init remoting - log exception and continue
..... error EventLog here...
}
while (!IsStop()) {
.... create worker thread and monitor it health ....
}
}
// Try to configure remoting, return true on success
private bool InitRemoting() {
for (int j = 0; !IsStop() && j < INIT_ATTEMPT_COUNT; j++) {
try {
RemotingConfiguration.Configure(
System.IO.Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
AppDomain.CurrentDomain.FriendlyName + ".config"
));
return true; // success
}
catch(Exception e) {
..... warning EventLog here...
}
// sleep before next attempt
IdleSleep(IDLE_SLEEP_TIME);
}
return false; // not initialized
}
}
sorry for that long e-mail, hope it helps (not sure about that, but trying my best :)
-- amc
----- Original Message -----
From: "Danny" <dgortonii at gmail.com>
To: "Amc Gmail" <amc1999 at gmail.com>
Cc: "jos_" <junk at sonhult.se>, mono-list at lists.ximian.com
Sent: Tuesday, July 14, 2009 3:47:17 PM GMT -05:00 US/Canada Eastern
Subject: Re: [Mono-list] Service or daemon with Mono?
I'd like to second that. I use the same techniques with good results.
However, *occasionally* I have problems with my remoting listener
holding open the TCP socket after shutdown (in which I unregister the
marshalled object(s)).
If you don't mind me asking, do you do anything specific or special to
clean up your remoting channel?
Amc Gmail wrote:
> We don't have any problems with .NET service running under Mono.
> It's based on ServiceBase, uses EventLog and .NET Remoting without any problems.
> All you need to do is to create init.d script to start/stop mono-service during startup/shutdown
> -- amc
>
> ----- Original Message -----
> From: "jos_" <junk at sonhult.se>
> To: mono-list at lists.ximian.com
> Sent: Tuesday, July 14, 2009 8:45:07 AM GMT -05:00 US/Canada Eastern
> Subject: [Mono-list] Service or daemon with Mono?
>
>
> Hello,
>
> What is the recommended way to write a service-like software in Mono?
>
> My first guess would be to use the normal class ServiceBase existing in Mono
> (and .NET of course). But there seems to be little information on how this
> works with Mono, and from what I've read it is not considered stable (?).
>
> 1. Is it better to just create a normal app, turn on automatic login and run
> it at login?
> 2. Is it possible to create a daemon using Mono?
> 3. Is there any documentation on how to "install" the "service" if developed
> in Mono using ServiceBase (or any other method)?
>
> In short: I'm looking for a way to build the Linux equivalent for a service
> using Mono, and install it on a Linux-dist =)
>
> Thanks in advance!
> / Jonas
More information about the Mono-list
mailing list