【问题标题】:WCF streaming from Sharepoint来自 Sharepoint 的 WCF 流式传输
【发布时间】: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


【解决方案1】:

只要您仍然有对 SPSite 和 SPWeb 的引用,上述内容应该没问题,那么您可以将它们处理掉。

只是一个小例子,最佳实践是在 SPSite 和 SPWeb 对象上调用 Dispose() 而不是 Close()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多