2011-07-29 4 views
3

내 사용자 지정 WCF 서비스에는 Sharepoint 사이트에서 파일을 다운로드하는 방법이 있습니다. 목표는 DownloadFile을 호출 한 다음 스트림을 수신하는 것입니다.Sharepoint에서 스트리밍되는 WCF

[OperationContract] 
Stream DownloadFile(string uri); 

셰어 포인트에서 파일을 가져 오는에 대한 코드와 스트림은 반환 :

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 서비스에 의해 배치 얻을 것이다 스트리밍됩니다 스트림을 추측 완전한?

그러나 사이트 (웹 및 사이트)가 적절하게 처리되지 않는 내 셰어 포인트 개체로 문제를 해결하려면 어떻게해야합니까? 이것이 장기적으로 문제가되는 것입니까? 다른 방법이 있습니까? SharePoint에서 파일을 다운로드 할 때 실행해야하는 사용자 지정 인증 코드가 있으므로 Sharepoint 클라이언트 개체 모델을 사용하고 싶지 않습니다.

올바른 방향으로 나를 가리킬 수있는 생각이나 아이디어가 있습니까?

UPDATE :

이 같은 현재 OperationContext에 OperationCompleted 이벤트를 사용하여이 문제를 해결할 수도

:

OperationContext clientContext = OperationContext.Current; 
clientContext.OperationCompleted += delegate 
            {                 
             if(stream != null)                         
              stream.Dispose(); 
             site.Close(); 
             web.Close(); 
            }; 

어쩌면 내가 스트림을 처리 할 필요가 없습니다

? 위의 방법으로 문제가있는 사람이 있습니까?

+0

귀하의 질문에 많은 도움이되었습니다. 정리를위한 대리인과 좋은 생각. 감사! – kenchilada

답변

0

위의 내용은 SPSite 및 SPWeb에 대한 참조가있는 한 처리해야합니다.

작은 사례로 SPSite 및 SPWeb 개체에서 Close() 대신 Dispose()를 호출하는 것이 가장 좋습니다.

관련 문제