[英]WCF Streaming File Upload 300MB +
WCF流文件時遇到了一些麻煩。 我能夠將小於300 MB的文件流式傳輸到服務器,但是當我嘗試300 MB或更大的文件時,我說“已建立的連接被主機中的軟件中止了”時出現60%左右的錯誤。 這個錯誤聽起來像是我在文件完成之前關閉了連接,但是找不到它。
我擁有的客戶端代碼打開連接,調用Upload方法,等待返回,然后關閉連接。 對於小文件,這很好用。
WCF服務器使用net.tcp綁定托管在Windows服務中。 我試過更改緩沖區大小等,但還是沒有運氣。
我正在尋找一些幫助來跟蹤此問題。
服務器端綁定:
NetTcpBinding tcp = new NetTcpBinding(SecurityMode.None);
tcp.SendTimeout = TimeSpan.FromMinutes(10);
tcp.ReceiveTimeout = TimeSpan.FromMinutes(10);
tcp.MaxBufferSize = 65536; // 16384;
tcp.MaxBufferPoolSize = 204003200; // 655360;
tcp.MaxReceivedMessageSize = 204003200; // 2147483647;
tcp.TransferMode = TransferMode.Streamed;
tcp.ReaderQuotas = new XmlDictionaryReaderQuotas()
{
MaxArrayLength = 2147483647
};
客戶端綁定:
NetTcpBinding tcp = new NetTcpBinding(SecurityMode.None);
tcp.SendTimeout = TimeSpan.FromMinutes(10);
tcp.ReceiveTimeout = TimeSpan.FromMinutes(10);
tcp.MaxBufferSize = 65536; // 16384;
tcp.MaxBufferPoolSize = 204003200; // 655360;
tcp.MaxReceivedMessageSize = 204003200; // 2147483647;
tcp.TransferMode = TransferMode.Streamed;
tcp.ReaderQuotas = new XmlDictionaryReaderQuotas()
{
MaxArrayLength = 2147483647
};
我用於文件流的類:
[MessageContract]
public class DataFileStream
{
[MessageHeader(MustUnderstand = true)]
public String ID { get; set; }
[MessageHeader(MustUnderstand = true)]
public String FileName { get; set; }
[MessageHeader(MustUnderstand = true)]
public long FileSize { get; set; }
[MessageBodyMember(Order = 1)]
public Stream StreamData { get; set; }
}
我收到的錯誤:
例外:套接字連接已中止。 這可能是由於處理您的消息時出錯,遠程主機超出了接收超時或潛在的網絡資源問題引起的。 本地套接字超時為'00:48:35.9230000'
內部異常:寫入操作失敗,請參閱內部異常。
內部異常:套接字連接已中止。 這可能是由於處理您的消息時出錯,遠程主機超出了接收超時或潛在的網絡資源問題引起的。 本地套接字超時為“ 00:48:35.9230000”。
內部例外:已建立的連接已被主機中的軟件中止
我在這里先向您的幫助表示感謝。
我認為這是因為您將MaxReceivedMessageSize
(可能還有MaxBufferPoolSize
)設置為大約194兆字節。 嘗試將其加倍到408006400
(約400mb)。
更改為此:
tcp.MaxBufferPoolSize = 408006400;
tcp.MaxReceivedMessageSize = 408006400;
閱讀MSDN時 ,我認為MaxBufferPoolSize
不會成為問題(但值得肯定的是增加它)。 如果可行,請將其重置為200mb的限制,然后再次測試。
發生這種情況的原因是,一旦服務器已達到204003200字節(194mb)的傳輸量,服務器就會中止傳輸,因為您指出的是最大預期大小。 這是設計使然,目的是防止有人上載非常大的文件來阻塞服務器時進行惡意使用,或者防止用戶過度使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.