我有一个在 Vb.Net 中编写的 Windows 服务。作为该服务的一部分,它调用一个具有长时间运行进程的类。
当我想通过服务中的 ServerCommands() 类时,我可以对这个进程执行命令,但是我想远程调用这些命令。可能来自网站或单击一次 WPF 应用程序。
为此,我使用了一个简单的 Tcp.Ip WCF 示例,并已验证它工作正常。
这称为 OnStart()
Private _serverCommands As ServerCommands
Protected Overrides Sub OnStart(ByVal args() As String)
' Add code here to start your service. This method should set things
' in motion so your service can do its work.
Debugger.Launch()
' Action a new implementaion of the WCF Service on localhost
_host.AddServiceEndpoint(GetType(ICommunicationService), New NetTcpBinding(), String.Format("net.tcp://127.0.0.1:{0}", AppSettings.TcpServicePort))
_host.Open()
' Start the server command
_serverCommands = New ServerCommands()
_serverCommands.StartServer()
End Sub
但是...当我通过 WCF 调用服务时,它会启动 ServerCommands() 类的新实例,而不是附加到已经运行的线程。
以下调用
Public Function DoWork() As String Implements ICommunicationService.DoWork
Dim command As String = "say hello world"
Dim service As IMinecraftService = New MinecraftService()
service.ExecuteServerSideCommand(command)
Return "Command Executed"
End Function
在主要服务上实现这一点。
Public Sub ExecuteServerSideCommand(command As String) Implements IMinecraftService.ExecuteServerSideCommand
If (_serverCommands IsNot Nothing) Then
_serverCommands.SendCommand(command)
End If
End Sub
似乎在调试 _serverCommands 应该运行时是 Nothing 。
我该如何确保我通过 WCF 执行的任何命令与正在运行的实例进行通信,而不是创建一个新的 ServerCommand() 实例?
我以前没有尝试过 WCF,所以我可能会遇到死胡同……但我确信它是可能的。
提前致谢。