WCF 页面打开,离开10分钟后,回来,timeout,求帮助

ijwsoft 2011-12-15 07:12:59
如题。

整个项目只用了一个 wcf链接,它默认的是10分钟有效时间。
现在这个项目完成大半年了,处于维护阶段。
有没有 有效的解决方案?谢谢大家。

报的信息分别是:

远程终结点不再识别此序列,这很可能是由于远程终结点上发生中止。wsrm:identifier的值不是已知的序列标识符。可靠会话出错。

通信对象System.ServiceModel.Channels.ServiceChannel无法用于通信,因为其处于“出错”状态。
...全文
292 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ijwsoft 2011-12-21
  • 打赏
  • 举报
回复
感谢楼上各位热心的朋友!

我当时的解决方案是,在取服务对象的先判断一下当前状态,如果不是opened,就重新赋值:
step 1:

public static TvosServiceRef.TvosServiceClient _proxy; //服务对象

public static TvosServiceRef.TvosServiceClient proxy
{
get
{
try
{
if (_proxy == null)
{
_proxy = new TvosServiceRef.TvosServiceClient();
_proxy.Open();
}

// Faulted,Created,Opened,Closed
if (_proxy.State.ToString().ToLower() != "opened")
{
_proxy.Abort();
_proxy = null;
_proxy = new TvosServiceRef.TvosServiceClient();
_proxy.Open();
}
}
catch (Exception ex)
{
//Common.DisplayMsg("系统提示",);
}
return _proxy;
}
set { _proxy = value; }
}


step 2: 在客户端利用 step1的服务对象通讯时,第1次(离开10分钟后回来的第1次)还是有可能会发生 CommunicationTimeOut的Exception,但是第2次通讯时正常。我暂时这么解决:

try
{
dt = Common.proxy.GetDataSourceList(out sEx);
}
catch (Exception ex)
{
dt = Common.proxy.GetDataSourceList(out sEx);
}


一个多礼拜过去了,都是OK的。
阿非 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 keenweiwei 的回复:]

谢谢阿非。
但我这是 winForm下的,所以没有 setTimeout方法刷新
[/Quote]
那更好解决了,System.Threading.Timer 用它

或者开启一个线程都可以的
暖枫无敌 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 keenweiwei 的回复:]

谢谢阿非。
但我这是 winForm下的,所以没有 setTimeout方法刷新
[/Quote]
在WinForm中使用Timer定时器来做,因为你WCF默认的时间是10分钟,所以你应该在<10分钟的时间内,使用该定时器然后重新调用你的WCF。

http://www.cnblogs.com/SkyD/archive/2009/04/12/timer.html
ijwsoft 2011-12-16
  • 打赏
  • 举报
回复
谢谢阿非。
但我这是 winForm下的,所以没有 setTimeout方法刷新
阿非 2011-12-15
  • 打赏
  • 举报
回复
复杂些 就是调用前判断 上次调用的时间来决定此次 保持连接的时机
阿非 2011-12-15
  • 打赏
  • 举报
回复
在页面 用setTimeout 调用wcf 来保持连接

9分钟的时候调用一次就可以了,然后返回会再次调用 setTimeout

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧