QA@IT

【asp.net】SharePointの共有サーバにあるドキュメントをTreeViewコントロールを用いて開く方法について

3642 PV

SharePointで管理しているフォルダをasp.netのTreeViewコントロールを用いて表示し、ExcelやPDFなどを開く画面を作成しようとしています。
現在、IISの設定で認証の偽装を有効にし SharePointの共有フォルダのツリーを
表示させるとこまではできましたが、ExcelファイルやPDFファイルをクリックしてもなにも起こりません。
System.Diagnostics.Process.Start(TreeView1.SelectedNode.Value)を用いればローカル環境のドキュメントを開くことはかくにんできましたが、ネットワーク環境で、できる方法をご教授いただけないでしょうか??

回答

現在、IISの設定で認証の偽装を有効にし SharePointの共有フォルダのツリーを
表示させるとこまではできましたが、

まずそこのところですが、実環境(クライアントのブラウザから Web サーバーにリモートアクセス)でも問題なく表示されているのでしょうか?

どうやって共有フォルダの情報を取得して TreeView に表示したのか分かりませんが、以下のページのようなことをしたとすると、ダブルホップの問題が出ると思います。そのあたりは解決済みなのでしょうか?

asp.netから共有フォルダにアクセスできない件
http://social.msdn.microsoft.com/Forums/ja-JP/aec1289b-c044-4e6b-adeb-0b9cf2d1a7c5/aspnet?forum=vbexpressja

上記は、ドメインユーザーを偽装した結果、ダブルホップ問題のため、開発環境ではうまくいっても(シングルホップなので)、実環境ではうまくいかない(ダブルホップになるので)という例です。

ExcelファイルやPDFファイルをクリックしてもなにも起こりません。

何も起こらないと言うことはなくて、ポストバックは起こりますよね? ブラウザに表示される TreeView の各ノードは a 要素ですが、その href 属性は以下のようになっていて、ノードをクリックするとポストバックがかかるはずです。

href="javascript:__doPostBack('TreeView1','xxx')"

第二引数の xxx はルートからクリックされたノードまでの Value をつなげた文字列となり、ポストバックされるとサーバー側でそれを見て、どのノードがクリックされたか特定します。

ただし、Value の設定の仕方によっては、うまく特定できないことがありますので注意してください。

詳しくは以下のページが参考になると思います。

TreeView.SelectedNode のサーバー側での特定
http://surferonwww.info/BlogEngine/post/2011/11/13/Identification-of-TreeNode-given-by-TreeView-SelectedNode-property-at-server.aspx

System.Diagnostics.Process.Start(TreeView1.SelectedNode.Value)を用いれば
ローカル環境のドキュメントを開くことはかくにんできましたが、

実環境で、Process.Start はどこで動くのか、それが意味があるのかは理解されているでしょうか? 実環境では Web サーバーで動くのですよね。実際には Session 0 の問題で Web サーバーでは動かないと思いますが、動いたとしてもクライアントは見えないので意味がないですよね。

「ローカル環境」というのは開発環境で ASP.NET 開発サーバーで動かした時の話ではないかと思いますが、であれば、サーバーもクライアントも同じ PC なので開いて見ることができたのではないですか。(ASP.NET 開発サーバーの場合は Session 0 の問題は起こらないはずです)

ASP.NET 開発サーバーと Web サーバー (IIS) の違いについては以下のページを見てください。

ASP.NET 開発サーバーと IIS
http://surferonwww.info/BlogEngine/post/2011/11/18/ASPNET-development-server-and-IIS.aspx

ネットワーク環境で、できる方法をご教授いただけないでしょうか??

TreeView1.SelectedNode.Value から UNC パスを取得できるように設定されているのだと思いますが、共有フォルダからファイルを取得してクライアントにダウンロードするようなページを作り、そのページにリダイレクトするという方法はいかがですか?

ダウンロードするファイルの UNC パス情報はクエリ文字列にしてそのページに渡せばよいと思います。

aspx ページでも可能ですが、HTTP ハンドラを使うのがお勧めです。

ダウンロードは HTTP ハンドラで
http://surferonwww.info/BlogEngine/post/2013/02/16/use-http-handler-for-downloading-files.aspx

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。