2013年11月27日水曜日

docxのバイナリヘッダで疑問

ブラウザからポストされたファイル(docx)の形式をバイナリヘッダでチェックするシステムを扱っているのですが、
ユーザから「ファイルを送信できない」という問い合わせがありました。


通常docxファイルのバイナリヘッダは

50 4B 03 04 14 00 06 00


一方、ユーザから送られてきたファイルのバイナリヘッダは

50 4B 03 04 14 00 08 00


(参考)http://www.garykessler.net/library/file_sigs.html

このためチェックに引っかかって送信することができなかったのですが、
このユーザから送られてきたファイルは確かにWord文書として開くことができるのです。
上記「参考」のページを見るとユーザのファイルはjarファイルみたいですが・・・。
docxはzip圧縮、jar圧縮どちらも取り扱えるということなのでしょうか?

ファイル作成環境などは都合でこれ以上ユーザに突っ込んだ質問出来ないので不明です・・・。

2013年11月26日火曜日

秀丸でバイナリを確認する方法

「その他」→「コマンド一覧」→「ファイル系」→「バイナリモード」

以上メモまで。

2013年11月18日月曜日

【ASP.NET WebForms】aspxファイルとclassファイルの名前衝突

今さらな内容ですが、ASP.NET WebForms で開発する時にaspxファイルとクラスファイルのクラス名が衝突するとエラーになります。
名前空間が違えば衝突は起こりません。
(当然といえば当然ですが)


ただし、どこかでそのクラス(画像では「Sample」)を呼びださなければ、ビルドは通ります。
呼び出すと以下のようなエラーが出ます。



型 'Sample' は 'c:\Users\xxxxxx\AppData\Local\Temp\Temporary ASP.NET Files\root\d4b956ac\5fcc836a\App_Web_rnnubpny.dll' および 'c:\Users\xxxxxx\AppData\Local\Temp\Temporary ASP.NET Files\root\d4b956ac\5fcc836a\App_Code.zs4dnvnx.dll の両方に存在します。
意外とやってしまいがちなミスなので気をつけましょう。
と、自分に言い聞かせるメモ。

2013年10月19日土曜日

【Entity Framework】同時実行制御(楽観ロック)を行う (Edit画面にhiddenを追加する)

Entity Framework で同時実行制御を行うにはTimestamp属性をつけるだけでEFが勝手にやってくれます。
(Timestamp属性をつけておけば、ConcurrencyCheckはいらない・・・たぶん)

HogeEntity.cs
public class HogeEntity
    {
        public int HogeEntityId { get; set; }
        public string Name { get; set; }
        public string Value { get; set; }

        [Timestamp]
        [ConcurrencyCheck]
        public byte[] Timestamp { get; set; }
    }


Scaffoldingでコントローラーとビューを作った時はEdit画面にHiddenフィールドを追加してあげないとエラーになります。

Edit.cshtml
@Html.HiddenFor(model => model.Timestamp)

2013年9月10日火曜日

【ASP.NET Webforms】UpdatePanel上でJavaScriptを動かす

ASP.NET WebForms でサーバーサイドで生成したJavaScriptを走らせるには
ClientScript クラスの ClientScript.RegisterStartupScript メソッドなどを利用します。

が、UpdatePanel と一緒だと上記では動作しません。

ScriptManager クラスの ScriptManager.RegisterStartupScript メソッドなどを利用します。

以上、メモまで。