問題タブ [com+]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - .NetアプリケーションとCOM+オブジェクトの間でトランザクションを共有することは可能ですか?
私はしばらく前にいくつかのテストを行いましたが、これを機能させる方法がわかりませんでした。
材料:
- COM +トランザクションオブジェクト(VB6で開発)
COM+コンポーネントを呼び出すIISの.NetWebアプリケーション(トランザクションあり)は
、SQLデータベースの行を更新します
テスト:
.Netアプリケーションを実行し、例外を強制します。
結果:
.Netアプリケーションから行われた更新はロールバックされます。
COM+オブジェクトによって行われた更新はロールバックされません。
古いASPページからCOM+オブジェクトを呼び出すと、ロールバックが機能します。
「なに?!COM +や.Netは気にしないでね!」と思っている方もいらっしゃるかもしれませんが、この世界にはまだCOM+のコンポーネントがたくさんあるところがあります。誰かがこれに直面したことがあるかどうか、そしてあなたがこれを機能させる方法を理解したかどうか、私はただ興味がありました。
.net - .NET によって生の COM および DCOM プログラミングが不要になりましたか?
.net フレームワークの導入により、COM および DCOM での生のプログラミングは冗長になりましたか?
(System.EnterpriseServices 名前空間を介したトランザクション管理など、一部の COM+ サービスを使用する場合を除く)
c# - Windows インストーラー パッケージによって追加されたレジストリ エントリ内で、GAC 内のアセンブリへのパスを参照する方法を教えてください。
EnterpriseServices (COM+) を介して ServicedComponent として登録され、サードパーティ アプリケーションによって COM RPC を介して呼び出されるクラスを含む .NET アセンブリがあります。したがって、これを GAC に追加しHKEY_CLASSES_ROOT\CLSID\{clsid}\CodeBase
、GAC フォルダー内のアセンブリ DLL へのパスを含むレジストリ エントリを追加する必要があります。(regsvcs に頼ることはできません。これは 32 ビットのアセンブリであり、32 ビットのサードパーティ コンポーネントに依存しているためです。また、前に参照したサードパーティ アプリケーションでは、クラスを参照できません。 Wow6432Node)
質問は次のとおりです。
GAC で作成されるアセンブリへのパス、または少なくとも GAC フォルダー自体へのパスは、レジストリ キーなどの値で使用できるプロパティとして Windows インストーラーで使用できますか?
.net - IDataReaderを返す.netCOM+オブジェクト
ServicedComponentから派生した.netクラスを作成し、COM+に登録しました。このコンポーネントが実装するインターフェースには、IDataReaderを返すメソッドがあります。クライアントアプリケーションからサービスコンポーネントを呼び出すと、すべてが機能します。IDataReaderを返すメソッドを呼び出すことは問題ありませんが、オブジェクトのメソッドを呼び出すとすぐに、次の例外が発生します。 "System.Runtime.Remoting.RemotingException:このリモート処理プロキシにはチャネルシンクがありません。つまり、サーバーにリッスンしているサーバーチャネルが登録されていないか、このアプリケーションにサーバーと通信するための適切なクライアントチャネルがありません。」
私は自分のコードをかなりハッキングし、シリアル化可能な(Serializable属性を持つ)IDataReaderの独自の実装を作成すれば機能することに気づきました。実装がMarshalByRefObjectから派生している場合、失敗します。
それで、COM + ServicedComponentsからの参照によって標準の.netオブジェクトを返すことは可能ですか?もしそうなら、それを達成するために何をする必要がありますか?
.net - (.net) COM+ アセンブリを GAC にインストールする必要がありますか?
COM+ ServicedCopmonent を含む .net アセンブリがあり、現時点ではそれを GAC にインストールしてすべてを機能させています。これは、GAC で参照するすべてのアセンブリも必要であることを意味します。
開発中、これらのアセンブリに変更を加え、それらを GAC に再インストールしてからテストするのは非常に面倒です。
COM+ コンポーネントを維持することは可能ですが、GAC にすべてを含めることはできませんか?
com+ - COMAdminCatalog.InstallApplication の呼び出しでのアプリケーション ファイルの種類は何ですか
COMAdminCatalog.InstallApplication を使用してアプリケーションを COM+ に正常にインストールした人はいますか? その場合、bstrApplicationFile パラメーターとして渡す必要があるファイルの種類は何ですか?
singleton - COM+ シングルトン 多数のリファレンス
最小および最大プール サイズが 1 のオブジェクト プーリングを使用するように構成された COM+ データ サービスがあります。そのため、シングルトンがあります。一部のシナリオでは、オブジェクト数 (このインスタンスへの参照を持つクライアントの数) が 1 を超え、着実に増加しています。インスタンスの作成とそのメソッドへの 1 回の呼び出しは using stmt でラップされるため、インスタンスはプールに適切に返される必要があります。これが発生すると同時に、いくつかのネットワークの問題が発生します (SQLServer でのトランスポート レベル エラーの例外)。そこに何らかの相関関係があるのではないかと推測しています。
オブジェクト数が 1 を超えて増加するのはなぜですか?
.net - .NET から COM+ コンポーネントのコンストラクター文字列を設定するにはどうすればよいですか?
C# アプリケーションから COM+ コンポーネントのコンストラクタ文字列をプログラムで設定しようとしています。次のサンプル コードをオンラインで見つけましたが、例外がスローされます。
このコードを実行すると、6 行目で次の例外が発生します。
タイプ 'System.__ComObject' の COM オブジェクトをクラス タイプ 'COMAdmin.COMAdminCatalogCollectionClass' にキャストできません。CLR に入り、IProvideClassInfo をサポートしないか、相互運用アセンブリが登録されていない COM コンポーネントは、__ComObject 型にラップされます。この型のインスタンスは、他のクラスにキャストできません。ただし、基になる COM コンポーネントがインターフェイスの IID に対する QueryInterface 呼び出しをサポートしている限り、インターフェイスにキャストできます。
どこが間違っているのか分かりますか?または、これを行う簡単な方法はありますか?
com+ - COM +でdllhost.exeプロセスをプログラムでリサイクルするにはどうすればよいですか?
COM +でdllhost.exeプロセスをプログラムでリサイクルするにはどうすればよいですか?
c# - プロキシから COM+ メソッドを呼び出すと E_ACCESSDENIED が発生するのはなぜですか?
これが少し長かったら申し訳ありません...これを考慮してください:
Companyという名前の名前空間に、次のメソッドを持つServerというオブジェクトを公開するCOM+ アプリケーションがあります。
IOptions には、次のようにブール型の読み取り/書き込みプロパティがいくつかあります。
次のコードでクライアント アプリケーションを作成します。
マシン A に COM+ アプリケーションをインストールし、マシン A でクライアントを実行すると、すべてがうまくいきます。
次に、クライアント アプリケーションを変更して、次のように IOptions の独自の実装を作成します。
繰り返しますが、マシン A でクライアント アプリケーションを実行すると、すべて問題ありません。
マシン A のプロキシとしてマシン B に COM+ アプリケーションをインストールし、クライアントを実行すると、次の呼び出しで E_ACCESSDENIED エラーが発生します。
マシン A にアクセスするマシン B で実行されるコードの概要を次に示します。
要約すると、クライアントが COM+ アプリケーションと同じマシン上にあるときに、独自の IOptions を実装してそれを COM+ アプリケーションで使用できるのに、クライアントが別のマシン上のプロキシ経由で COM+ アプリケーションにアクセスしているときに使用できないのはなぜでしょうか?
IOptions がサーバーによって作成された場合は問題ないようですが、クライアントによって作成された場合はそうではありません。
どんな助けでも大歓迎です。
ありがとう、
カール。