[解決済み] すべてのWCF呼び出しにカスタムHTTPヘッダを追加するには?
質問
Windows サービスでホストされている WCF サービスがあります。このサービスを使用するクライアントは、サービスメソッドを呼び出すたびに識別子を渡す必要があります(その識別子は、呼び出されたメソッドが何をすべきかに重要であるため)。私は、この識別子をWCFヘッダ情報に何らかの形で配置するのが良いアイデアだと思いました。
もしそれが良いアイデアなら、どうすればヘッダー情報に識別子を自動的に追加できるでしょうか。つまり、ユーザーがWCFメソッドを呼び出すたびに、識別子が自動的にヘッダーに追加されるようにする必要があります。
UPDATEしてください。 WCFサービスを利用するクライアントは、WindowsアプリケーションとWindows Mobileアプリケーション(Compact Frameworkを使用)の両方です。
解決方法は?
これの利点は、すべての通話に適用されることです。
を実装したクラスを作成します。 IClientMessageInspector . BeforeSendRequest メソッドで、送信メッセージにカスタム・ヘッダを追加します。 それは以下のようなものです。
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
HttpRequestMessageProperty httpRequestMessage;
object httpRequestMessageObject;
if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject))
{
httpRequestMessage = httpRequestMessageObject as HttpRequestMessageProperty;
if (string.IsNullOrEmpty(httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER]))
{
httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER] = this.m_userAgent;
}
}
else
{
httpRequestMessage = new HttpRequestMessageProperty();
httpRequestMessage.Headers.Add(USER_AGENT_HTTP_HEADER, this.m_userAgent);
request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
}
return null;
}
次に、メッセージインスペクタをクライアントランタイムに適用するエンドポイントビヘイビアを作成します。 ビヘイビアは、属性またはビヘイビア拡張要素を使用した設定によって適用することができます。
以下は、素晴らしい 例 HTTP user-agent ヘッダをすべてのリクエストメッセージに追加する方法です。 私はいくつかのクライアントでこれを使用しています。 を実装することで、サービス側でも同じことができます。 IDispatchMessageInspector .
このようなイメージでしょうか?
更新しました。 こんなの見つけた リスト コンパクトフレームワークでサポートされているWCFの機能。 メッセージインスペクタは「Channel Extensibility」に分類されると思うのですが、この記事によると は はコンパクトフレームワークでサポートされています。
関連
-
[解決済み】コレクションが変更され、列挙操作が実行されないことがある。
-
[解決済み] デフォルトのエンドポイント要素が見つからない
-
[解決済み] REST API / ウェブサービスを保護するためのベストプラクティス [終了しました]。
-
[解決済み] WCFサービスのREST / SOAPエンドポイント
-
[解決済み】WCFクライアント `using` ブロックの問題に対する最良の回避策は何ですか?
-
[解決済み】WCFとASMXのWebサービスの違いは何ですか?
-
[解決済み】Windows 8のIISでWCFサービスを提供できない。
-
[解決済み】WCFサービスからきれいなJSONを返すにはどうすればいいですか?
-
[解決済み] WcfTestClient.exe (Visual Studioの一部)はどこにありますか?
-
[解決済み] すべてのWCF呼び出しにカスタムHTTPヘッダを追加するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] デフォルトのエンドポイント要素が見つからない
-
[解決済み] (413) リクエストエンティティが大きすぎる|uploadReadAheadSize
-
[解決済み] w3wp.exeとは何ですか?
-
[解決済み] REST API / ウェブサービスを保護するためのベストプラクティス [終了しました]。
-
[解決済み] WCFサービスのREST / SOAPエンドポイント
-
[解決済み】Windows 8のIISでWCFサービスを提供できない。
-
[解決済み】WCFサービスからきれいなJSONを返すにはどうすればいいですか?
-
[解決済み] WcfTestClient.exe (Visual Studioの一部)はどこにありますか?
-
[解決済み] すべてのWCF呼び出しにカスタムHTTPヘッダを追加するには?
-
[解決済み] WCFサービスのタイムアウト値を増加させる