2

これが少し長かったら申し訳ありません...これを考慮してください:

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 がサーバーによって作成された場合は問題ないようですが、クライアントによって作成された場合はそうではありません。

どんな助けでも大歓迎です。

ありがとう、

カール。

4

2 に答える 2

2

役に立つかもしれないし、役に立たないかもしれない DCOM の古い経験を推定するつもりです。アクセスが拒否された場合は、マシン B の DCOM 構成パラメーターを確認する必要があります。

古い OS (Windows 2000) では、 dcomcnfgを実行します。しかし、XP では、コントロール パネルの [管理ツール] からコンポーネント サービスを実行します。Vista では、明らかに、windows\System32\comexp.msc を実行する必要があります。

コンポーネント サービスの管理画面で、[マイ コンピューター] を強調表示し、プロパティを選択します。最初に行う必要があるのは、[既定のプロパティ] タブで、[このコンピューターで分散 COM を有効にする] をクリックすることです。さらに、[ COM セキュリティ] タブで、起動とアクティブ化、およびアクセス許可を指定する必要がある場合があります。その際、Edit Limits と Edit Defaults の両方に対処しなければならない場合があります。

これらは既定のアクセス許可であり、アプリケーション リストで登録済みの COM+ アプリケーションを見つけて、コンピューター全体の既定値ではなく、アプリケーション固有のアクセス権を設定することをお勧めします。ただし、[このコンピューターで分散 COMを有効にする] チェックボックスをオンにする必要があることは知っています。

これが役立つことを願っています。

于 2008-11-29T18:57:11.040 に答える
1

dcomcnfg.exe (MMC スナップインを開く必要があります) を使用して、リモート マシンで COM サーバーのリモート アクティベーション アクセス許可を調べてみてください。

-オイシン

于 2008-11-29T18:51:06.463 に答える