Joey Bob
Joey Bob

Reputation: 332

Execute a method on an existing process instance. Vb.Net

I have a windows service that I have been writing in Vb.Net. As part of this service it calls a class that has a long running Process.

I can execute commands to this process when I want to via the ServerCommands() class within the service, however I want to call these remotely. Possibly from a website or click once WPF application.

For this I have used a simple Tcp.Ip WCF example, and have verified it as working correctly.

This called 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

However... when I'm calling the service through WCF its starting a new instance of the ServerCommands() Class rather than attaching to the already running thread.

The following call

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

Implements this on the main service.

Public Sub ExecuteServerSideCommand(command As String) Implements IMinecraftService.ExecuteServerSideCommand
    If (_serverCommands IsNot Nothing) Then
        _serverCommands.SendCommand(command)
    End If
End Sub

It appears that in debug _serverCommands is Nothing when it should be running.

How might I go about ensuring any command I execute through WCF communicates with the running instance instead of creating a new ServerCommand() instance??

I haven't tried WCF before, so I might be hitting a dead end... however I'm sure its possible.

Thanks in advance.

Upvotes: 0

Views: 717

Answers (1)

Joey Bob
Joey Bob

Reputation: 332

I found that I was calling a new instance of the MinecraftService each time I sent a command via WCF.

As Jeff rightly said, I was not making the object shared, I was only accessing a new instance of this class.

I changed it from

From

MyMainClass

    Private _serverCommands As ServerCommands

My WcfService

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

To

MyMainClass

    Public Shared ServerCommands As ServerCommands

My WcfService

    MinecraftService.ServerCommands.SendCommand(command)

Upvotes: 1

Related Questions