我在C#多線程窗口服務中發送推送通知時遇到了一些麻煩。
當我有很多的通知發送到APNS,一些線程拋出一個異常:
發送大量數據時'連接被遠程主機強行關閉'
Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host.
at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.Security._SslStream.StartWriting(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security._SslStream.ProcessWrite(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslStream.Write(Byte[] buffer) ...
我有16個線程的線程池,每個線程打開一個聯接蘋果。
這不是一個超時,因爲我有嘗試:sslStream.WriteTimeout = 60000;
我也曾嘗試用:Client.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.KeepAlive, false);
的連接不是在發送的開始關閉。
編輯:我認爲所有的數據都發送了,蘋果突然關閉了連接。
您是否瞭解此異常的來源? 如何解決它?
如果需要的話,我可以給你一些代碼。
非常感謝您的回答!
我認爲,這是因爲蘋果通知服務管理大量通知的不是節流。而且這不會發生在每個線程上,即使其他線程發送相同數量的通知。 – malinois 2011-03-16 20:52:06
好吧,如果它不起作用,這是其他原因。無論出於何種原因,APNS正在決定它不想再跟你說話。 APNS正在關閉連接,並且您的程序在嘗試使用不再打開的連接時收到異常。 – 2011-03-16 21:05:53
如果線程拋出異常,寫入操作沒有完成,不是嗎? – malinois 2011-03-16 21:47:12