これが少し長かったら申し訳ありません...これを考慮してください:
Companyという名前の名前空間に、次のメソッドを持つServerというオブジェクトを公開するCOM+ アプリケーションがあります。
bool Server.Execute(IOptions options)
IOptions Server.CreateOptions()
IOptions には、次のようにブール型の読み取り/書き込みプロパティがいくつかあります。
IOptions.Option1 (bool)
IOptions.Option2 (bool)
次のコードでクライアント アプリケーションを作成します。
Company.Server s = new Company.Server();
Company.IOptions serverOptions = s.CreateOptions();
serverOptions.Option1 = false;
serverOptions.Option2 = true;
s.Execute(serverOptions);
マシン A に COM+ アプリケーションをインストールし、マシン A でクライアントを実行すると、すべてがうまくいきます。
次に、クライアント アプリケーションを変更して、次のように IOptions の独自の実装を作成します。
public class ClientOptions : Company.IOptions
{
public bool Option1 { get; set; }
public bool Option2 { get; set; }
}
Company.Server s = new Company.Server();
ClientOptions clientOptions = new ClientOptions();
clientOptions.Option1 = false;
clientOptions.Option2 = true;
s.Execute(clientOptions);
繰り返しますが、マシン A でクライアント アプリケーションを実行すると、すべて問題ありません。
マシン A のプロキシとしてマシン B に COM+ アプリケーションをインストールし、クライアントを実行すると、次の呼び出しで E_ACCESSDENIED エラーが発生します。
s.Execute(clientOptions);
マシン A にアクセスするマシン B で実行されるコードの概要を次に示します。
Company.Server s = new Company.Server();
Company.Options serverOptions = s.CreateOptions()
serverOptions.Option1 = false;
serverOptions.Option2 = true;
s.Execute(serverOptions); // this is fine
ClientOptions clientOptions = new ClientOptions();
clientOptions.Option1 = false;
clientOptions.Option2 = true;
s.Execute(clientOptions); // this causes the error
要約すると、クライアントが COM+ アプリケーションと同じマシン上にあるときに、独自の IOptions を実装してそれを COM+ アプリケーションで使用できるのに、クライアントが別のマシン上のプロキシ経由で COM+ アプリケーションにアクセスしているときに使用できないのはなぜでしょうか?
IOptions がサーバーによって作成された場合は問題ないようですが、クライアントによって作成された場合はそうではありません。
どんな助けでも大歓迎です。
ありがとう、
カール。