ツールと概念

ほぼグチです。申し訳ない。

例えば、NUnitの使い方を学んで一通り使えるようになったする。それでTDD(Test Driven Development:テスト駆動開発)的な開発ができるといえるのだろうか。XPの思想とかをまったく知らなくてもうまくやっていけるのだろうか。それとも使っているうちにTDD的な思想も身につくのだろうか。つまりツールが概念自体も教えてくれるのだろうかということ。
デザインパターンにしてもそうである。クリストファー・アレグザンダーが、とかもとは建築学の用語で、とかはたしかに知らなくてもいいのかもしれない。しかし、デザインパターンとは単なるノウハウ集ではなくて、このようにまとまったものに対して名前をつけることに意味があるんだよ、みたいなことは使っているうちに気づくものなのであろうか。

なぜこんなことに悩んでいるのかというと、自分の回りを見るにつけ不安になるから。極端に言えばデザインパターンという言葉すら知らない、よってその必要性など知る由もない、もちろんテストドリブンな開発などやったこともないしそのようなものがあることすら知らない。なんていうのがごろごろしているのが現実である。そのような人々を引き上げていくためにはどうすればいいんだろうかと。

こう書くと一歩間違うと他人を見下しているような書き方になってしまう。他人に対して引き上げてあげよう、という時点でそれはおごりである。

そんなの必要ない、納期に間に合い、要件を満たすことさえできればいいのである、といわれればそれまである。しかし、しかしなのである。絶えず新しい概念を吸収し、よりよい開発スタイルを身に着けることは結果的に品質の向上、納期の短縮にもつながるのではないか。だからTDDとかデザインパターンリファクタリングとか使っていこうよ、と遠吠えのように言い続けるしかないのである。

.NETで外部Webサービスを仲介するブリッジWebサービス

開発マシン

OS
WindowsXP Service Pack2
開発ソフト
Visual Studio 2005

ドメインWebサービスAJAXとかで呼び出して使うために.NETでブリッジ用のWebサービスを作った。外部のWebサービスをWebClientクラスのOpenReadメソッドで呼び出して結果をDataSetで返すというWebサービス。簡単簡単。

ところがこういう時に限って不可解なはまり方をしてしまう。
テスト用のコンソールアプリを作ってWebサービスを呼び出して実行。

System.Net.WebException はハンドルされませんでした。
Message="リモート サーバーに接続できません。"
Source="System"
StackTrace:
場所 System.Net.HttpWebRequest.GetRequestStream()
場所 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object parameters)
場所 TestNetDictionaryWSConsole.DictionaryService.NetDictionary.EnglishToJapanese() 場所 C:\Data\1_test\NetDictionary\TestNetDictionaryWSConsole\Web References\DictionaryService\Reference.cs:行 79
場所 TestNetDictionaryWSConsole.Program.Main(String
args) 場所 C:\Data\1_test\NetDictionary\TestNetDictionaryWSConsole\Program.cs:行 19
場所 System.AppDomain.nExecuteAssembly(Assembly assembly, String args)
場所 System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
場所 System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
場所 System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String
activationCustomData)
場所 System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
場所 System.Threading.ThreadHelper.ThreadStart()

なんですか、これは。ブリッジ用のwebサービスはlocalhostだから見えないはずはないのだけれど。。 何度か試すと、10回中1回くらい動作する。気持ち悪い。
ソリューションエクスプローラからasmxファイルを右クリック→ブラウザで表示、とすると、webサービスの説明(http://localhost:2647/○○.asmx)は正常動作。メソッド名をクリックした画面も正常動作。しかし、そこで[起動]ボタンを押してテストをすると、

Internet Explorer ではこのページは表示できません

となる。

イベントビューアを見てみる。

イベントの種類: エラー
イベント ソース: ASP.NET 2.0.50727.0
イベント カテゴリ: なし
イベント ID: 1000
説明:
aspnet_wp.exe (PID: 5120) が予期せずに停止しました。

なぜワーカープロセスが落ちている。。プログラム側から落とすことってできるのか??

IISサービス再起動してもダメ、マシン再起動してもダメ、Webサービスのタイムアウト長めにしても変わらず。VS2005はデバッグ時にポート番号使うのでファイヤーウォールOffにしてみたけどダメ。

しょうがない、別のOS、2003 ServerやVistaで試してみるか。うまく動いたらwebサービスとAJAXの連携の記事かけるかと期待していただけに残念。