3

我有一个 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 mintes 之后出现的。(我相信在 SendTimeout 之后)所以在这里我刚刚启用了可靠会话,现在它看起来像客户端的 OpenTimeout = SendTimeout。
这是期望的行为吗?

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

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

4

0 回答 0