我的自定义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();
};
也许我不需要处理流?有人认为上述方法有问题吗?
最佳答案
只要您仍然对SPSite和SPWeb有参考,然后可以将它们丢弃,上述内容就可以了。
仅一小部分,最佳实践是在SPSite和SPWeb对象上调用Dispose()而不是Close()。
关于c# - 来自Sharepoint的WCF流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6870965/