我正在使用 WCF 流将文件从 WCF 客户端传输到使用netTcpBinding
.
一旦客户端使用 Stream 实例调用服务,服务将开始通过套接字连接 ( StreamConnection
) 从 Stream 实例读取。但是,如果服务端读取流的过程中发生异常,客户端不能立即得到异常。
sendTimeout
我发现了与绑定有关的延迟期。如果我设置sendTimeout=20 seconds
了,客户端会在 20 秒延迟后得到异常;如果sendTimeout = 1 second
,客户端立即获得异常。
我做了一些研究。我的理解是,即使在服务上抛出异常,它也不会抛出给客户端,直到StreamConnection.Read()/StreamConnection.Write()
. 这个超时时间看起来与绑定 sendTimeout 同步。
是否可以保留sendTimeout
并让客户立即获得异常?
这是服务绑定,(为了传输大文件,我更改了maxReceivedMessageSize、sendTimeout和receiveTimeout等的值)
<netTcpBinding>
<binding name="StreamingNetTCPBinding" transferMode="Streamed" maxConnections="500" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" sendTimeout="00:45:00" receiveTimeout="23:00:00" listenBacklog="20">
<readerQuotas maxArrayLength="2147483647" maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" />
</binding>
</netTcpBinding>