かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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あたりで括っておくといいと思います。