我对命名管道有一个奇怪的问题,所以这里是描述:
我使用命名管道来在应用程序的新旧实例之间传输缓存。
它发生在这样:
1)当应用程序启动时,它会尝试从应用程序的旧实例连接并接收缓存。
2)当应用程序启动时,它已准备好为下一个新应用程序提供缓存。
3)我有两个管道,让我们称之为pipe1
和pipe2
3.1)第一个应用使用pipe1
提供缓存,pipe2
用于接收缓存
3.2)第二个应用使用反之亦然,pipe2
提供缓存,pipe1
用于接收缓存
4)在新应用启动后,旧应用将被销毁
5)应用程序的实例在同一台机器上工作
一般来说,它运作正常。 (如果我每天更新一次我的应用程序,或者每两天,三天更新一次)
但是我几周没有完成它(更新),我遇到了问题:应用程序工作了几周而没有更新。这意味着第一个应用程序保持pipe1打开了几个星期,当我开始更新时,应用程序的新实例(至少我可以根据我的日志判断)连接到旧实例到pipe1并且只是冻结!没有任何事情发生,换句话说它无法启动。
1)管道可以打开多长时间?例如,如果我使用它:
pipe.BeginWaitForConnection(myCallBack, pipe);
如果我想在几周内连接到管道,它是否仍然可以打开并准备好工作?
2)或者这里可能出现的问题?
*只是想提醒一下:在此之前它运作良好' long'更新之间的一段时间。
提前感谢任何想法或建议!
更新1 :实际上我有3对命名管道
(A1 A2),(B1 B2),(C1 C2)在该示例A1中等于pipe1
并且A2等于pipe2
。每对夫妇的算法都是一样的。 (一对用于转移缓存,另一对用于转移用户的会话等)
第一对(A1 A2)得到异常System.IO.IOException: The semaphore timeout period has expired
只有第二对冻结......