1

この質問は、「情報メッセージ」に関するもので、一貫した方法で「バックエンド」から「フロントエンド」に流れるようにします。簡単な質問は「どうやってやるの?」

バックグラウンド:

WCF を使用してバックエンド サービスを呼び出す Web アプリケーション。

バックエンド サービスでは、「メッセージ」が発生する場合があります。さて、この「メッセージ」の理由にはいくつかの理由が考えられますが、この議論では、データの一部が調べられ、それに関する情報を発信者に返す必要があると判断されたと仮定しましょう。

この「情報」メッセージは、保存中に表示される場合と、情報の取得中に表示される場合があります。繰り返しになりますが、ここで重要なのはメッセージではありませんが、さまざまなシナリオで返すべき情報メッセージがいくつかあるという事実です。

チームの観点からは、これらの「メッセージ」を常に標準的な方法で返したいと考えています。さて、過去には、この「標準的な方法」は、さまざまな人によってさまざまな方法で行われてきました。

以下にいくつかの可能性を示します。

1)すべての操作には、これらのメッセージを含む「ref」パラメータが最後にあります

2) すべてのメソッドはこれらのメッセージを返します...ただし、「取得」メソッドはメッセージではなく実際のデータを返す必要があると考えられるため、これは「保存」メソッドに対してのみ機能します。

3) すべてのメッセージ署名を何かで「汚染」しないように、呼び出しコンテキストを使用するいくつかのアプローチ。ただし、図に WCF を使用すると、状況が複雑になります。つまり、メッセージに戻ると、ヘッダーに移動しますか?

質問: 私の質問に戻りますが、上記のような「メッセージ」を、アプリケーションの層を介して、WCF を介して呼び出し元に返す他のユーザーはどのようにしていますか?

4

1 に答える 1

0

基本的にこれを行うには2つの適切な方法があると思います:

  1. InfoMessage : stringサーバーからの情報メッセージを保持できる (または保持できない) フィールドをすべての DataContracts に追加します。

  2. それをDataContractsに入れたくない場合は、メッセージがクライアントに戻る前にサーバーに入力するヘッダーを作成し、クライアントでそのヘッダーを検査して、存在する場合は取得できます

ヘッダーを WCF メッセージに自動的に追加するために、通常は MessageInspectors のメカニズムが使用されます。操作コントラクトの属性を使用して構成または追加できるコードの小さなチャンクで、一方の端にヘッダーを追加し、検査します。もう一方の端で、そのヘッダーの着信メッセージ (存在する場合はそれを抽出します)。

メッセージインスペクターの作成方法を示す、非常に優れたブログ投稿が多数あります。

それらは主にクライアントからサーバーに送られます。たとえば、クライアントはサービスの「メタ情報」を含むヘッダーを送信しますが、その逆でも問題なく機能します。

実装する 2 つの関連するインターフェイスを確認してください。

  • クライアント側のIClientMessageInspectorBeforeSendRequestには、実装するandAfterReceiveReplyメッセージがあります
  • サーバー側のIDispatchMessageInspectorAfterReceiveRequestには、実装するandBeforeSendReplyメソッドがあります。
于 2010-04-08T22:05:29.660 に答える