- PR -

.Netリモーティング サーバの切断、再接続

1
投稿者投稿内容
プラズマY
会議室デビュー日: 2007/08/23
投稿数: 6
投稿日時: 2007-09-26 16:55
●●●●●サーバ側●●●●●●●●●●●●●●●●●●●●●
Private SvrCh As Channels.Tcp.TcpServerChannel
Private WithEvents REMOTE As ClassRemote

sub SV_OPEN()
SvrCh = New Channels.Tcp.TcpServerChannel("localhost:10000", 10000) 'サーバチャネルオープン
Channels.ChannelServices.RegisterChannel(SvrCh, False) '
Dim re As ObjRef = RemotingServices.Marshal(REMOTE, "SVR") 'リモートインタフェースオープン
End Sub

Sub SV_CLOSE()
Channels.ChannelServices.UnregisterChannel(SvrCh)
RemotingServices.Disconnect(REMOTE)
End Sub

●●●●●クライアント側●●●●●●●●●●●●●●●●●●●●●●●●●
Private rm As RemoteDLL
Sub Go()
rm = CType(Activator.GetObject(GetType(RemoteDLL), svrAddr), RemoteDLL) '送信先設定
rm.DLLMethod(data) '実際の送信
End Sub
●●●●●●●●●●●●●●●●●●●●●●●●●
以上のようなコードで.NETリモーティングのサーバとクライアントで通信をしているのですが
クライアント側から送信後(サーバ側で受信成功を確認してから)、サーバを切断(上記のCloseメソッド)
そして再度サーバをオープン(上記のOpenメソッド)したばあい、
10〜15秒程度の間隔を開けてからOpenしないと、
「通常、各ソケットアドレスに対してプロトコル、ネットワークアドレス、またはポートのどれか1つのみを使用できます。」
というエラーになります。
どうも通信後にこちらで切断したつもりになっても、15秒程度パスが残ってしまい、
それでサーバのオープンに失敗するようです。

この再接続の間隔を縮めたいのですがどのような設定が必要なのでしょう

[ メッセージ編集済み 編集者: 未記入 編集日時 2007-09-26 16:57 ]
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2007-09-26 18:00
クライアント側のチャネルでポート番号を指定していますか?

ゼロ(自動取得)にすれば新しいポートを使用しますので、
それまで使用していたポートが実際に再利用可能かどうかは問われなくなります。

ただ、ファイアーウォールで特定のポートのみを空けているような場合には、
この方法は使えません。
プラズマY
会議室デビュー日: 2007/08/23
投稿数: 6
投稿日時: 2007-09-26 18:32
クライアントのポートは特に問題なく、その時々で自動的にあいているポートを使用しています。
今回問題になっているのはサーバ側の切断、再接続です。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-09-27 03:14
引用:

未記入さんの書き込み (2007-09-26 16:55) より:
10〜15秒程度の間隔を開けてからOpenしないと、
「通常、各ソケットアドレスに対してプロトコル、ネットワークアドレス、またはポートのどれか1つのみを使用できます。」
というエラーになります。



同じコードを試してみましたが、再現しません。
1

スキルアップ/キャリアアップ(JOB@IT)