2011-09-11 13 views
4

FaultContract属性をRIA Servicesで使用すると、Silverlightの例外の一部として追加情報を渡すことができますか?RIAサービスとFaultContract

+0

私は同じ質問をしています...まだ何かを見つけましたか? – sebagomez

答えて

2

私は逆コンパイルされたRIAサービスコードを狩りに行きました。クライアントに送信されるエラー情報を大幅に変更することはできないようです。

DomainServiceのOnError()メソッドをオーバーライドすることはできますが、カスタム例外タイプであっても、任意の情報を戻すことはできません。

理由はDomainServices.Hosting.QueryProcessorクラスの例外処理の中に埋め込まれています。

ドメイン操作で未処理の例外が発生した場合、その操作は破棄され、最終的にはFaultException()がスローされます(ネイティブ処理のWCF)。

Unfortuantely、DomainServiceFaultクラスが...それが唯一のいくつかのプロパティを持っている...非常に軽量である

public class DomainServiceFault 
{ 
    public int ErrorCode { get; set; } 
    public string ErrorMessage { get; set; } 
    public bool IsDomainException { get; set; } 
    public string StackTrace { get; set; } 
    public IEnumerable<ValidationResultInfo> OperationErrors { get; set; } 

    public IEnumerable<ValidationResult> GetValidationErrors() 
    {} 
} 

、これらはそのようServiceUtility.CreateFaultExceotion()に移入されています

DomainServiceFault detail = new DomainServiceFault(); 
<snip/> 
detail.ErrorCode = domainException.ErrorCode; 
detail.ErrorMessage = ServiceUtility.FormatExceptionMessage((Exception) domainException); 
detail.IsDomainException = true; 

if (current != null && !current.IsCustomErrorEnabled) 
    detail.StackTrace = domainException.StackTrace; 

return new FaultException<DomainServiceFault>(detail, new FaultReason(new FaultReasonText(detail.ErrorMessage ?? string.Empty, CultureInfo.CurrentCulture))); 

それは価値があります検証のエラーではなく、例外の場合には、OperationErrorsは入力されません。

これはすべて、私がDomainServiceエラーハンドラにカスタム例外情報をラップまたはアタッチすることはできないと考えていることです(これは本当に残念です)。

+0

この小さな欠点はすべて、RIA Servicesフレームワークが現実の世界のシナリオのために準備が整っていないように感じます。 ありがとうございました! – sternr

+0

@sternr私たちはしばしばそう感じる。私は、RIA Servicesは基本的なデータ・モデルとアプリケーションでうまく機能すると思います。非常に詳細で複雑なアプリケーションの場合、苦労し始めます。 –

関連する問題