我搜寻了解决方案的敌人,但没有得到。 这是Windows服务的代码。
protected override void OnStart(string[] args)
{
Debugger.Launch();
try {
AsynchronousSocketListener.StartListening();
// Log an event to indicate successful start.
EventLog.WriteEntry("Successful start.", EventLogEntryType.Information);
}
catch(Exception ex)
{
// Log the exception.
EventLog.WriteEntry(ex.Message, EventLogEntryType.Error);
}
}
这是类AsynchronousSocketListner
static string constr = "Integrated Security=SSPI;Persist Security Info=False;Data Source=WIN-OTVR1M4I567;Initial Catalog=CresijCam";
//string test = constr;
// Thread signal.
public static ManualResetEvent allDone = new ManualResetEvent(false);
private AsynchronousSocketListener()
{
}
public static void StartListening()
{
// Establish the local endpoint for the socket.
// The DNS name of the computer
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 1200);
// Create a TCP/IP socket.
Socket listener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
// Bind the socket to the local endpoint and listen for incoming connections.
try
{
listener.Bind(localEndPoint);
listener.Listen(200);
while (true)
{
// Set the event to nonsignaled state.
allDone.Reset();
// Start an asynchronous socket to listen for connections.
listener.BeginAccept(
new AsyncCallback(AcceptCallback),
listener);
// Wait until a connection is made before continuing.
allDone.WaitOne();
}
}
catch (Exception e)
{
string me = e.Message;
}
}
我每次都收到不同的错误消息:
在等待TCPService服务的事务响应时达到了超时(30000毫秒)。
服务无法启动。服务进程无法连接到服务控制器
我不知道我要从哪里来的错误来了。我知道服务尚未运行的一件事。并且在此方法中startListening()。我使用Debugger.launch()进行了调试。但是我没有达到特定的要求。 我还认为这与某个地方的TCP有关,但不能肯定。
同一代码处于控制台项目的工作状态。 我不知道还有什么其他代码在这里。但是请让我知道是否需要进一步的细节。
答案 0 :(得分:1)
这个简单的答案是您的AsynchronousSocketListener
不是异步或线程的,也不是任何类似的东西。本质上,您的服务启动正在超时,并且永远不会终止
EventLog.WriteEntry("Successful start.", EventLogEntryType.Information);
因为它本质上是永远封锁
此错误说明了一切
在等待超时时达到了超时(30000毫秒) 来自TCPService服务的事务响应。
OnStart
仅应开始工作。这通常意味着生成新线程来执行实际工作。简而言之,预计OnStart
将迅速完成。
您需要重构代码以在新线程或新任务中运行AsynchronousSocketListener