トップ «前の日記(2010-12-21) 最新 次の日記(2010-12-23)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2010-12-22

_ WCF Data Serviceでのエラー処理

エラー処理のうち、おそらく予想通りに動作するのは、返されたETag(カラムの同時実行制御属性をFIXEDにすると__metadataフィールドにuriやtypeと一緒にオブジェクトとしてパッケージされる)をIf-Matchヘッダで指定した場合のHTTPステータス(precondition not match)だけ(etagをオブジェクトに設定して送信すると500になってメッセージが「ETagはIf-Matchに入れろ」となるけど、これもなんだかなぁな仕様)。ほとんどすべてのエラーが単純にInternal Server Errorになるので、普遍的に発生するKEY重複みたいなものは検出できない。

無理矢理がんばるとすると、Serviceのエラーハンドラで、Inner Exceptionにラップされた元のSQL例外を拾って、それをMessageボディに入れてやってクライアントで検出するしかない(何をやろうがHTTPステータスコードは500になってしまう)。

と、実にくせがある。

くせがあると言えば、PUTはすべてのカラムが対象になり、省略したカラムにはNULLが入る。突然ほとんどからっぽになってびっくりした。

で、指定したカラムだけを更新するには、MERGEというメソッドを使う。これは明らかに馬鹿な仕様なので、現在出ているCTP1では、PATCHに直している(というか、直しているのではなくPATCHを「追加」しているだけなことを祈る)。というか、WCF Data Serviceの連中はHTTPのプロトコルを知らないんじゃないか(で、誰かが指摘してあわててPATCHを持ってきたとか。というか、PUTでそう振る舞えば良いのになぁ)。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|

ジェズイットを見習え