0

私はVb.Netで書いているWindowsサービスを持っています。このサービスの一部として、実行時間の長い Process を持つクラスを呼び出します。

サービス内の ServerCommands() クラスを介して必要なときに、このプロセスに対してコマンドを実行できますが、これらをリモートで呼び出したいと考えています。おそらく Web サイトから、またはクリック ワンス 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 は、実行すべきときに Nothing であるように見えます。

新しい ServerCommand() インスタンスを作成する代わりに、WCF を介して実行するコマンドが実行中のインスタンスと通信するようにするにはどうすればよいですか??

私は以前にWCFを試したことがないので、行き止まりにぶつかるかもしれません...しかし、可能だと確信しています。

前もって感謝します。

4

1 に答える 1

1

WCF 経由でコマンドを送信するたびに、MinecraftService の新しいインスタンスを呼び出していたことがわかりました。

Jeff が正しく言ったように、私はオブジェクトを共有しているのではなく、このクラスの新しいインスタンスにアクセスしているだけでした。

から変えました

から

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)
于 2012-05-17T06:57:50.007 に答える