我有一个现有的 Web 应用程序,我想用 WCF 数据服务包装它,为它提供 OData 输入/输出格式。
在检索记录时,我可以发送我喜欢的任何内容(myusername = "blabala"、mycurrentusersession = "23434sdfgdf" 等等......)。但是在“SaveChanges”中,我不控制发送的内容 - 不过,我确实需要提供现有应用程序的能力: - 我当前的用户会话 - 特定的检索状态键(我现有的应用程序是有状态的)
我有一个现有的 Web 应用程序,我想用 WCF 数据服务包装它,为它提供 OData 输入/输出格式。
在检索记录时,我可以发送我喜欢的任何内容(myusername = "blabala"、mycurrentusersession = "23434sdfgdf" 等等......)。但是在“SaveChanges”中,我不控制发送的内容 - 不过,我确实需要提供现有应用程序的能力: - 我当前的用户会话 - 特定的检索状态键(我现有的应用程序是有状态的)
您可以在传出请求的标头中添加这些值。
假设,您Add Service Reference
在您的客户端应用程序中执行了“”,您的WCF-DataService
.
然后在Reference.cs
服务内部(在客户端),搜索OnContextCreated
事件:
然后,将处理程序添加到SendingRequest
事件
partial void OnContextCreated()
{
this.SendingRequest += Entity_SendingRequest;
}
在里面Entity_SendingRequest
你可以添加标题。
void Entity_SendingRequest(object sender, SendingRequestEventArgs e)
{
e.RequestHeaders.Add("myusername", "blabala");
e.RequestHeaders.Add("mycurrentusersession", "23434sdfgdf");
}
你可以很容易地在服务器端处理它,即在 WCF-DataService 的 DataContext 中。
你也可以通过一个CookieContainer
. 这是 WCF 数据服务的表单身份验证的基础。
void Entity_SendingRequest(object sender, SendingRequestEventArgs e)
{
CookieContainer cookieContainer = new CookieContainer();
foreach (var cc in _cookies)
{
Cookie cookie = new Cookie(cc.Key, cc.Value.Value);
cookieContainer.Add(new Uri("http://localhost", UriKind.Absolute), cookie);
}
var cookieHeader = cookieContainer.GetCookieHeader(new Uri("http://localhost",
UriKind.Absolute));
e.RequestHeaders["Cookie"] = cookieHeader;
}