.NET 4.0(C#)で完全に開発された3層アプリケーションがあります。エンタープライズアプリケーションサーバーとして、COM + 1.5を使用します(少しレガシーだと思います...)。サーバー部分とクライアント部分の両方がC#for.NET4.0で開発されています。
サーバー部分は、ServicedComponentクラスを継承し、「Serializable」属性を実装するオブジェクトを返すサービスを公開します。クライアントは、コンポーネントのCOM+エクスポートプロキシを介してリモートクラスを呼び出します。ClickOnceを介してクライアントアプリを配布し、管理者権限で、COM+で生成されたプロキシをすべてのクライアントマシンにインストールする必要があります。これが悪い点です。
そのため、このプロキシのインストールを排除できる他の手法を評価しようとしていますが、これを行う方法はそれほど明確ではありません。同じCOM+部分を使用し、何らかの方法でプロキシをクライアント側のコードに含めることができる、影響の少ない方法を見つけたいと思います。
クライアント部分でこのようなコードを使用しようとしましたが、それでもCOM登録が必要です。
Type comObjectType = Type.GetTypeFromProgID("SumNameSpace.SumClass", "servercomplus", true);
SumInterface comObject = Activator.CreateInstance(comObjectType) as SumInterface;
クライアント部分で代わりにインターフェイスを使用するとクラスが機能する必要があると考えましたが、例外があります。
Runtime.InteropServices.COMException (0x800401F3): Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))
このエラーは、Windowsレジストリにインターフェイスに関する正しい情報がない場合に発生するはずですが、わかりません...
何か案が?
どうもありがとう