2009-06-04 11 views
0

remotingを使用してリモートサーバーオブジェクトを呼び出してクレジットレポートを注文するasp.net Webアプリケーションでメンテナンスを行っています。この呼び出しは「自分のマシンで動作しますが、プロダクションサーバー(64ビットバージョンの.netフレームワークを実行している)から実行すると、ファイルまたはアセンブリ 'choosepointClue'をロードできませんでした」という例外がスローされます。.net remoting dependency/reference issue

私はchoicepointClue.dllをWebアプリケーションのbinディレクトリにコピーすることで問題を解決しました。しかし、クライアントではなくリモートサーバーライブラリの依存関係であるため、なぜそこに存在する必要があるのか​​分かりません。

依存関係ツリーは、次のようになります。

Webアプリケーション - > choicepointClueClient - > choicepointRemoteAgent - > choicepointClue

choicepointRemoteAgentライブラリ内のクラスに定義されたインタフェースは(そこにあるべきようはありません)ので、choicepointClueClientによって直接参照されます。

ChoosepointRemoteAgentのクラスは、Activator.GetObject()を使用してインスタンス化されます。この時点で、私はchoicepointClue.dllが、Webアプリケーションのbinディレクトリからロードしようとしているランタイムではなく、リモートサーバにロードされることを期待しています。

x64とx86の間でアセンブリがどのように読み込まれるかには違いがあるというのが私の心に響きます。

x64では、choicepointRemoteAgentがロードされると直ちにchoicepointClueをロードしようとします。x86では、明示的に呼び出されるまでchiocepointClueをロードしようとしません。

明らかに私はここで何が起こっているのか分かりません。誰かがこれについていくつかの光を当てることができますか?

答えて

2

使用されている型がchoicepointClue.dllで定義されている場合は、リモート側のクライアント側とサーバー側の両方に存在する必要があります。

クライアントは、操作するために何が構築されているのかに関する情報を知る必要があります。これは、クライアント上でインスタンス化されているわけではありませんが、オブジェクトを操作する方法(リモートでも)を知るためには、基本的なインターフェイスを両端で認識する必要があります。

+0

choicepointClue.dllのクラスは、リモートサーバー上のchoicepointRemoteAgentによって使用されます。クライアントはchoicepointRemoteAgentのタイプ情報を知る必要があるだけであるはずです。さもなければ、なぜ私のローカルマシンでchoicepointClue.dllなしで動作するのですか? 最初は、binディレクトリ以外のディレクトリを見つけなければならないと思っていましたが、ローカルに存在しないことを確認しました。 –

+0

choicePointClientで使用される型はどこで定義されていますか?通常、「共有」インターフェース/クラスは別のアセンブリに入れる必要があります。これらのタイプはクライアント+サーバーの両方で使用できる必要があるからです。 –

+0

クライアントによって使用されるタイプはchoicepointRemoteAgentで定義されます。あなたが期待するように、別のアセンブリに共有インターフェイスはありません。 choicepointRemoteAgent.dllは、クライアントとサーバーの両方に存在します。 –

関連する問題