我将使用一些方法创建一个WCF服务:其中一个方法将具有字节类型的TTL(生存时间)参数,以便设置转发到其他节点的最大半径。 由于IP数据包具有TTL字段,是否可以使用WCF设置此字段以达到相同的目标?
非常感谢!
答案 0 :(得分:2)
对于通常的Socket通信,您可以这样做:
对于WCF我不确定你是否可以用同样的方式控制它,对于MSMQ绑定,绑定的TimeToLive
属性为TimeSpan
,但与更改TTL不同在IP
级别,请参见此处:WCF / MSMQ "time-to-be-received has elapsed" dead letter queue issue
我不确定你是否可以编写自己的WCF绑定,并且能够将你的值推送到底层套接字,就像我在上面提到的第一个链接中那样......
答案 1 :(得分:1)
很晚才回答,但我们最近遇到了同样的问题。 鉴于TransportSettings已标记为已过时,我们执行了以下操作: var udpDiscoveryEndpoint = new UdpDiscoveryEndpoint();
var customBinding = udpDiscoveryEndpoint.Binding as CustomBinding;
if (customBinding != null)
{
TransportBindingElement transportBindingElement = customBinding.Elements.Find<TransportBindingElement>();
if (transportBindingElement is UdpTransportBindingElement)
{
(transportBindingElement as UdpTransportBindingElement).TimeToLive = configuration.DiscoveryTtl;
}
}
答案 2 :(得分:0)
在.NET 4.0中,WCF中的UdpDiscoveryEndpoint具有默认为1的TimeToLive属性:
new UdpDiscoveryEndpoint().TransportSettings.TimeToLive
在.NET 4.5中,它已被废弃,并替换为UdpTransportBindingElement。
new UdpTransportBindingElement().TimeToLive