かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

WCF Data Servicesで、詳細なエラー情報を出したい

そんなことってありますよね?デフォルトだと、エラーが出たからサーバーのログ見てねみたいな素っ気ないエラーしか出ないので、何の役にも立ちません。もちろん、本番では、この動作が理想的です。サービスを攻撃してくる人にスタックトレース見せたりするなんてもってのほかです!

ですが、開発時は話は別です。やり方は簡単です。

#if DEBUG
    // 例外の詳細を含める
    [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
#endif
    public class MyDataService : DataService<EduContext>, IServiceProvider, IDataServiceActionProvider, IDataServiceUpdateProvider2
    {
        public static void InitializeService(DataServiceConfiguration config)
        {
#if DEBUG
            // これもポイント
            config.UseVerboseErrors = true;
#endif
            config.SetEntitySetAccessRule("*", EntitySetRights.All);
            config.SetServiceActionAccessRule("*", ServiceActionRights.Invoke);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
        }
}

DataServiceConfigurationのUseVerboseErrorsをtrueにするのとServiceBehaviorAttributeのIncludeExceptionDetailInFaultsをtrueにするだけです。デバッグの時しかいらないので、#if DEBUGあたりで括っておくといいと思います。