我正在使用传输模式将大型文件流从客户端发送到wcf服务,作为带有basichttpbinding的流。
在流式传输过程中,如果客户端失去网络连接,客户端将获得套接字超时异常。但是WCF服务继续等待流,直到指定超时。当网络恢复并且下一次从客户端调用wcf服务时,我们发现wcf尚未释放上一个进程并仍在等待先前的响应。
客户端和wcf服务中指定的超时时间如下
opentimeout,closetimeout,sendtimeout,receivetimeout设置为12小时。
该文件最多不会发布12小时。在从wcf读取流时,是否有任何方法,如果客户端断开连接,则终止进程。过去两天我一直在苦苦挣扎。请帮忙
答案 0 :(得分:0)
甚至微软建议使用分块而不是流式传输非常大的内容。 特别是当通信信道不可靠时,enaugh chunkking可能是最好的选择。
尝试使用这样的合同:
[ServiceContract]
public interface IFileWriter
{
[OperationContract]
void Open(string file);
[OperationContract(IsOneWay = true)]
void Write(byte[] buffer);
[OperationContract]
void Close();
}
有关详细信息,请参阅Large Data and Streaming章大数据内容
完全实施的示例here。
或者只是google for" WCF流媒体与分组"。
P.S。 Chunking还有其他几个优点 -