我有一個永久運行的服務,無論客戶是否有權訪問此服務,但是在很長一段時間沒有客戶活動後,都能夠與客戶端連接。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