- PR -

リモーティングのProxyオブジェクトを2回呼び出すと例外が発生

1
投稿者投稿内容
へるまろ
ベテラン
会議室デビュー日: 2003/02/04
投稿数: 57
お住まい・勤務地: 東京
投稿日時: 2006-11-06 21:06
現在VS2005で開発を行っているのですが、IPCを使用したリモーティングの処理で最初にProxyオブジェクトを呼び出してから、10秒ほど間をおいてもう一度Proxyオブジェクトを呼び出すと「要求されたサービスがみつかりません」という例外が発生してしまいます。
ちなみに2回目の呼び出しを時間をかけずに実行した場合は問題なく呼び出せています。

具体的にはサーバー側はWindowsサービスを使用し、リモーティングの構成は構成ファイルから取得するようにしておりまして、実装コードは以下のようになっています。

[サンプルコード]
コード:
IRemoteProxy proxy = 
    (IRemoteProxy)Activator.GetObject(typeof(IRemoteProxy), RemotingConfiguration.GetRegisteredWellKnownClientTypes()[0].ObjectUrl);

proxy.SampleMetho(); ←デバッガでこの位置で止めて10秒ほど待機



各構成情報は以下の通りです。

[クライアント側構成設定]
コード:
<system.runtime.remoting>
    <application>
      <client>
        <wellknown type="完全修飾名, アセンブリ名" url="ipc://Sample/SampleService.rem" />
      </client>
      <channels>
          <channel name="SampleService" ref="ipc" portName="Sample" useIpAddress="false" authorizedGroup="Everyone" exclusiveAddressUse="false">
          <serverProviders>
            <formatter ref="binary" typeFilterLevel="Full"/>
          </serverProviders>
        </channel>
      </channels>
    </application>
  </system.runtime.remoting>



コード:
[サーバー側]
<system.runtime.remoting>
    <application>
      <service>
        <wellknown mode="SingleCall" type="完全修飾名, アセンブリ名" objectUri="SampleService.rem" />
      </service>
      <channels>
        <channel name="SampleService" ref="ipc" portName="Sample" useIpAddress="false" authorizedGroup="Everyone" exclusiveAddressUse="false">
          <serverProviders>
            <formatter ref="binary" typeFilterLevel="Full"/>
          </serverProviders>
        </channel>
      </channels>
    </application>
  </system.runtime.remoting>



構成情報の中にタイムアウト関連の属性を追加することにより解決するのかもしれませんが、Channel要素にそれらしい属性はありませんでした。

もし解決策をご存知の方がおられれば、教えて頂けますでしょうか?

宜しくお願いいたします。

かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-11-06 22:26
Remoting はずいぶんと触っていないのですっかり忘れてしまったのですが(汗
ここにそれらしきことが書いてありました。
http://blogs.msdn.com/manishg/

実行しようとしたサーバオブジェクトがサーバ側ですでに破棄されていませんか?

#追記
ここら辺で検索しました。
.net remoting Service Not Found IPC
_________________
かるあ のメモ
http://karua.at.webry.info/

[ メッセージ編集済み 編集者: かるあ 編集日時 2006-11-06 22:27 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-11-07 01:43
引用:

かるあさんの書き込み (2006-11-06 22:26) より:
実行しようとしたサーバオブジェクトがサーバ側ですでに破棄されていませんか?


いやーSAOなのでそれはないでしょう、と思うのですが…
勘違いしてて実はCAO使ってるとか(これはないような気もしますが)、
なんかの拍子にサーバのリスンが終わってしまってるとか、そんなことはないですかね?

ちなみに「最初にProxyオブジェクトを呼び出してから、
10秒ほど間をおいてもう一度Proxyオブジェクトを呼び出すと」
と書かれていますが、コードでは一回しか呼んでないように見えます。
最初ってのはProxyを取得する処理のことを言っていますか?
へるまろ
ベテラン
会議室デビュー日: 2003/02/04
投稿数: 57
お住まい・勤務地: 東京
投稿日時: 2006-11-08 12:14
返信ありがとうございました。

結局クライアント側にPortNameを記述せずに、サーバー側だけにportName="Sample"を記述することで問題が発生しなくなりました。

どうやら同じportNameをクライアントとサーバー側の両方に設定していると問題が起こるようです。
これはexclusiveAddressUse="false"に設定することで回避できるものと思っていましたが・・

1

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