У меня есть служба Windows, которую я пишу в Vb.Net. В рамках этой службы он вызывает класс с длительным процессом.Выполнить метод для существующего экземпляра процесса. Vb.Net
Я могу выполнить команды для этого процесса, когда захочу через класс 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
Похоже, что в debug _serverCommands нет ничего, когда он должен быть запущен.
Как я могу гарантировать, что любая команда, которую я выполняю через WCF, связывается с исполняемым экземпляром вместо создания нового экземпляра ServerCommand()?
Я еще не пробовал WCF, поэтому я мог бы зайти в тупик ... однако я уверен, что это возможно.
Заранее спасибо.
Когда/Где/Как вы раскручивания нити? Это метод 'ServerCommand.SendCommand'? – Jeff
Спасибо за быстрый ответ. Сам процесс запускается внутри класса ServerCommands с помощью Process.Start() единственное место, которое я вызываю, это «Запустить команду сервера» _serverCommands = Новые ServerCommands() _serverCommands.StartServer() –
Где вы создаете '_serverCommands' и где вы вызываете' _serverCommands.StartServer() '? Похоже, что вы не используете объекты '_serverCommand' между запросами. – Jeff