IIS でホストされている WCF サービスを使用しています。
また、エラー コントラクトを使用してクライアントにエラーを送信します ( FaultException<'T> ) 。クライアント側では、 FaultException<'T>
をキャッチしてエラーをユーザーに表示します。
サーバーで未処理の例外がスローされた場合、WCF はプレーンなFaultExceptionを生成するため、クライアントはそれをキャッチし、ユーザーに "Internal Server Error" メッセージを表示します。
その後、WCF Exception Shielding に Enterprise Library 5.0 を使用し始めたところ、次の問題が発生しました。FaultContractExceptionHandlerを使用すると、すべてのエラーをクライアントに伝えることができますが、未処理の例外の場合、クライアントはFaultExceptionではなくCommunicationExceptionを受け取ります。他のすべては正常に動作します。
例外処理ポリシーをオフにした場合 (ExceptionShielding 属性を削除)、クライアントは期待どおりにFaultExceptionsをキャッチします。
何が原因か分かりますか?
ありがとう。
PS: 内部例外のチェーンは次の
とおり
です。
Web.config
<add name="ServiceException Policy">
<exceptionTypes>
<add name="ServiceLogicException" type="LopService.Contracts.ServiceLogicException, LopService.Contracts, Version=1.0.0.1725, Culture=neutral, PublicKeyToken=null"
postHandlingAction="ThrowNewException">
<exceptionHandlers>
<add type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
faultContractType="LopService.Contracts.ServiceLogicFaultContract, LopService.Contracts, Version=1.0.0.1725, Culture=neutral, PublicKeyToken=null"
name="Fault Contract Exception Handler" />
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
サービスクラス
[ExceptionShielding("ServiceException Policy")]
public partial class LopSoapService
{...
運営契約
[OperationContract]
[FaultContract(typeof(DataValidationFaultContract))]
[FaultContract(typeof(ServiceLogicFaultContract))]
int CreateUser(UserDto userDto, IEnumerable<ClaimRecordDto> claimRecords);