问个关于在IIS环境下如何避免WCF服务器端崩溃的问题
WCF服务端用IIS来做宿主,WCF客户端和服务端之间是采用的wsdualhttpbinding双工双向通讯。当客户端建立连接通讯后,服务端会每隔2秒自动将数据发给客户端。
现遇到这样的情况:
如果客户端由于断电、网络不通等问题造成与服务端失去连接后,服务端的IIS进程会崩溃,并提示如下信息:
消息无法在分配的超时 00:01:00 内传输。可靠通道的传输窗口中没有可用空间。分配给此操作的时间可能已经是更长超 时的一部分
The message could not be transferred within the allotted timeout of X. There was no space available in the reliable channel's transfer window. The time allotted to this operation may have been a portion of a longer timeout.
问,这种情况下该如何解决?谢谢
--------------------编程问答-------------------- 按你的方式,服务器端太容易崩溃了,是否可以考虑在传输数据之前,检测服务器端与客户端之间的联通性呢? --------------------编程问答--------------------
服务端部分代码如下:
public void GetData()
{
//锁
lock (LockAlert)
{
AlertCallback = OperationContext.Current.GetCallbackChannel<IAddServiceCallBack>();
//指定为3000,表示延迟3秒启动定时器
//指定为2000,表示每2000毫秒间隔
heartTimerCardAlert = new Timer(
new TimerCallback(TimerCBAlert), null, 3000, 2000);
}
}
void TimerCBAlert(object data)
{
try
{
//锁
lock (LockCardAlert)
{
AlertCallback.ReturnValue("Test" + DateTime.Now.ToString());
}
}
catch (Exception ex)
{
throw ex;
}
}
错误就是在TimerCBAlert中的CATCH捕捉到的。
现在问题就是说在客户端突然断开后,WCF服务端是还在执行TimerCBAlert的,那该怎么能判断出客户端是处于连接状态的?
--------------------编程问答-------------------- 有人能回答么? --------------------编程问答-------------------- 客户端,是要的时候才去调用服务,调用完,都要把资源释放掉,你这个时钟不太好吧,这样写。我觉得你看看能不能放倒客户端。 --------------------编程问答-------------------- 应该不会使整个webservice都crash吧。、
这个是你问的吗?
http://social.msdn.microsoft.com/Forums/zh-CN/wcfzhchs/thread/f72a0443-31c9-4c41-b407-276e7bb6ab80 --------------------编程问答-------------------- 你可以写个定时程序在客户端,定时去调用服务端
当然你这个程序可以写成windows 服务
补充:.NET技术 , Web Services