WCFの接続エラーから原因を特定する方法
.NET Framework 4.5でWCFサービスと、それを利用するクライアントアプリケーションを作っています。
WCFサービスの引数や戻り値に使用するカスタムクラスや列挙型で、DataMember
属性とかEnumMember
属性を付け忘れることがあるのですが、このときにクライアント側で発生する例外のメッセージから原因を特定するのが難しく困っています。
戻り値がカスタムクラスで、そのいずれかのプロパティで使用しているenum
のメンバーにEnumMember
属性を付け忘れると、次のようなエラーが出ます。
Exceptionの型:System.ServiceModel.CommunicationException
メッセージ:基礎になる接続が閉じられました: 維持される必要があった接続が、サーバーによって切断されました
※実際にはTargetInvocationException
が発生しており、そのInnerException
に上記のCommunicationException
が入っていた。
このメッセージから、データコントラクト周りの属性付け忘れの可能性があることまでは、経験として覚えました。
しかし、どこで何を付け忘れているのかという具体的な原因は、今のところひたすらコードを目視で精査している状況です。
もう少しデバッグをしやすくする手段はないものでしょうか?
例外をToStringした結果を記載しておきます。
System.Reflection.TargetInvocationException: 呼び出しのターゲットが例外をスローしました。 ---> System.ServiceModel.CommunicationException: 基礎になる接続が閉じられました: 維持される必要があった接続が、サーバーによって切断されました ---> System.Net.WebException: 基礎になる接続が閉じられました: 維持される必要があった接続が、サーバーによって切断されました ---> System.IO.IOException: 転送接続からデータを読み取れません: 既存の接続はリモート ホストに強制的に切断されました。。 ---> System.Net.Sockets.SocketException: 既存の接続はリモート ホストに強制的に切断されました。
※以下スタックトレースは省略