私のカスタムWCFサービスには、Sharepointサイトからファイルをダウンロードする方法があります。目的は、DownloadFileを呼び出してストリームを受信することです。SharepointからのWCFストリーミング
[OperationContract]
Stream DownloadFile(string uri);
Sharepointのからファイルを取得するためのコードとストリームがある返す:
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オブジェクト(サイトとWeb)でこの問題を解決するにはどうすればよいですか?これは長期的には問題になるのだろうか?利用可能な他のアプローチはありますか? Sharepointからファイルをダウンロードするときに実行する必要があるカスタム認証コードがあるので、Sharepoint Client Object Modelを使用したくありません。
正しい方向に私を向ける考えやアイデアはありますか?
UPDATE:
私はこのように、現在のOperationContextにOperationCompletedイベントを使用してこれを解決している場合があります:
OperationContext clientContext = OperationContext.Current;
clientContext.OperationCompleted += delegate
{
if(stream != null)
stream.Dispose();
site.Close();
web.Close();
};
たぶん私は、ストリームを配置する必要はありませんか?誰かが上記のアプローチで何か問題があると思っていますか?
あなたの質問は私を大いに助けました。デリゲートとクリーンアップの良いアイデア。ありがとう! – kenchilada