NetDataContractSerializer を使用して、WCF 経由で例外をシリアル化しています。NHibernateADOException (クライアントには不明) が発生すると、FaultException が発生しました。残念ながら、これにより、内部例外メッセージが失われます。不明な例外 (またはその他の型) を指定された既知の型に逆シリアル化する方法はありますか、またはその問題を解決する方法は他にありますか?
2 に答える
includeExceptionDetailsInFaults
サービスの動作を true に設定したい。
この質問を参照してください:
これを web.config で設定して、例外を返すことができます。
<serviceDebug includeExceptionDetailInFaults="true"/>
このタグは、通常は次のように serviceBehavior タグ内に配置する必要があります。
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
詳細情報の例:
サーバー スタック トレース: em System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime 操作、ProxyRpc& rpc) em System.ServiceModel.Channels.ServiceChannel.Call(String アクション、Boolean oneway、ProxyOperationRuntime 操作、Object[] ins、Object[] outs 、TimeSpan タイムアウト) em System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall、ProxyOperationRuntime 操作) em System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage メッセージ)
[0] で再スローされる例外: em System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) em System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) em IMyService.GetDataOperation( RequestObterBeneficiario リクエスト) em MyServiceClient.GetDataOpration(RequestData リクエスト)
これにより、クライアントの詳細情報が返されます。開発中はこれが役立ちますが、サービスが本番環境に移行すると、サービスがデータベース名や構成などの機密データを送信できるため、これを保持しなくなります。