[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