IISでホストされているWCFサービスを使用しています。
はまた、私は、ユーザーにいくつかのエラーを表示するようにT>「私はFaultException <をキャッチし、クライアント側では(T>
クライアントFaultException <)」にエラーを送信するために、障害の契約を使用しています。
WCFは、サーバ上で処理されない例外がスローされた場合、FaultException, を生成するので、クライアントはそれをキャッチしてユーザ「内部サーバエラー」メッセージを表示します。エンタープライズライブラリがWCFでFaultExceptionをスローしない理由
は、それから私は、WCFの例外遮蔽するためのエンタープライズライブラリ5.0を使うようになった、と問題次会いました。 FaultContractExceptionHandlerを使用するすべてのエラーをクライアントに伝えることは可能ですが、未処理の例外クライアントがCommunicationException の代わりに FaultExceptionの代わりに受信します。他のすべては大丈夫です。
私は(ExceptionShieldingのattibuteを削除する)方針を例外処理をオフにした場合、予想通り、クライアントはFaultExceptionsをキャッチ。
理由は何か分かりますか?
ありがとうございます。
PS:ここでは、内部例外のチェーンは次のとおりです。
て、CommunicationException - > WebException - >のIOException - >のSocketException
メッセージは、基になる接続が閉じられました「です。生きて維持することが予想された接続が切断されましたサーバ。"
の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);