WCF ReliableSession和Timeouts

时间:2010-02-03 17:46:27

标签: wcf ws-reliablemessaging

我有一个WCF服务,主要用于管理存储库中的文档 我使用了来自MS的分块通道样本,以便我可以上传/下载大文件 现在我实现了与服务的可靠会话,我看到了一些奇怪的行为 以下是我正在使用的超时值。

this.SendTimeout = new TimeSpan(0,10,0);
this.OpenTimeout = new TimeSpan(0, 1, 0);
this.CloseTimeout = new TimeSpan(0, 1, 0);
this.ReceiveTimeout = new TimeSpan(0,10, 0);
reliableBe.InactivityTimeout = new TimeSpan(0,2,0);

我有以下问题:
1。如果服务不起来&运行时,客户端在OpenTimeout后不会断开连接。

我和我的测试客户端一起尝试过。

场景1:没有可靠的会话: 我得到以下异常: 无法连接到net.tcp:// localhost:8788 / MediaManagementService / ep1。连接尝试持续时间跨度为00:00:00.9848790。 TCP错误代码10061:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:8788

这是正确的行为,因为我将OpenTimeout设为1秒。

场景2:使用ReliableSession:
我得到了同样的例外:

  

无法连接到net.tcp:// localhost:8788 / MediaManagementService / ep1。连接尝试持续时间跨度为00:00:00.9692460。 TCP错误代码10061:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:8788。

但这个消息是在大约10分钟之后发出的。 (我相信SendTimeout之后) 所以在这里我只启用了可靠的会话,现在它看起来像客户端的OpenTimeout = SendTimeout 这是期望的行为吗?

2:使用ReliableSession上传大文件时出现问题:
一般规则是你必须为maxReceivedMessageSize,SendTimeout和ReceiveTimeout设置一个巨大的值。
但是在Chunking通道的情况下,最大接收消息大小无关紧要,因为数据是以块的形式发送的 所以我为Send和ReceiveTimeout设置了一个巨大的值:比如说10个小时。 现在上传工作正常,但它有副作用,即使服务未启动,由于(1)中提到的行为,客户端连接超时需要10个小时。

请让我知道您对此行为的看法。

0 个答案:

没有答案