我在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