我在WCF流式傳輸文件時遇到了一些問題。我能夠將文件流式傳輸到服務器上,但少於300 MB,但是當我嘗試使用300 MB或更大的文件時,在「主機中的軟件中斷已建立的連接」時,出現大約60%的錯誤, 。這個錯誤聽起來像是我在文件完成之前關閉了連接,但是我找不到它。WCF流媒體文件上傳300MB +
客戶端代碼我打開連接,調用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; }
}
而且錯誤我收到:
例外:襪子et連接被中止。這可能是由處理您的消息時出錯或遠程主機超出接收超時或基礎網絡資源問題引起的。本地套接字超時爲'00:48:35.9230000'
內部異常:寫入操作失敗,請參閱內部異常。
內部例外:套接字連接被中止。這可能是由處理您的消息時出錯或遠程主機超出接收超時或基礎網絡資源問題引起的。本地套接字超時爲'00:48:35.9230000'。
內部異常:一個已建立的連接被軟件在主機
感謝提前的幫助中止。
不想在我的回答中提到這一點,但是您是否也確定自己沒有超過您指定的10分鐘超時時間? –