我有一个现有的Web应用程序,我想用WCF数据服务包装,给它一个OData输入/输出格式。
在检索记录时,我可以发送任何我喜欢的内容(myusername =“blabala”,mycurrentusersession =“23434sdfgdf”等等)。但是在“SaveChanges”中我不控制发送的内容 - 但是,我真的需要能够提供现有的应用程序: - 我当前的用户会话 - 特定的检索状态密钥(我现有的应用程序是有状态的)
答案 0 :(得分:1)
您可以在传出请求的标头中添加这些值。
假设您在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;
}