- PR -

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

投稿者投稿内容
ワン101
会議室デビュー日: 2009/03/08
投稿数: 7
投稿日時: 2009-03-08 13:49
お世話になっております。

標題の件にて困っております。

現在、カスタマイズ作業で
MTSを使うトランザクション処理なるものを使用しているであろうシステムの改修
作業を行っています。
本来は引き継ぎ元の会社に確認を取るべきなのでしょうがいろいろな理由により
確認を取ることができません。 
またマニュアルもない状況で大変困っており助けていただきたいと投稿させてもらいました。

環境は以下の通りです。(開発環境)
OS:WINDOWS XP
DB:SQL SERVER2000
言語:VB6.0
WEBサーバー:IISサーバー5.0
       ASP3.0(開発した際のバージョン)

あるDLLでエラーとなりデバッグができずに困っています。

  Dim objContext As COMSVCSLib.ObjectContext
Dim objApplication As ASPTypeLibrary.Application
Dim objRequest As ASPTypeLibrary.Request
Dim objResponse As ASPTypeLibrary.Response
Dim objServer As ASPTypeLibrary.Server


Set objContext = GetObjectContext
  ↑↑↑
  objContextにオブジェクトがセットされません(objContext=NOTHINGとなります)
  ※GetObjectContext(COMSVCS.dll)のメソッドから返されません。
Set objApplication = objContext("Application")

(質問)
1.GetObjectContextからは何が返されるのか?
2.環境が整っておらずエラーとなるのか?
  7年程前のシステムで現状の環境とあっていない気がします
  MTS【Microsoft Transaction Server】は現在の環境では存在しない気がします

まったく資料もなく始めて見る仕様でお手上げ状態です。
どうかわかる方いらっしゃればアドバイスをお願いいたします。

Atata!!
常連さん
会議室デビュー日: 2007/05/22
投稿数: 20
投稿日時: 2009-03-10 20:49
Atata!!です。

引用:

1.GetObjectContextからは何が返されるのか?


ObjectContextが返されます。
http://msdn.microsoft.com/en-us/library/ms678909(VS.85).aspx

引用:

2.環境が整っておらずエラーとなるのか?
  7年程前のシステムで現状の環境とあっていない気がします
  MTS【Microsoft Transaction Server】は現在の環境では存在しない気がします


Windows2000Serverの時点で、MTSはCOM+サービスに統合されています。
その時点からMTSはCOM+サービスの一部としてサポートされています。

VB6の開発環境は通常COM+アプリケーションとして構成されていないので、ObjectContextを使用することはできません。
XPのIIS上で取得できていない場合、IISのアプリケーション保護の設定を見直してください。
最高レベルの保護を設定するとワーカープロセスがCOM+アプリケーションとして分離されます。
この状態であればGetObjectContextで取得できるはずです。(多分)
ワン101
会議室デビュー日: 2009/03/08
投稿数: 7
投稿日時: 2009-03-11 01:21
返信ありがとうございます。

さっそく確認をし追って報告いたします。
確認後、うまくいかない場合には再度、お力を貸してもらえればと
思います。
ワン101
会議室デビュー日: 2009/03/08
投稿数: 7
投稿日時: 2009-03-12 01:14
XPのIIS上で取得できていない場合、IISのアプリケーション保護の設定を見直してください。
最高レベルの保護を設定するとワーカープロセスがCOM+アプリケーションとして分離されます。
この状態であればGetObjectContextで取得できるはずです。(多分)
→アプリケーション保護の設定を「高(最高レベル」に設定し試しましたが
 やはり同じ個所でエラーとなりデバッグできませんでした。

他の設定も必要なようですがわかれば再度アドバイスをいただきたいと思います。
すみませんがよろしくお願いします。
Atata!!
常連さん
会議室デビュー日: 2007/05/22
投稿数: 20
投稿日時: 2009-03-12 10:15
引用:

→アプリケーション保護の設定を「高(最高レベル」に設定し試しましたが
 やはり同じ個所でエラーとなりデバッグできませんでした。


よく調べてみるとXPでもアプリケーション保護の設定に関係なく、
IISのワーカープロセスはCOM+アプリケーション上で動作していましたので、
この設定は関係なかったですね。

残った問題は作成しているアプリケーションがトランザクションを要求していないことぐらいでしょうかね。
次の点を確認してみてください。
1.ASPページ上で @TRANSACTION ディレクティブを指定しているか?
2.VB6で作成しているクラスモジュールで MTSTransactionMode に何を指定しているか?
Atata!!
常連さん
会議室デビュー日: 2007/05/22
投稿数: 20
投稿日時: 2009-03-13 22:15
自分で回答していておかしいと思ったのは
COM+アプリケーションではトランザクションの設定によって
GetObjectContext の動作が変わるということはありえません。

で、検証してみましたが、どうやっても GetObjectContext からは ObjectContext が返されます。
こうなると確認することは以下の2点のみかと。
1.IIS 上で動作させていますか?
2.COMSVCS.DLL のタイプライブラリに含まれる GetObjectContext を使用していますか?
ワン101
会議室デビュー日: 2009/03/08
投稿数: 7
投稿日時: 2009-03-16 02:18
Atata!!様
返信、おそくなりすみません。


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

2.COMSVCS.DLL のタイプライブラリに含まれる GetObjectContext を使用しています  か?
→すみません、
 Dim objContext As COMSVCSLib.ObjectContext
 Set objContext = GetObjectContext←これではいけないのでしょうか
 それとも根本的に質問の意味が理解できていなければすみません。
 注意してください。

お手数をお掛けしますがよろしくお願いします。
 
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2009-03-16 15:20
引用:

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



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

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

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