21:24ちょっと前から気になっていたので、ネットで色々調べてみた。Notationの略で、JavaScriptとの親和性が非常に高いデータ交換フォーマットである。(→日本語翻訳ページ)JSONは、前回の記事で書いたオブジェクトの表記方法を応用している。種を明かせば、例のオブジェクト表記方法を文字列化してデータのやり取りを行い、JavaScriptのeval関数でJavaScriptコードに変換(=オブジェクトに変換)するという仕組み。eval関数にJSONを渡す際は、JSONを文字列"()”で囲む必要がある。気をつけなければいけない点がいくつか。プロパティ名(リンク先に倣えば"名前")は、文字列として記述すること。オブジェクト(リンク先に倣えば”値”)には、数値,Boolean値,文字列,null参照、またはこれらのみで構成される配列,オブジェクトのみ許可されている。当然だけど関数はダメ。eval関数の性質上、これらを無視してもオブジェクトに変換することはできるが、極端な話それはJSONとは言えない。ちなみに、JSONファイルの拡張子は.jsonである。JSON形式のファイルを記述する例を以下に記述する。50]}}Hoge.jsonをJavaScriptコードで扱う例を以下に記述する。"¥r¥n";}alert(message);}なお、eval関数は文字列をJavaScriptのコードに変換(して実行)する関数であるため、受け取ったJSONの中身が実は危険なJavaScriptコードを文字列化したものであったりしても、そのままコードが実行されてしまう。parserを使用した方が安全である。stringifierも含まれている。[オブジェクト]という形式で記述することによりオブジェクトを表すことができる。プロパティを複数用意する場合は、カンマで区切る。オブジェクトは通常どおり、数値やBoolean値ならそのまま記述、文字列ならダブルクォーテーションで囲んで記述、配列なら[]の中にカンマ区切りでオブジェクトを記述、関数ならfunction(){}の形式で記述する。...}の形式のオブジェクトも当然含ませることができる。14:23JavaScriptでの正規表現のテストページを作ってみた。Debuggerをインストールしておく必要がある。Debuggerは以下のリンク先からダウンロードできる。チェックを外しておく必要がある。Debuggerにより、自分が開発しているASP.NETプロジェクトのJavaScriptはもちろん、それ以外のサイトのJavaScriptもデバッグすることができ、ステップ実行,ブレークポイント,ウォッチ,クイックウォッチなど様々なデバッグ機能が使用できる。自分が開発しているASP.NETプロジェクトのJavaScriptをデバッグするには、まずサーバーコードをデバッグする時と同じようにデバッグ開始を行う。これにより、ブレークポイントの貼られたJavaScriptコードに到達した時に中断されるようになる。ブレークポイントを貼るのは、デバッグ開始を行う前・後どちらでもよい。実行すれば、次にJavaScriptコードが実行されるタイミングで一時中断させることができる。02:34HTMLからJavaScriptファイル(以降、jsファイル)を利用する場合、以下のように記述する。src="Hoge.js"></script>jsファイルが別のjsファイルを利用する場合は、通常、以下のように記述する。src="Hoge.js"></script>これで問題はないのだが、どうせならjsファイル自身に、インクルードのためのコードを含めてしまいたい。JavaScriptにそのような構文は用意されていない。そこでどうするかというと、以下のように、”別のjsファイルをインクルードするためのHTMLのタグ”を出力するコードをjsファイルに記述すればよい。src=\"/WebSite1/Foo.js\"></script>");この時、scriptタグのsrc属性に指定するパスを絶対パスにしておけば、Hoge.jsを利用するHTMLがHoge.jsと同じ階層のディレクトリにあろうが違う階層のディレクトリにあろうが関係なく、正常に動作する。このHoge.jsを利用するHTMLでは、Hoge.jsのインクルードのみ行えばよい。2.0だと、System.Threading.Threadの基本クラスがSystem.Runtime.ConstrainedExecution.CriticalFinalizerObjectっていうクラスになってて、なんだこれ?と思って調べようと思ったら、どうもCERってのが絡んでるらしく、気になるので近い内にちゃんと勉強しとこう、っていうメモ。18:20Webサービスとして公開するクラスは、WebServiceクラスを継承させる。Webサービスは、メソッドのみを公開できるが、公開するメソッドはアクセス修飾子がpublicで更にWebMethodAttributeが付加されている必要がある。Webサービスを他のプロジェクトから利用するには、利用するプロジェクトにWeb参照を追加してやればいい。プロジェクトにWeb参照を追加した後にWebサービスが更新された場合は、Web参照を更新する必要がある。以下に、Webサービスを利用するサンプルコードを示す。HogeService();hoge.Method1();hoge.Method2();}一見すると普通のクラスと同じように扱えるように見える。Webサービスの挙動は普通のクラスとは大きく異なる。ユーザーがHogeServiceに定義したコンストラクタは、HogeServiceのインスタンス化の時点では呼び出されない。HogeServiceのWebメソッドにアクセスするたびに、ユーザーが定義したコンストラクタが呼び出される。(更に、WebサービスのDispose()メソッドも呼び出される。)つまり、WebメソッドにアクセスするたびにWebサービスは全く別のインスタンスとなってしまうのだ。このような挙動を取るかというと、ここで利用しているHogeServiceクラスは、Webサービス本体ではなく、Webサービスにアクセスするためのプロキシクラスだからである。プロキシクラスは、Web参照の追加を行うと自動で生成される。プロキシクラスには、Webメソッドを呼び出すためのメソッド(Webメソッドと同名)が用意される。このメソッドは、Webサービスに対してSOAPプロトコルでWebメソッドの処理要求をする。Webメソッドの処理要求を受信したWebサービスは、(Webサービスが配置されている場所で)インスタンス化→Webメソッド実行→Dispose()実行を行い、プロキシクラスに対してSOAPプロトコルで処理結果を返却する。処理結果を受け取ったプロキシクラスのメソッドはその処理結果を返却する。プロキシクラスには、Webメソッドを非同期に呼び出すためのメソッドも用意される。)ここ4日間くらい更新してなかったから、いつから備わったのかわかんねーwとりあえずこの記事には”ブログ”と”タグ”と”分類”の3つをタギングしてみたお。11:59前に少し書いたが、ハンドルされなかった例外をGlobal.asaxのApplication_Errorでthis.Server.GetLastError()で取得すると、HttpUnhandledExceptionにラップされている。ここで取得される例外が必ずHttpUnhandledExceptionという訳ではない。いうのも、アプリケーションではなくASP.NETが発生させた例外に対してはHttpUnhandledExceptionがスローされないからである。Webフォームに対して危険な文字列を送信すると、HttpRequestValidationExceptionがASP.NETからスローされる。この例外はWebフォームのPage_Errorでハンドルすることができるのだが、ここでハンドルしなくてもHttpUnhandledExceptionはスローされない。ASP.NETが発生させる例外は、全てHttpExceptionである。HttpRequestValidationExceptionはもちろんのこと、HttpUnhandledExceptionもHttpExceptionの派生クラスであり、ASP.NETが発生させる例外の一つである。コールバックでは、System.Web.UI.Control派生クラスにICallbackEventHandlerインターフェイスを実装させる必要がある。System.Web.UI.Control派生クラスなのでWebフォームでもWebユーザーコントロールでもいい。Webページに実装させてしまうと他のページで使い回しできない。汎用性を考えるのなら、Webユーザーコントロールに実装させる。Webユーザーコントロールにはロジックのみを実装し、HTML要素は配置しない。(ロジックのみにすることで、使い方が縛られず、色々なコントロールと組み合わせられる。コールバックのロジックを汎用的に提供するWebユーザーコントロールの作成方法を記述する。]まず、以下の5つのフィールドを用意する。処理を開始するクライアント関数の名称フィールド処理結果を実際に受け取るクライアント関数の名称フィールド処理結果を受け取るクライアント関数(利用側が用意する関数)の名称フィールド例外発生時に例外メッセージを受け取るクライアント関数(利用側が用意する関数)の名称フィールド処理結果フィールドフィールド1は、文字列"Begin"とthis.UniqueIDを結合させた文字列となる。フィールド2は文字列”End”とthis.UniqueIDを結合させた文字列となる。フィールド1とフィールド2が示すクライアント関数は、このコントロールのascxファイルに定義する。フィールド3とフィールド4が示すクライアント関数は、初期値がnullで、このコントロールを利用する側が独自に用意することになる。次に、以下の4つのプロパティを用意する。フィールド1の読み取り専用プロパティフィールド2の読み取り専用プロパティ(可視性はプロテクト)フィールド3のプロパティフィールド4のプロパティプロパティ1とプロパティ2は読み取り専用である。プロパティ2は可視性をプロテクトにすること。プロパティ3とプロパティ4は、フィールドの説明にも書いたように、このコントロールを利用する側が値を設定することとなる。次に、以下のイベントハンドラを用意する。InitイベントのハンドラInitイベントのハンドラでは、フィールド1とフィールド2の初期化を行う。Loadイベントではないので注意すること。最後にIClientCallbackEventHandlerインターフェイスの各メソッドを実装する。以下に、コード例を記述する。コールバックでHogeを取得するためのコントロール。このコントロールに用意されている、処理を開始するクライアントスクリプト関数の名称の名称。このコントロールに用意されている、処理結果を受け取るクライアントスクリプト関数の名称。処理結果を受け取るクライアントスクリプト関数の名称。例外発生時に呼び出されるクライアントスクリプト関数の名称。このコントロールに用意されている、処理を開始するクライアントスクリプト関数の名称を取得する。このクライアントスクリプト関数は、一つの文字列型の引数を受け取る。引数には取得したいHogeの名称を指定する。このコントロールに用意されている、処理結果を受け取るクライアントスクリプト関数の名称を取得する。処理結果を受け取るクライアントスクリプト関数の名称を取得または設定する。このクライアントスクリプト関数には、一つのHoge型の引数を用意すること。引数には取得したHogeが渡される。例外発生時に呼び出されるクライアントスクリプト関数の名称を取得または設定する。このクライアントスクリプト関数には、一つの文字列型の引数を用意すること。引数には例外メッセージが渡される。初期化イベントのハンドラ。コールバックイベントの結果を返す。コールバックイベントを処理する。XMLデータに変換後、resultフィールドに格納する。]クライアントサイドには、以下の2つの関数を用意する。this.UniqueID)を関数名とする。この関数は、this.Page.ClientScript.GetCallbackEventReferenceメソッドの戻り値で得られるスクリプト関数を実行する。GetCallbackEventReferenceメソッドのclientErrorCallback引数にはプロパティ4の値を渡す。this.UniqueID)を関数名とする。コールバックの処理結果をサーバーから取得し、プロパティ3に指定されているクライアント関数を呼び出す。この時、必要なら処理結果をわかりやすい形式に変換(XMLデータを、JavaScriptで定義したラッパークラスに変換する等)してからプロパティ3のクライアント関数に渡す。以下に、コード例を記述する。%>}</script>作成したWebユーザーコントロールを利用するには、以下のような使い方をする。コールバックの開始関数は、ClientBeginFunctionで取得する代わりに、コントロールのIDの先頭に"Begin"を結合した文字列を直接記述しても良い。00:28System.Diagnostics.Traceは、TRACEシンボルが定義されている場合のみ使用できる。Windowsアプリケーションプロジェクトやクラスライブラリプロジェクトの場合、コンパイル時にTRACEシンボルを定義するようデフォルトで設定されている。ASP.NETの場合、TRACEシンボルはデフォルトで定義されない。ASP.NETでSystem.Diagnostics.Traceを使用したい場合は、コンパイル時にTRACEシンボルを定義するよう、以下の記述をWeb.Configのconfigurationセクションに追加してやる必要がある。PublicKeyToken=b77a5c561934e089"warningLevel="1"/></compilers></system.codedom>このように、compilerセクションのcompilerOptions属性にTRACEシンボルを定義するようにコンパイルオプションを指定する。language属性,extension属性,type属性は省略できない。これで、ASP.NETでSystem.Diagnostics.Traceを使用できるようになる。-ブログ内検索カウンターアクセスカウンターおすすめプロフィールAuthor:よこけん性別は男です。生年月日は1984年2月頃です。社会人は2004年4月頃からやってます。C#は2004年10月頃からやってます。このブログは2006年7月頃からやってます。アプリケーションリンクopus-i商用可・加工可で、綺麗な素材を提供していらっしゃいます。紹介していらっしゃいます。中心に扱っていらっしゃいます。コマンドレットをまとめたスナップインです。クラスライブラリを作ってみました。最近の記事ブログ移転しました。返事を返せない場合があります。