在WCF数据服务中设置KeepAlive

时间:2015-04-16 21:50:43

标签: c# .net wcf-data-services keep-alive

我正在使用" abandonware"来自Microsoft的产品称为" WCF数据服务"。我希望我能在这里得到一些帮助。

我正在尝试将我的服务设置为在负载均衡器(F5)中工作。我遇到的问题我也使用了正常的WCF服务。基本上,F5认为连接是一种“持久性”的连接。连接。

要使用我的WCF服务修复此问题,我可以设置" KeepAliveEnabled"像这样标记为假:

var endpointAddress = new EndpointAddress(new Uri("http://someAdrs/MyWcfService.svc"));
MyWcfClient client = new MyWcfClient (new BasicHttpBinding(), endpointAddress);
var customBinding = new CustomBinding(client.Endpoint.Binding);
var transportElement = customBinding.Elements.Find<HttpTransportBindingElement>();

transportElement.KeepAliveEnabled = false;

client.Endpoint.Binding = customBinding;

正如我所说,这对我的WCF服务很有用。但我似乎无法找到一种方法来设置WCF数据服务客户端。 (客户端没有&#34; Endpoint&#34;变量。)

任何人都知道如何为Wcf数据服务客户端将KeepAlive设置为false?

更新

我试过了:

entities.SendingRequest2 += EntitiesOnSendingRequest2;

private static void EntitiesOnSendingRequest2(object sender, 
    SendingRequest2EventArgs sendingRequest2EventArgs)
{
    sendingRequest2EventArgs.RequestMessage.SetHeader("Keep-Alive", "false");
}

但它似乎没有帮助。

更新II:

我在&#34; EntitiesOnSendingRequest2中尝试了这个:

sendingRequest2EventArgs.RequestMessage.SetHeader("Connection", "close");

但我收到错误,因为Connection标头是受限制的。

1 个答案:

答案 0 :(得分:0)

想通了。

有一个名为“SendingRequest”的事件可以订阅。 (它已被弃用,但这并不重要,因为Wcf数据服务对微软来说已经死了。由于微软目前的短暂关注,它永远不会被删除。)

该事件将允许您访问WebRequest,可以将其转换为HttpWebRequest。

然后设置KeepAlive = false;

就很简单了
entities.SendingRequest += EntitiesOnSendingRequest;


private static void EntitiesOnSendingRequest(object sender, 
      SendingRequestEventArgs sendingRequestEventArgs)
{
    var webRequest = ((HttpWebRequest) sendingRequestEventArgs.Request);
    webRequest.KeepAlive = false;
}