【发布时间】:2013-07-01 08:56:22
【问题描述】:
我正在使用 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>
【问题讨论】:
-
有人知道吗?
标签: c# .net wcf streaming wcf-binding