1

私は現在問題に取り組んでおり、LAN SharePoint サーバーから複数の PDF ファイルを DMZ にダウンロードする必要があります。

私たちが達成しようとしているのは、「NewsFeed」タイプのアプリケーションです。SharePoint で作成されたアップロード済みのコンテンツ タイプからリスト データを取得し、適切な PDF ファイルへのリンクを付けて、DMZ でホストされている外部 Web サイトに投稿します。SharePoint がテキスト レイアウトをかなり簡単に実現するために必要な REST API を使用しましたが、現在直面している問題は、アップロードされたドキュメントの .pdf を SharePoint サイトから DMZ にコピーすることです。これにより、ドキュメントをキャッシュに保存できます。であり、ユーザーは href を介してそれらにアクセスできます。

以下は、SharePoint REST API にアクセスするために機能するコードです。

        // Create the connection to sharepoint.  Credentials are managed within web.config
        SharePointListsREST.SharePointDataContext dc = new SharePointListsREST.SharePointDataContext(new Uri(ConfigurationManager.AppSettings["spUrl"]));
        CredentialCache cc = new CredentialCache();
        cc.Add(new Uri(ConfigurationManager.AppSettings["spUrl"]), "NTLM", new NetworkCredential(ConfigurationManager.AppSettings["spUser"], ConfigurationManager.AppSettings["spPassword"], ConfigurationManager.AppSettings["spDomain"]));
        dc.Credentials = cc;

これは完全に機能し、認証、データの取得、表示が可能です。PDFダウンロード機能については、これがあります。

    private void GetPDF(string URL, string path)
    {
        if (System.IO.File.Exists(path))
            System.IO.File.Delete(path);
        WebClient wc = new WebClient();
        CredentialCache cc = new CredentialCache();
        cc.Add(new Uri(ConfigurationManager.AppSettings["spUrl"]), "NTML", new NetworkCredential(ConfigurationManager.AppSettings["spUser"], ConfigurationManager.AppSettings["spPassword"], ConfigurationManager.AppSettings["spDomain"]));

        wc.Credentials = cc;

        wc.DownloadFile(URL, path);
    } 

これはまったく機能せず、401 Not Authorized エラーがスローhttp://XX.XX.XX.XX/.../test.pdfされます。Windows ベースの資格情報を入力すると、pdf にアクセスできます。

使用してみwc.UseDefaultCredentials = true;ましたが、どちらもうまくいきません。これをWebクライアントで動作させる方法について誰かアイデアがありますか?

IIS からのエラー ログの 1 つを次に示します。

2012-07-11 00:56:12 XX.XX.XX.XX GET /Employee+Images/_t/sample.jpg - 80 - 192.168.200.12 - 401 2 5 0
4

1 に答える 1

0

ユーザーを偽装し、偽装ブロック内で WebClient コード全体を実行することは、SharePoint サイトで Windows 認証を使用する場合のオプションです。

この質問を参照してください別のユーザー ID で Directory.CreateDirectory を使用するにはどうすればよいですか? ユーザーのなりすましについて。

または、Runas を使用してその特別なユーザーとしてプロセス全体を実行することもできます。コードを変更する必要はありません。

于 2012-07-11T18:51:37.257 に答える