1

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);
4

1 に答える 1

0

これは Enterprise Library の問題のようです。この作業項目を参照してください。

于 2012-01-21T05:16:42.897 に答える