Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Languages / C# / August 2006

Tip: Looking for answers? Try searching our database.

Windows service with sockets

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
jwpaco - 10 Aug 2006 13:20 GMT
I am new to services and I have quite the task. I need a windows
service that will, once started, open a socket and listen for client
connections. When a connection is made, the client will want the
service to query the db and return a value. This is for use with an IVR
system. Basically, a customer will callin and request some account
information and the service will need to qoery the db and return an
answer to the customer through the IVR system. I have started the
project but I am not getting anywhere fast. I an not even sure I am on
the right path. I thought of using web services, but that is not an
option because the machine this will be installed on will not have IIS
and it cannot be installed. I will paste my code below. Any help is
appreciated.

Justin

<code>

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace MyIVR
{
   public partial class svcTCP : ServiceBase
   {
       private readonly int port = 45000;
       private readonly IPAddress ip = IPAddress.Parse("127.0.0.1");
       private TcpListener listener;

       public svcTCP()
       {
           InitializeComponent();

           if (!System.Diagnostics.EventLog.SourceExists("IVRSource"))
           {

System.Diagnostics.EventLog.CreateEventSource("IVRSource", "IVRLog");
           }
           eventLog1.Source = "IVRSource";
           eventLog1.Log = "IVRLog";
       }

       protected override void OnStart(string[] args)
       {
           svcTCP service = new svcTCP();

           eventLog1.WriteEntry("Service Started.");

           listener = new TcpListener(ip, port);
           listener.Start();
       }

       protected override void OnStop()
       {
           eventLog1.WriteEntry("Service Stopped.");
       }

       protected override void OnContinue()
       {
           eventLog1.WriteEntry("Service Resumed.");
       }
   }
}

</code>
Ignacio Machin ( .NET/ C# MVP ) - 10 Aug 2006 15:50 GMT
Hi,

You cannot block the onStart method, you have to create a new thread in the
OnStart and then start listening in this new thread.
If you service support more than one client you then need to spawn a new
thread for each connection in this way you can service several clients at
the same time

let me know if you need some code

Signature

--
Ignacio Machin,
ignacio.machin AT dot.state.fl.us
Florida Department Of Transportation

>I am new to services and I have quite the task. I need a windows
> service that will, once started, open a socket and listen for client
[quoted text clipped - 67 lines]
>
> </code>
jwpaco - 11 Aug 2006 14:21 GMT
If you have some example code...that would be great.

Justin

> Hi,
>
[quoted text clipped - 83 lines]
> >
> > </code>
Ignacio Machin ( .NET/ C# MVP ) - 14 Aug 2006 18:29 GMT
Hi,

Here is the code, let me know if you miss something

public class MailGateway : System.ServiceProcess.ServiceBase

{

Thread listenerThread;

Queue connectionQueue= null;

protected override void OnStart(string[] args)

{

// TODO: Add code here to start your service.

listenerThread = new Thread( new ThreadStart( ListenerMethod));

listenerThread.Start();

}

protected void ListenerMethod()

{

//In this form we have no control over the children threads

Thread workingthread;

Queue unsyncq = new Queue();

connectionQueue = Queue.Synchronized( unsyncq);

//Now set the listening part

try

{

TcpClient socket;

TcpListener listener = new TcpListener( Convert.ToInt32(
System.Configuration.ConfigurationSettings.AppSettings["Port"]) );

listener.Start();

while( true)

{

socket = listener.AcceptTcpClient();

//Now we have to insert the new socket in the queue

connectionQueue.Enqueue( socket);

//create the new thread that will handle this new connection

workingthread = new Thread( new ThreadStart( TheConnectionHandler));

workingthread.Start();

}

}

catch( Exception e)

{

}

}

public void TheConnectionHandler()

{

TcpClient socket= (TcpClient)connectionQueue.Dequeue();

}

}

Signature

--
Ignacio Machin,
ignacio.machin AT dot.state.fl.us
Florida Department Of Transportation

> If you have some example code...that would be great.
>
[quoted text clipped - 88 lines]
>> >
>> > </code>

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.