0

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

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

4

1 回答 1

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;
}
于 2013-03-21T07:05:10.780 回答