【发布时间】:2011-09-01 17:12:36
【问题描述】:
我有一个使用 WCF 服务的网页。多个用户可能同时使用该网页,因此向远程计算机上的 WCF 服务发出请求。
网页上的每个用户都有一个唯一 ID,我想将此唯一 ID 添加到该用户发出的每个请求的请求标头中。
到目前为止,我已经创建了以下代码,可以正确地将标头添加到 WCF 消息中。
public class HeaderIdPusher : IClientMessageInspector
{
private static readonly string _balancerKey = "balancerId";
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
Guid userId = Guid.NewGuid();
HttpRequestMessageProperty httpRequestMessage;
object httpRequestMessageObject;
if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject))
{
httpRequestMessage = httpRequestMessageObject as HttpRequestMessageProperty;
if (string.IsNullOrEmpty(httpRequestMessage.Headers[_balancerKey]))
{
httpRequestMessage.Headers[_balancerKey] = userId.ToString();
}
}
else
{
httpRequestMessage = new HttpRequestMessageProperty();
httpRequestMessage.Headers.Add(_balancerKey, userId.ToString());
request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
}
return null;
}
public void AfterReceiveReply(ref Message reply, object correlationState)
{
}
}
但是我没有卡住,因为我无法让 ID 在请求之间保持不变。您可以在此处看到,目前我正在为每个请求生成一个 ID,但是我无法将其存储在用户所在页面的 Session 中,因为 HttpContext.Current 为空。还有另一种存储方式吗?有没有其他方法可以在我的网页上传入用户的 HttpContext?
【问题讨论】: