我有一个永久运行的服务,无论客户是否有权访问此服务,但是在很长一段时间没有客户活动后,都能够与客户端连接。WCF和不活动超时:是否可以禁用不活动超时?
这是因为,例如,假期后,我希望能够连接服务,而无需手动重新启动服务。
目前,如果我的服务在10分钟内没有收到任何连接,但我不想指定任何时间,我想要无限的时间。
谢谢。
我有一个永久运行的服务,无论客户是否有权访问此服务,但是在很长一段时间没有客户活动后,都能够与客户端连接。WCF和不活动超时:是否可以禁用不活动超时?
这是因为,例如,假期后,我希望能够连接服务,而无需手动重新启动服务。
目前,如果我的服务在10分钟内没有收到任何连接,但我不想指定任何时间,我想要无限的时间。
谢谢。
您可以设置inactivityTimeout="infinite"
,或者是一个非常高的值,虽然不推荐,但您的服务不应该这样,一旦客户端连接到它,他们可以“永远”消费它。
UPDATE
我的错误,似乎inactivityTimeout
不能设置为无穷像其他超时如receiveTimeout
。
但是,为什么不只是设置receiveTimeout="infinite"
? inactivityTimeout
仅在启用reliableSession
时使用,如果您不需要可靠的会话,则只需将绑定的receiveTimeout
设置为无限,在这种情况下,您的receiveTimeout
就是您的不活动超时。如果您必须使用可靠的会话,那么WCF将使用这两个值来确定您的服务何时超时,并且两者都需要满足才能保持连接正常。看起来inactivityTimeout
的最大值是'24 .20:31:23.6470000',基本上是24天和20.5小时,所以在最坏的情况下,只需设置你的inactivityTimeout="24.20:31:23"
,这个时间仍然相当长,差不多一个月。如果你在这段时间之间发送了一个简单的保持活动的消息(基本上只是在你的服务上调用一些操作),你的连接将被维持。
解决这个用:
ReceiveTimeout
1分钟。ICommunicationObject
,使用Closed事件删除不活动的客户端。//Adding a client callback
OperationContext context = OperationContext.Current;
ICallback callback = context.GetCallbackChannel();
ICommunicationObject obj = (ICommunicationObject)callback;
obj.Closed += new EventHandler(obj_Closed);
//Event for inactive clients
void obj_Closed(object sender, EventArgs e)
{
if (_callbacks.ContainsValue(((ITecnobelRemoteServiceCallback)sender)))
{
var item = _callbacks.First(kvp => kvp.Value == (ITecnobelRemoteServiceCallback)sender));
_callbacks.Remove(item.Key);
treeViewClients.Nodes.RemoveByKey(item.Key.Id);
treeViewClients.Refresh();
_registeredUsers--;
listBoxStatus.Items.Add(String.Format("Usuário {0} estava inativo e foi removido", item.Key.Id));
}
}
我不知道有关.NET的其他版本,但在4.5我也试图绕过静止期的WCF服务。
一时兴起,我设置了binding.ReceiveTimeout = System.Threading.Timeout.InfiniteTimeSpan
,这是一个负时间跨度。这造成了一个例外,与消息的下面趣闻抛出:
System.ArgumentOutOfRangeException: Timeout must be greater than or equal to TimeSpan.Zero. To disable timeout, specify TimeSpan.MaxValue.
于是我又回到了我的代码,设置ReceiveTimeout
到TimeSpan.MaxValue
,现在不活动计时器被禁用。
我不能使用无限值,它是无效的。 – 2012-08-13 10:24:39
@Daimroc看到我的更新。 – 2012-08-13 12:35:06
在应用程序中没有'inactivityTimeout'作为绑定属性。config – KomalJariwala 2013-10-09 08:50:07