【发布时间】:2011-07-29 09:12:07
【问题描述】:
我的自定义 WCF 服务有一种从 Sharepoint 站点下载文件的方法。目标是调用 DownloadFile,然后接收流。
[OperationContract]
Stream DownloadFile( string uri );
从Sharepoint获取文件并返回Stream的代码是:
public Stream DownloadFile( string uri )
{
// NOTE! we cannot use a using statement as the stream will get closed.
var site = new SPSite( uri );
var web = site.OpenWeb();
var file = web.GetFile( uri );
// some custom authentication code...
// NOTE! do not close stream as we are streaming it.
return file.OpenBinaryStream();
}
我猜流式传输完成后,WCF 服务会自动正确关闭和处理流式传输的流?
但是,我应该如何解决未正确处理的共享点对象(站点和 Web)的问题?从长远来看,这会是一个问题吗?有没有其他可用的方法?我不想使用 Sharepoint 客户端对象模型,因为我有一些自定义身份验证代码需要在从 Sharepoint 下载文件时执行。
有什么想法或想法可以为我指明正确的方向吗?
更新:
我可能已经通过在当前 OperationContext 上使用 OperationCompleted 事件来解决这个问题,如下所示:
OperationContext clientContext = OperationContext.Current;
clientContext.OperationCompleted += delegate
{
if( stream != null )
stream.Dispose();
site.Close();
web.Close();
};
也许我不需要处理流?有没有人发现上述方法有问题?
【问题讨论】:
-
你的问题对我帮助很大。与代表进行清理的好主意。谢谢!
标签: c# wcf sharepoint stream