0

一握りの Web サービスを参照する Silverlight プロジェクトがあります。各 Web サービス メソッドは、 と呼ばれる標準の応答ラッパー オブジェクトを返しますGenericWebResponse。このクラスには、呼び出しが成功したかどうかに関する情報と、失敗した理由を示すことができなかった場合のステータス コードが含まれています。よくあるのは、認証チケットの有効期限が切れているか、ユーザーがアクションを実行する権限を持っていないことです。

とにかく、Web サービスの呼び出しが失敗するたびに、同じように処理したいと考えています。ログエントリを作成したり、何か問題が発生したことをユーザーに通知したりしたい.

複数のサービスがあるため、各サービス参照は同じGenericWebResponseクラスの新しいインスタンスを生成します。したがって、私は と を持ってProductService.GenericWebResponseおりOrderService.GenericWebResponse、明らかに .NET はそれらを完全に別のクラスとして扱います。

これらのオブジェクトに対して一般的にコードを記述する方法が必要です。応答が常に同じであることはわかっていますが、.NET はそれを知りません。わかりました。しかし、これらのオブジェクトに対してコードを記述して、サービスごとに新しいバージョンの障害ログ コードを記述する必要がないようにする方法はありますか?

4

3 に答える 3

1

プロキシで生成された応答タイプごとに部分クラスを作成できます。これは、定義した共通のインターフェイスを実装し、実装では、具体的なプロキシで生成されたタイプに転送します。T4では、手動で行うのではなく、自動生成する方法があるかもしれません。

サービスを定義し、インターフェイスタイプにアクセスできる場合は、別の方法でプロキシを作成できます。動的プロキシを使用するか、独自のT4テンプレートを使用します。

http://wcfdynamicclient.codeplex.com/

http://intellecting.net/blog/post/Using-T4-To-Generate-WCF-Client-Proxy.aspx

過去にDynamicProxyを使用したことがあります...2つの利点があります....チャネル障害が発生したときにプロキシを使用できなくなったときの微妙な問題を解決します....また、サービスインターフェイスが流動的である開発中/進化しています....毎回サービスリファレンスを更新し続ける必要はありません....サービスのC#インターフェイスを使用すると、ビルド時に同期を維持できます。

于 2012-07-27T19:52:39.327 に答える
0

フィールドがまったく同じであることがわかっている場合、1 つのオプションは、リフレクションを使用してプロパティ値を抽出することです。

于 2012-07-27T19:56:19.773 に答える
0

サービスが .NET サービスの場合、[サービス参照の追加] を使用するときに、[詳細設定] をクリックし、[タイプの再利用] を選択できます。元の型を含むプロジェクトを参照する必要がありますが、参照ごとに実際の型を使用する必要があります。

于 2012-07-27T20:50:19.913 に答える