Archive

Archive for 2011年10月

TFSでVB6のビルドって出来るんだ。。。

TFSのビルド関連を調べていて。VB6のソースコードをTFSでビルドしている記事を見つけた。まぁ、コマンドラインからビルド出来れば、ビルドスクリプトを組むことは出来るんでしょうが、やろうと思ったことがなかったので驚いた。

それはそうと、WFベースになったTFS2010のビルドスクリプトは、どこから手をつけていいのかわからないので、こういったハンズオン的な記事があると参考になる。

How to Build VB6 Apps with TFS Team Build 2010

#VB6って自動ビルドが必要なぐらい継続的にメンテナンス or 新規開発されているのかな。
#実はテキストエディターで修正してゲートチェクイン→ビルドな感じだったりして。

カテゴリー:雑記, TFS タグ: ,

そういえば、Session変数を利用すると、リクエストが直列化されるのね。

そういえば、昔@ITの掲示板で話題になったような記憶がある。。。すっかり忘れていました。

クライアントより複数の要求が来た場合の動作について

via なちゃさん

同一セッションになる要求は、同一スレッドで直列に処理されるようになっています。
同一セッションの処理が別スレッドで実行されないようにするためというのと、
セッション情報を外出しした場合にセッションへの書き込みを矛盾なく実行するため、
辺りが理由だったと思います。

[asp][.net] 同一セッションの振る舞い

ASP.NETは同一セッションかどうかを判断して、リクエストを直列化するようです。つまり、同一セッションで複数同時にリクエストを投げると、最初のリクエストの処理が終わるまで待たされるという具合です。

これは、セッション管理はInProcとStateServerがありますが、どちらを使っても矛盾しないように設計されているためだと思います。

WebFormのアプリにWinFormから時間のかかる処理を、非同期で投げてもシリアライズされちゃしょうがないね。サンプルまで作って検証してしまった。。。

こんなジェネリックハンドラーがあったとして、

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        Dim starttime = DateTime.Now.ToString("HH:mm:ss.fff")
        context.Session("アクセス時間") = starttime

        Dim key = context.Request("key")
        Dim message = context.Request("message")

        ' 時間のかかる処理
        System.Threading.Thread.Sleep(key * 1000)

        Dim endtime = DateTime.Now.ToString("HH:mm:ss.fff")

        context.Response.Write(String.Format("その{1}  Hello World!{0}秒後<br />", key, message))
        context.Response.Write(String.Format("{0}~{1}の間実行<br />", starttime, endtime))
        context.Response.Write(String.Format("セッションの中身[{0}]", context.Session("アクセス時間")))

        context.Session("アクセス時間") = endtime
    End Sub

こんな風にiframeで非同期に取得させると、サーバー側の処理がシリアライズされます。

    <iframe src="Handler1.ashx?key=2&message=1"></iframe>
    <iframe src="Handler1.ashx?key=2&message=2"></iframe>
    <iframe src="Handler1.ashx?key=2&message=3"></iframe>
    <iframe src="Handler1.ashx?key=2&message=4"></iframe>
    <iframe src="Handler1.ashx?key=10&message=5"></iframe>
    <iframe src="Handler1.ashx?key=5&message=6"></iframe>
    <iframe src="Handler1.ashx?key=3&message=7"></iframe>

開発者ツールでキャプチャしてみると、リクエストは非同期に投げているのに、サーバーでの処理が一個づつ処理されているのがわかります。

image

セッションにアクセスしている部分を削除すると(同一セッションで一度もセッションを利用しなければ)、IEのセッション数の上限に引っかかりますが、非同期に処理されるのが確認できます。

image

どうしようかなー。

カテゴリー:ASP.NET, Visual Basic タグ:

TFSビルドでMSB3216が出てビルドに失敗した。

ビルド定義を作っていたら、何故かうまく通らないプロジェクトがありました。

ビルドのログを見ると、コンパイルしたアセンブリをレジストリーに登録しようとして、MSB3216のエラーが出ているみたいです。なぜレジストリー登録??

。。。。。。あっ、そういえばビルドログにBC42102の警告も出ていたような。COMに公開してライブラリーを使いたいっていうので、Visual Studioのビルド時にCOMに登録する機能を使っている???

image

使っていました。デバック時はこいつがあると楽ですが、手作業でもCOMへの公開はできるので、TFSビルドに組み込む場合は、「COM相互運用機能の登録」をOFFにしときましょう。BC42102の警告自体は特に問題は無いのですが、重要な警告が埋もれてしまうのもいやなので、プロジェクトファイルに42102の警告を抑止する定義も入れておきました。

カテゴリー:プログラミング, TFS タグ: ,

さよならMVP

ココ数年、まともな活動と言ったら月一の連載で、それもしばらく書いていないので当たり前ですが、今年のMVPはダメだったようです。
短いようで、初受賞が2006年だったので、5年間なかなか味わえない体験をサせてもらいました。

まぁのんびりと、また機会があったら応募しようかと思います。
しばらくはのべーーんとします。でもVS12というか、WinRTと非同期はがっつり触りたいなー。

カテゴリー:雑記 タグ: ,