The problem that we are facing in windows service is that we are unable to send the socket through
The problem that we are facing in windows service is that we are unable to send the socket through windows application running on one computer to the windows service running on another computer. The following are the steps that we have followed.
At Window Service Side running on Computer A:-
· We have created a window service and under OnStart event we have initialize the object of TCP listener through port 8001.
· Start the TCP listener.
· Made a thread for WaitingForClient and start this thread so that it always lies in listen mode for accept the socket from Computer B.
· In the method WaitingForClient we have accepted the socket and start another thread for read this socket.
At Window Application running on Computer B:-
Made a socket that has AddressFamily InterNetwork, SocketType is stream and ProtocolType is TCP.
Made the object of IPEndPoint by initialize it through IP address of Computer A and Port 8001.
When we connecting this socket to the Computer A through IPEndPoint, it does not connect and throws the exception of connection timeout.
Status:
Open Mar 24, 2009 - 01:52 AM
windows, computer, connection, ip
2answers
Answers
Nov 02, 2009 - 11:41 AM
Don't do it in the OnStart, instead in the contstructor or a method called by the constructor, create a thread that does the work. The thread would then initiate the connection or start the listener. The service control manager expects OnStart to return right away and not delay.
example:
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.ServiceModel;
using System.ServiceProcess;
using System.Threading;
using System.IO;
namespace FileService
{
public class FileProcessService : ServiceBase
{
const string BASE_THREAD_NAME = "FileService";
private EventWaitHandle _stopThread = null;
private string _runningThreadName;
private ServiceHost _serviceHost = null;
public FileProcessService()
{
Initialize();
}
protected virtual void Initialize()
{
if (_stopThread == null) _stopThread = new ManualResetEvent(false);
else _stopThread.Reset();
Thread t = new Thread(new ThreadStart(StartService));
t.Name = BASE_THREAD_NAME;
_runningThreadName = t.Name;
t.Start();
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
}
protected override void OnStop()
{
base.OnStop();
StopService();
_serviceHost.Close();
}
protected override void OnShutdown()
{
base.OnShutdown();
}
protected void StartService()
{
_serviceHost = new ServiceHost(typeof(FileLoggingService));
_serviceHost.Open();
while (!_stopThread.WaitOne(500, true))
{
FileProcess.Instance.ProcessFiles(); //This class would be a singleton class responsible for processing the files.
if (_serviceHost.State == CommunicationState.Faulted)
{
_serviceHost.Abort();
_serviceHost = null;
_serviceHost = new ServiceHost(typeof(FileLoggingService));
_serviceHost.Open();
}
}
_serviceHost.Close();
}
public void StopService()
{
_stopThread.Set();
FileProcess.Instance.StopProcessing();
}
private void InitializeComponent()
{
this.ServiceName = "FileProcessor";
}
}
}
Dec 15, 2009 - 06:41 AM
The question looks to be abandoned by the user who asked it. If no action is taken within 2 days, a Quomon Moderator will consider closing the question and distributing the points.
The Quomon Team
Answer this question
Share Your Own Experience & Expertise
We look to ensure that every question is answered by the best people with relevant expertise and experience, the best answers include multiple perspectives. Do you have relevant expertise or experience to contribute your answer to any of these commonly asked questions?
Add New Comment