我有一个使用WCF服务的网页。多个用户可能一次使用该网页,因此向远程机器上的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,但是由于HttpContext.Current为空,因此无法将其存储在用户所在页面的Session中。还有另一种存储方式吗?在我的网页上有另一种传递用户的HttpContext的方法吗?
有没有办法将数据从ASP.NET页面传递到IClientMessageInspector? –
你能提供更多的信息你如何调用WCF服务。它是直接从客户端还是通过asp.net服务器? – Kaido