IPCでイベントが来ない への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 ねこまっしぐら  (社会人)
投稿日時
2017/7/24 13:05:41
一つ教えてください
VB.net2005でIPCのリモーティングをしようとしています
重複起動チェックをして最初のプロセスならIPCサーバーになり、2つ目ならクライアントになって起動パラメータを送って終了
サーバーはイベントでそのパラメータを受け取って処理する、というのをやりたいのですがそのイベントが来ません
リモートオブジェクトが呼ばれているのは確認しましたがではこのイベントはどこへ行ってるのでしょう
ライブラリ
Public Class RemoteClass
Inherits MarshalByRefObject
Public Event Called(ByVal sender As Object, ByVal e As EventArgs)
Public Function CallServer() As String
Dim sender As Object = "Hoge"
Dim e As EventArgs = New EventArgs
(実際はこのeでパラメータを送っています)
RaiseEvent Called(sender, e) <-このイベントはどこに?
Return "Hoge"
End Function
End Class
リモートの宣言
Public WithEvents RemoteClass As New IPCSvr.RemoteClass
クライアント部分
If FirstProc = False Then
Dim IpcClientChannel As IpcClientChannel = New IpcClientChannel
ChannelServices.RegisterChannel(IpcClientChannel, False)
RemotingConfiguration.RegisterWellKnownClientType(GetType(RemoteClass), "ipc://IPC_Test/RemoteClass")
Dim Obj As RemoteClass = New RemoteClass
Obj.CallServer()
End
End If
サーバー部分
Dim IPCServerChannel As IpcServerChannel = New IpcServerChannel("IPC_Test")
ChannelServices.RegisterChannel(IPCServerChannel, False)
RemotingConfiguration.RegisterWellKnownServiceType(GetType(RemoteClass), "RemoteClass", WellKnownObjectMode.SingleCall)
IPCServerChannel.StartListening(Nothing)
イベント処理部(これが動かない)
Sub NextProcStart(ByVal sender As Object, ByVal e As EventArgs) Handles RemoteClass.Called
:
End Sub
VB.net2005でIPCのリモーティングをしようとしています
重複起動チェックをして最初のプロセスならIPCサーバーになり、2つ目ならクライアントになって起動パラメータを送って終了
サーバーはイベントでそのパラメータを受け取って処理する、というのをやりたいのですがそのイベントが来ません
リモートオブジェクトが呼ばれているのは確認しましたがではこのイベントはどこへ行ってるのでしょう
ライブラリ
Public Class RemoteClass
Inherits MarshalByRefObject
Public Event Called(ByVal sender As Object, ByVal e As EventArgs)
Public Function CallServer() As String
Dim sender As Object = "Hoge"
Dim e As EventArgs = New EventArgs
(実際はこのeでパラメータを送っています)
RaiseEvent Called(sender, e) <-このイベントはどこに?
Return "Hoge"
End Function
End Class
リモートの宣言
Public WithEvents RemoteClass As New IPCSvr.RemoteClass
クライアント部分
If FirstProc = False Then
Dim IpcClientChannel As IpcClientChannel = New IpcClientChannel
ChannelServices.RegisterChannel(IpcClientChannel, False)
RemotingConfiguration.RegisterWellKnownClientType(GetType(RemoteClass), "ipc://IPC_Test/RemoteClass")
Dim Obj As RemoteClass = New RemoteClass
Obj.CallServer()
End
End If
サーバー部分
Dim IPCServerChannel As IpcServerChannel = New IpcServerChannel("IPC_Test")
ChannelServices.RegisterChannel(IPCServerChannel, False)
RemotingConfiguration.RegisterWellKnownServiceType(GetType(RemoteClass), "RemoteClass", WellKnownObjectMode.SingleCall)
IPCServerChannel.StartListening(Nothing)
イベント処理部(これが動かない)
Sub NextProcStart(ByVal sender As Object, ByVal e As EventArgs) Handles RemoteClass.Called
:
End Sub
IPCの経験はなく、検証もしていない前提です。
わたしだったらまず、
サーバ側で作成したRemoteClassのインスタンスが
クライアント側で取得できているかを確認すると思います。
1.RemoteClassに判定用のプロパティを追加
2.サーバ側でRemoteClassのインスタンスを作成
3.サーバ側でインスタンスの判定用プロパティを書き換える
4.クライアント側でインスタンスを取得
5.クライアント側でインスタンスの判定用プロパテを取得
6.上記3で設定した値と同じであれば正常に取得できている。