2012-05-16 4 views
0

У меня есть служба 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, поэтому я мог бы зайти в тупик ... однако я уверен, что это возможно.

Заранее спасибо.

+0

Когда/Где/Как вы раскручивания нити? Это метод 'ServerCommand.SendCommand'? – Jeff

+0

Спасибо за быстрый ответ. Сам процесс запускается внутри класса ServerCommands с помощью Process.Start() единственное место, которое я вызываю, это «Запустить команду сервера» _serverCommands = Новые ServerCommands() _serverCommands.StartServer() –

+1

Где вы создаете '_serverCommands' и где вы вызываете' _serverCommands.StartServer() '? Похоже, что вы не используете объекты '_serverCommand' между запросами. – Jeff

ответ

1

Я обнаружил, что каждый раз, когда я отправлял команду через WCF, я вызывал новый экземпляр MinecraftService.

Как справедливо сказал Джефф, я не делал объект общим, я только обращался к новому экземпляру этого класса.

Я изменил его от

От

MyMainClass

Private _serverCommands As ServerCommands 

Мой WcfService

Dim command As String = "say hello world" 
    MinecraftService.ServerCommands.SendCommand(command) 

К

MyMainClass

Public Shared ServerCommands As ServerCommands 

Мой WcfService

MinecraftService.ServerCommands.SendCommand(command) 
Смежные вопросы