0

WCFクライアントメッセージインスペクターを使用して、httpヘッダーから相関ID(およびその他の値)を読み取るソリューションがあります。

次に、この値をSystem.ServiceModel.OperationContext.Current.IncomingMessagePropertiesに格納します。

OperationContext.Currentは、現在のスレッドの実行コンテキストです。

ただし、Jon Skeetの回答に基づいて、次の質問があります。IISの要求は単一のスレッドで実行されますか? asp.netリクエストはスレッド間をジャンプします。

これはまさに私たちが経験していることであり、リクエストの実行中に相関IDが変化します。

スタックの下位にアクセスできるように、httpリクエストの値を保存できる場所はありますか?

4

2 に答える 2

2

このコレクションを使用しSystem.Web.HttpContext.Current.Itemsて、MessageInspectorで取得した値を格納しました。例

    public void AfterReceiveReply(ref Message reply, object correlationState)
    {
        var httpResponse =
            reply.Properties[HttpResponseMessageProperty.Name] 
                   as HttpResponseMessageProperty;

        if (httpResponse != null)
        {
            string cookie = httpResponse.Headers[HttpResponseHeader.SetCookie];

            if (!string.IsNullOrEmpty(cookie))
            {
                System.Web.HttpContext.Current.Items.Add("MyCookies", cookie);
            }
        }
    }

スタックの他の場所では、同じキーを使用してItemsコレクションから値を取得できます。

詳細については、ScottHanselmanによるこの記事を確認してください。

于 2012-08-29T08:55:09.377 に答える
1

これは私のために働く

 var headers =OperationContext.Current.IncomingMessageProperties["httpRequest"];
        var apiToken = ((HttpRequestMessageProperty)headers).Headers["apiKey"];
于 2016-09-10T23:32:07.890 に答える