0

私は WCF を初めて使用し、WebHttpBindingバインディングを使用してデモ WCF プロジェクトを構築しようとしています。

プロジェクトは正常に動作しますが、障害例外の概念に固執しています。以下は、エラー例外を生成するために使用しているコードですが、クライアント側では(400) Bad Requestエラーが発生し、InnerException は null です。どこが間違っていますか?

    public DataTable GetCreativesData(string id,string type)
    {
        try { 
        DataAccess da = new DataAccess();
        string qryStr = @"select * from dbo.tbMyTable";
        if (type != null && type != "")
            qryStr += " WHERE1 type='"+type+"'";
        DataTable dt = da.GetDataTable(qryStr);
        return dt;
        }

       catch (FaultException ex) {
            throw new FaultException("Improper Query");
        }
     }
4

1 に答える 1

0

400 エラーは、ユーザーが提供したものに何か問題がある可能性があることをユーザーに示しているため、フォルトの例外としては正しいです。

を発生させても内部例外はありません。これはFaultException、のコア概念はFaultExceptionテクノロジ間で機能すること (相互運用性) であり、内部例外の概念は .NET に非常に固有であるためです。

Exception本当にダウンを渡したい場合は、一般的なパラメーターを指定できるFaultExceptionを使用して、それを に設定できますException。次に、それを作成して上げます。

覚えておくべきもう 1 つの側面は、エラーの処理方法です。コードでは、まったく新しい例外をスローしています。つまり、変数 ex 内のすべての情報が失われます。何かを隠すつもりがない限り、これを試すことができます

catch (FaultException ex) 
{
    throw;
}

このオプションは、オリジナルFaultExceptionを取得して再度作成するため、その中のすべての情報が保持されます。

最後に、あなたの質問の外で、その SQL は私を怖がらせます - SQL インジェクション攻撃に対して脆弱なように見えます- ちょうどあなたがチェックしたいものです.

于 2014-11-25T05:37:39.013 に答える