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をロードしようとしません。
明らかに私はここで何が起こっているのか分かりません。誰かがこれについていくつかの光を当てることができますか?
choicepointClue.dllのクラスは、リモートサーバー上のchoicepointRemoteAgentによって使用されます。クライアントはchoicepointRemoteAgentのタイプ情報を知る必要があるだけであるはずです。さもなければ、なぜ私のローカルマシンでchoicepointClue.dllなしで動作するのですか? 最初は、binディレクトリ以外のディレクトリを見つけなければならないと思っていましたが、ローカルに存在しないことを確認しました。 –
choicePointClientで使用される型はどこで定義されていますか?通常、「共有」インターフェース/クラスは別のアセンブリに入れる必要があります。これらのタイプはクライアント+サーバーの両方で使用できる必要があるからです。 –
クライアントによって使用されるタイプはchoicepointRemoteAgentで定義されます。あなたが期待するように、別のアセンブリに共有インターフェイスはありません。 choicepointRemoteAgent.dllは、クライアントとサーバーの両方に存在します。 –