かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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