1

コントローラーからサービスレイヤーにユーザー情報を渡そうとしています。

IClientMessageInspectorsそしてIDispatchMessageInspectors、最も可能性の高い解決策のようです。

HTTP ユーザー エージェント メッセージ インスペクターの構築WCF メッセージ インスペクターの作成を行った後、メッセージ ヘッダーに情報を追加する方法とそれを読み取る方法についてかなりのアイデアが得られました。

私が理解できないのはこれです:

でユーザー情報を取得するにはどうすればよいIClientMessageInspectorですか?

コントローラの内部で、私は訴えていUser.Identity.Nameました。ただし、User オブジェクトはメッセージ インスペクタでは使用できません。この情報をメッセージ インスペクターに含める 1 つの方法は、コンストラクターに渡すことですが、MessageInspector オブジェクトを明示的に作成することはないため、ユーザー情報をコンストラクターに渡すにはどうすればよいでしょうか。

編集:最初の質問に対する答えが見つかりました。ユーザー情報は System.Threading.Thread.CurrentPrincipal.Identity.Name で取得できます。まだ第二部にこだわっています。

サービスメソッド内でユーザー情報を利用できるようにする方法は?

ヘッダーを調べて、DispatchMessageInspector のメッセージ ヘッダーからユーザー情報をフェッチすることはできますが、操作コントラクトの 1 つでこの情報を利用できるようにするにはどうすればよいでしょうか?

4

1 に答える 1

0

ユーザー情報に関するプロパティを持つクラスを作成します。このメソッドを使用してヘッダーのオブジェクトBeforeSendRequest(ref Message request, IClientChannel channel);メソッド セット値をオーバーライドしMessageHeader _messageHeader = MessageHeader.CreateHeader();、使用情報クラスのオブジェクトを配置します。

// Summary:
//     Creates a new message header with the specified data.
//
// Parameters:
//   name:
//     The local name of the header XML element.
//
//   ns:
//     The namespace URI of the header XML element.
//
//   value:
//     The content of the header to be created.
//
// Returns:
//     A System.ServiceModel.Channels.MessageHeader.
public static MessageHeader CreateHeader(string name, string ns, object value); 

サービス側では -- MessageHeaders クラスメソッドから取得 --

// Summary:
//     Finds a message header in this collection by the specified LocalName and
//     namespace URI of the header element.
//
// Parameters:
//   name:
//     The LocalName of the header XML element.
//
//   ns:
//     The namespace URI of the header XML element.
//
// Type parameters:
//   T:
//     The message header.
//
// Returns:
//     A message header.
public T GetHeader<T>(string name, string ns);
于 2012-06-26T14:14:44.117 に答える