WCF WS-AtomicTransaction 構成ユーティリティ on x64

WS-AtomicTransaction サポートの構成 にあるようにWsatUI.dll ファイルを登録すると WS-AtomicTransaction 構成ユーティリティのGUIを使えるようになるはず、なのだが x64 版OS (Windows Server 2003 R2 x64 および Windows XP x64) で使うにあたって32bit版と64bit版の間で試行錯誤することとなった。

  • 最新版の Windows SDK はバージョンが上がっているので %PROGRAMFILES%\Microsoft SDKs\Windows\v6.0 → %PROGRAMFILES%\Microsoft SDKs\Windows\v6.1
  • x64版のバイナリが %PROGRAMFILES%\Microsoft SDKs\Windows\v6.1\Bin\x64\WsatUI.dll にある
  • regasm.exe について、32bit版(%Systemroot%\Microsoft.NET\Framework\v2.0.50727\regasm.exe) と64bit版(%Systemroot%\Microsoft.NET\Framework64\v2.0.50727\regasm.exe) がある
  • コンポーネントサービス の画面を表示する mmc について32bit版(%systemroot%\SysWow64\mmc.exe) と 64bit版(%systemroot%\System32\mmc.exe) がある

登録において重要なのは、regasm.exe と mmc.exe で利用するアーキテクチャをあわせること。(64bitの場合前者は Microsoft.NET\Framework64 で 後者が system32 にあるのはかなりの罠) 最終的には両方登録してしまうのがよいと思われる。

検証はしていないが WsatUI.dll 自体は .NET Framework のアセンブリDLLなので x64/x86 のどちらを使っても登録は可能なはず。(ただし ngen を利用してそれぞれ32bit/64bit専用のネイティブバイナリが埋め込まれている可能性はある)

ともかく regasm を利用した結果として、MSDTCのプロパティ画面に WS-AT タブが登場するようになる。

このダイアログが出るようになってもまだ壁は続く

  • MSDTCタブ 内 トランザクションの構成/セキュリティの構成で ネットワークDTCアクセスを有効にしておく必要がある
  • WS-AT タブの証明書として指定する証明書はクライアント認証のサポートが必要
  • この証明書に対する秘密鍵が MSDTC サービスの実行アカウント、すなわち NT AUTHORITY\Network Service から読める必要がある

現在までのところこの証明書に関する制限をクリアして実際の通信まではたどりつけていないのだが、この後の手順としては以下の通り。

  • 証明書そのものとしては、ActiveDirectory でコンピュータに対して自動発行できる証明書を利用できそう。コンピュータに対する自動証明書要求のステップ バイ ステップ ガイド これで駄目な場合は CSR を自分で作成して個別に証明書インストールする
  • 秘密鍵を NT AUTHORITY\Network Service から読めるようにする設定は FindPrivateKey ツールを使うとよい。このページに出てくるアクセス権設定例がNT AUTHORITY\Network Service への読み取り許可追加そのものになっている。

WS-ATの[Authorized certificates] (WS-AtomicTransaction サポートの構成中では [承認された証明書] と記載) に対する設定は、ActiveDirectory のグループポリシーで配りたいがどこに保存されているのか今のところ不明

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。