私は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を試したことがないので、行き止まりにぶつかるかもしれません...しかし、可能だと確信しています。
前もって感謝します。