Visual SourceSafe 2005は、インターネット機能を使う場合、とんでもないじゃじゃ馬であることが分かりました。
まるまる2日ぐらい調査に使ってしまいましたが、やっと動くところに到達しました。
Visual SourceSafe 2005のインターネット機能とLANサービス §
SourceSafeは本来ファイル共有型のソースコード管理ソフトです。
しかし、ファイル共有以外の手段でアクセスを行う2つの機能が2005版から追加されています。
1つは、LAN経由で使用する「LANサービス」です。
もう1つは、SOAP(Webサービス)経由で使用する「SourceSafeインターネット」です。
この2つは全くの別物です。
前者は、専用のサービスが走り、TCPのポートをLISTENします。
後者は、IIS上にインストールされ、IISを経由してアクセスを受け取り、特にプロセスを常駐させたりしません。
LANサービスについて §
本筋と関係ありませんが、調べたことをメモっておきます。
Visual SourceSafeアドミニストレータで「LANサービス」を有効に設定すると、Visual SourceSafe LANサービス(SSService.exe)というサービスが動きます。
一度も有効にしない状態ではサービスの一覧に登録されていませんが、初回開始時にはサービスの登録が行われます。
このサービスは、netstat -abとして調べたところ以下のような結果が得られました。
TCP xxx:3593 xxx.xxx.piedey.co.jp:0 LISTENING 2820
[SSService.EXE]
ポート3593でLISTENしているようですが、常に同じポート番号ではないかもしれません。
ちなみに、このポートにtelnetでつないででたらめに文字を打ってみても応答はありませんでした。
SSService.exeはネイティブコードのモジュールらしいので、.NET Reflectorのようなツールで調べるのは無理のようです。(可能でもたぶん利用規約上ダメ)
参考情報 §
非常に参考になったページを紹介しておきます。
Installing and configuring Microsoft Visual SourceSafe for Internet (Remote) access
英文ですが、日本語での有益な情報はほとんど発見できませんでしたので、英語を読むしかないでしょう。
どこにインストールされるの? §
さて、本題の「SourceSafeインターネット」の話題に入ります。
この機能を使用する上での罠はいくつもあります。
まず、機能を有効化したとき、何がどこにインストールされるのかほとんど教えてもらえません。
あとで紹介する手動登録の手順も参考になりますが、知っていると役に立つのは以下の2つの情報です。
- Webサービスは、「既定のWebサイト」の下に作成されたSourceSafeという仮想ディレクトリの中のVssService.asmx
- 仮想ディレクトリの実体は"C:\Program Files\Microsoft Visual SourceSafe\VSSWebService"(デフォルトのままでインストールした場合)
2種類のアカウントの罠 §
認証に使われるアカウントが2種類ある罠があります。
「SourceSafeインターネット」は、基本的にWindows認証によって認証します。
しかし、SourceSafe自身も独自のアカウント情報を持っています。
通常は、Windows認証の結果を信頼するモード(「ネットワーク ログオン ユーザー名を基に自動的にユーザーをログオン」)でSourceSafeを動かすと思いますが、その場合でも、「Windows認証するアカウントと同じアカウト名がSourceSafe側に必要」となります。
そこで気になるのはWindows認証する際にマシン名やドメイン名をつける必要があることですが、これらはSourceSafe側で認識する際には無視されるようです。
ちなみに、Windows認証だけ通って、その先で何かトラブルがあると、ほとんど参考になる情報が得られません。
常識的な態度で取り組んでいると、この段階でお手上げになります。いくら外部に情報を公開するのは危険だからといって、トラブルシューティングのヒントがあまりにも乏しいのは、明らかな製品の問題点と考えます。
指定値の整合性の問題 §
URLやUNCを多用しますが、これらの表記は厳密に一致させる必要があるようです。
たとえば、\\servername\……と、\\servername.domainname\……の双方でアクセス可能なサーバがあったとしても、2つは厳密に区別して扱わねばなりません。混用すると同じサーバとして扱われないケースがあります。
「SourceSafeインターネット」インストール不能 §
特定のマシン上で発生した問題です。
Windows 2000 ServerのActive Directoryのドメインコントローラ上に「SourceSafeインターネット」をインストールしてみたところ、エラーが発生して有効化が完了できませんでした。
以下の2つの手順を取ることで、動作に成功しました。
手動インストールする §
手順(英文)は以下にあります。
How to: Enable Remote Access Manually
手動インストールの手順は製品マニュアルにも記述されています (日本語)。
ただし、32bit OSなら、64bit関係の手順は全て抜いてOKです。
説明が一部不十分で分かりにくい(download_virtual_folder_name等が何か分かりにくい)ので、正常にインストールできるマシン上で有効化した上で、そのマシンのweb.configファイルやsourcesafe.iniファイルを参考にして書き換えると良いでしょう。
ASP.NETを実行するアカウントの変更 §
通常ASP.NETは「IWAM_マシン名」というアカウントで動きますが、制限が多すぎるようなので、「System」に入れ替えます。
この手順は以下にある通りに実行します。
ASP.NET のプロセス ID と要求 ID
ちなみに、この手順はセキュリティが甘くなるリスクがあるのでお勧めではありません。私がこれを実行したのは、このサーバが私以外によって使われない内部LAN上にあって公開されることがあり得ないものであると同時に、実験サーバ的な色彩が強いものであるためです。一般的には、ドメインコントローラ上でソースコードを管理するWebサービスを動かすべきではないでしょう。
ついでに言えば、公開されないサービス(内部LANにしか使わせない)ならば、「SourceSafeインターネット」よりもLANサービスの方が良いようなので、無理に行う価値も低そうです。
複数データベース取り扱いの不可能性 §
アップロード・ダウンロードディレクトリ(仮想ディレクトリ)はWebサービスの仮想ディレクトリに対して、固定的に割り当てます。
また、アップロード・ダウンロードディレクトリ(実体)は特定のSourceSafeデータベースに固有の存在として割り当てます。
両者を併せて考えると、1つのWebサービスは、1つのデータベースを扱うために使うことしかできません。
おそらく、別ディレクトリにWebサービスを手動インストールすると、別データベースも扱えると思いますが面倒な作業になります。
Visual Studio 2005からの接続 §
「SourceSafeインターネット」「LANサービス」の双方とも、SourceSafeエクスプローラからは扱えません。
Visual Studio 2005のプラグインからのみ扱えます。
使用する前に、Visual Studio 2005の「ツール」メニューの「オプション」の「ソース管理」から、使用するプラグインを選択しておきます。ここでは、"Microsoft Visual SourceSafe (Internet)"です。
データベースへの接続を試みるには、「プロジェクトを開く」を選びます。
そして、「探す場所」として、"SourceSafe (Internet)"を選びます。
次に、SourceSafeデータベースの追加をダブルクリックします。
ウィザードが開くので「次へ」をクリックすると以下のダイアログボックスが出ます。
これが分かりにくいので詳しく説明します。
まず、アドレス欄は以下の2つの入力を受け付けます。
- ホスト名だけ (例: "xxx.xxx.piedey.co.jp")
- URL (例: "http://xxx.xxx.piedey.co.jp/SourceSafe/VssService.asmx")
ホスト名だけだけを入力した場合は、自動的に手前にhttp://あるいはhttps://が、後ろに/SourceSafe/VssService.asmxが補われます。
フォルダは、Visual SourceSafeアドミニストレータで開いたデータベースのUNCをそのまま一切変えることなく入力します。サーバの名前を省略形にしたりすると、受け付けられない可能性があります。(上記「指定値の整合性の問題」を参照)
これで、「SourceSafeインターネット」経由でのデータベースへのアクセスが可能になります。
バインドという手順 §
データベース中の既存のプロジェクトがあり、それがVisual Studioでソースコード管理されていなかった場合、そのままプロジェクトを開くことがでいません。
バインドという手順が必要となります。
詳しい使い方までは突っ込んでいませんが、一度SourceSafeエクスプローラでチェックアウトし、それをVisual Studioで開いてバインドを行い、チェックインするという手順を行えば良いようです。
感想・これはじゃじゃ馬ならしだ! §
いや本当に。
これほど面倒な作業になるとは思っていませんでした。
しかも、これだけ手間を掛けてなおhttps経由のアクセスの設定はまだできていません。
しかし、本質的にじゃじゃ馬ならしは好きであるという事実に気づきました。というか、避けて通るのは嫌なのですね。
2005年12月26日追記・.NET Framework 1.1がインストール済みの場合 §
書き忘れていたので書き足します。
すべてのマシンで発生していない問題ですが。
SourseSafeアドミニストレータで「SourceSafeインターネット」を有効にした場合、既に.NET Framework 1.1がインストール済みの場合、1.1で実行するように構成される現象を経験しています。この場合、IISのサイトのプロパティで、使用するASP.NETのバージョンを1.1から2.0に切り換えることで動くようになりました。