wcf数据服务 - 在保存更改时传递额外的参数

时间:2013-03-21 06:59:11

标签: wcf-data-services odata

我有一个现有的Web应用程序,我想用WCF数据服务包装,给它一个OData输入/输出格式。

在检索记录时,我可以发送任何我喜欢的内容(myusername =“blabala”,mycurrentusersession =“23434sdfgdf”等等)。但是在“SaveChanges”中我不控制发送的内容 - 但是,我真的需要能够提供现有的应用程序:    - 我当前的用户会话    - 特定的检索状态密钥(我现有的应用程序是有状态的)

1 个答案:

答案 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;
}