在我的WCF服務WCF數據流SQLFileStream,我嘗試加載由具有FILESTREAM字段MS SQL表的文件,我嘗試把它作爲一個流回到的消息協定
responseMsg.DocSqlFileStream = new MemoryStream();
try
{
using (FileStreamDBEntities dbEntity = new FileStreamDBEntities())
{
...
using (TransactionScope x = new TransactionScope())
{
string sqlCmdStr = "SELECT dcraDocFile.PathName() AS InternalPath, GET_FILESTREAM_TRANSACTION_CONTEXT() AS TransactionContext FROM dcraDocument WHERE dcraDocFileID={0}";
var docFileStreamInfo = dbEntity.Database.SqlQuery<DocFileStreamPath>(sqlCmdStr, new object[] { docEntity.dcraDocFileID.ToString() }).First();
SqlFileStream sqlFS = new SqlFileStream(docFileStreamInfo.InternalPath, docFileStreamInfo.TransactionContext, FileAccess.Read);
sqlFS.CopyTo(responseMsg.DocSqlFileStream);
if(responseMsg.DocSqlFileStream.Length > 0)
responseMsg.DocSqlFileStream.Position = 0;
x.Complete();
}
}
...
我想知道最好的方法是將SQLFileStream傳遞迴消息合約以利用流式傳輸。目前我將SQLFilEStream複製到內存流中,因爲我在WCF跟蹤中收到一條錯誤消息,內容如下:類型'System.Data.SqlTypes.SqlFileStream'不能被序列化。
感謝您的想法和分享的鏈接您的解決方案,可能是我把它看作是現在,我創建的消息合約是我IDisposable接口和Dispose方法可以幫助釋放內存流(其中ac在通話記錄中讀取後,在msg合同中流轉一個Stream)。但你的臨時文件解決方案絕對是一種方法。 – Farhad 2013-05-03 17:42:29