- PR -

MTS(COMSVCS.dll)を使うトランザクション処理?

投稿者投稿内容
Atata!!
常連さん
会議室デビュー日: 2007/05/22
投稿数: 20
投稿日時: 2009-03-16 20:43
引用:

→IIS上での動作とは?
 開発環境であるXPにIISサーバーを立て一応はWEBの参照はできるようになっています が特にDLLをIIS上で何かをしているわけではありませんが何か必要なのでしょうか


簡単に言うとその DLL は ASP ページから CreateObject されて呼び出された場合にだけ動作するということです。

引用:

→すみません、
 Dim objContext As COMSVCSLib.ObjectContext
 Set objContext = GetObjectContext←これではいけないのでしょうか
 それとも根本的に質問の意味が理解できていなければすみません。
 注意してください。


分からないなら無視してください。多分、問題ないはずです。

# COMSVCS.DLL は他にエクスポートされた関数として GetObjectContext を持っているので、
# それを使っていることはないかと思っただけです。
# Declare Function GetObjectContext Lib "COMSVCS.DLL" ...
# なんてことはしてませんよね?


引用:

どこで躓いているのかいまいちよくわからないので、基本的な確認ですが、作成したDLLは、COM+ コンポーネントとして登録しなければ動きません。(既に設定済みなら本投稿は無視してくださいー。)

「コントロールパネル」→「管理ツール」→「コンポーネントサービス」→「コンピュータ」→「マイコンピュータ」→「COM+ アプリケーション」
ここに空のライプラリを作って登録することになるかと。
実際の設定値は現稼働環境を参考にすることになると思います。


話がややこしくなるのでフォローしておきますが、
GetObjectContext は呼び出しているプログラム自身が COM+ コンポーネントとして登録されていなくても、
COM+ コンテキスト下で動作するプログラムから呼び出された場合にも成功します。
本件では ASP ページが COM+ コンテキストで動作するプログラムに該当します。

# ASP ページから呼び出されていないなら上記の登録は必要になりますが・・・。
# 恐らく元の会社もそんなに複雑なことはしていないでしょう。と
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2009-03-16 21:15
引用:

引用:

どこで躓いているのかいまいちよくわからないので、基本的な確認ですが、作成したDLLは、COM+ コンポーネントとして登録しなければ動きません。(既に設定済みなら本投稿は無視してくださいー。)

「コントロールパネル」→「管理ツール」→「コンポーネントサービス」→「コンピュータ」→「マイコンピュータ」→「COM+ アプリケーション」
ここに空のライプラリを作って登録することになるかと。
実際の設定値は現稼働環境を参考にすることになると思います。


話がややこしくなるのでフォローしておきますが、
GetObjectContext は呼び出しているプログラム自身が COM+ コンポーネントとして登録されていなくても、
COM+ コンテキスト下で動作するプログラムから呼び出された場合にも成功します。
本件では ASP ページが COM+ コンテキストで動作するプログラムに該当します。

# ASP ページから呼び出されていないなら上記の登録は必要になりますが・・・。
# 恐らく元の会社もそんなに複雑なことはしていないでしょう。と




>IISのワーカープロセスはCOM+アプリケーション上で動作していましたので、

なるほど。

確かに話をややこしくしてしまいそうだし、スレ主さんからの情報待ちということで引っ込みます。すみません。
ワン101
会議室デビュー日: 2009/03/08
投稿数: 7
投稿日時: 2009-03-18 02:22
お返事ありがとうございます。

簡単に言うとその DLL は ASP ページから CreateObject されて呼び出された場合にだけ動作するということです
→確かにASPページからCreateObjectし、元の会社も複雑なことはしていませんので
 COM+ コンポーネントに登録はしていません。(登録されているか確認をしました)

ただし今回はVB上でデバッグをしたかったのですがエラーとなってしまいました。
もしかするとVBでデバッグするためにはCOM+ コンポーネントに登録が必要ということに
なるのでしょうか? 的外れなことを言っていたらすみません。


Atata!!
常連さん
会議室デビュー日: 2007/05/22
投稿数: 20
投稿日時: 2009-03-18 22:11
引用:

ただし今回はVB上でデバッグをしたかったのですがエラーとなってしまいました。
もしかするとVBでデバッグするためにはCOM+ コンポーネントに登録が必要ということに
なるのでしょうか? 的外れなことを言っていたらすみません。


なかなか鋭い読みだと思います。
が、そこまでする必要はありません。
クラスモジュールの MTSTransactionMode プロパティを 0 - NotAnMTSObject 以外に設定し、プロジェクトプロパティのデバッグタブで「コンポーネントが作成されるまで待機する」を設定してプログラムを開始すれば、デバッグは可能です。

上記で駄目な場合(ほぼ確実に駄目でしょうが)、以下のKBが参考になるかと。
http://support.microsoft.com/kb/244457/JA/
http://support.microsoft.com/kb/259725/JA/
ワン101
会議室デビュー日: 2009/03/08
投稿数: 7
投稿日時: 2009-03-19 00:53
返信ありがとうございます。

いただいたアドバイスを実行して確認してみます。
少し、時間をいただきたいと思いますが確認後また
報告させていただきます。

いろいろとアドバイスいただき大変助かっています。
ありがとうございます。
ワン101
会議室デビュー日: 2009/03/08
投稿数: 7
投稿日時: 2009-04-01 21:12
返信、遅くなりすみませんでした。

クラスモジュールの MTSTransactionMode プロパティを 0 - NotAnMTSObject 以外に設定し、プロジェクトプロパティのデバッグタブで「コンポーネントが作成されるまで待機する」を設定してプログラムを開始すれば、デバッグは可能です
→試してみましたがダメでした。

また参考にもらったURLも見て必要なことはやってみましたが
結果変わらず。 半分あきらめています。。。

今までいろいろとアドバイスを頂きありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)