私はWCFサービスに取り組んでいます。
OperationContractsの1つは、パラメーターの1つとして複合型を必要とします(具体的にはSystem.Exception)。
新しい例外を作成した場合にクライアントがプロキシを呼び出すとき。
System.Exception toNewException = new Exception();
そしてそれを送ってください...それはかなりうまく機能します。
しかし、タイプ'System.Web.HttpUnhandledException'の例外を送信しようとすると。不明なタイプでサービスに障害が発生しました。(以下のエラーを参照)
パラメータ http://tempuri.org/:Exceptionをシリアル化しようとしたときにエラーが発生しました。InnerExceptionメッセージは「タイプ」「System.Web.HttpUnhandledException」であり、データコントラクト名は「HttpUnhandledException:http://schemas.datacontract.org/2004/07/System.Web」ではありません。静的に不明なタイプを既知のタイプのリストに追加します。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプのリストにそれらを追加します。詳細については、InnerExceptionを参照してください。
既知のtypes属性を調査しましたが、これまでのところ、役立つ例やドキュメントは見つかりませんでした。
どんな種類の例外でも受け入れ/動作するようにクライアント/サーバーを変更する方法についての良い情報源を知っている人はいますか?
私の質問をもう少し詳しく説明すると...エラーは次のように述べています。「静的に不明なタイプを既知のタイプのリストに追加します」。これが、system.exceptionのような複雑な.netオブジェクトに対して具体的に行う方法を知りたいことです。
アップデート
次の変更を試みました。
[OperationContract]
[ServiceKnownType(typeof(HttpUnhandledException))]
void LogError(Exception Exception, Boolean LogInternalFlag, int UserId, int ApplicationId, int SeverityId);
そして、私は別のエラーを受け取ることになりました!
パラメータ http://tempuri.org/:Exceptionをシリアル化しようとしたときにエラーが発生しました。InnerExceptionメッセージは「タイプ」「System.Collections.ListDictionaryInternal」で、データコントラクト名は「ArrayOfKeyValueOfanyTypeanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays」ではありません。静的に不明なタイプを既知のタイプのリストに追加します。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプのリストにそれらを追加します。詳細については、InnerExceptionを参照してください。
少なくとも例外を除いたエラーは理にかなっています...これが何を意味するのかまったくわかりません。
また、例外をxmlとしてシリアル化し、文字列として渡すことも試みました...残念ながら、それは思ったほど単純ではなく、シリアル化を考慮に入れるための多くの考慮事項があります。例外と内部例外の。