1

エクストラネット セキュリティ (ASP.Net メンバーシップに基づく) で保護されているページで Winnovatives PDFConverter を使用すると問題が発生します。

いくつかの異なるアプローチを試しましたが、次の方法ではローカル マシンで作業できますが、他の場所では作業できません。

ログイン ページのコード。このコードは、次のログイン プロセスをバイパスする必要があります。

 // check that the current "user" isn't logged in and is the Winnovative UserAgent
 if (!Sitecore.Context.IsLoggedIn && Request.UserAgent.Contains(".NET CLR"))
        {
            //Login with a dummy user I've created
            Sitecore.Security.Authentication.AuthenticationManager.Login("extranet\\pdf", "pdf", true);
            //redirect to former page
        }

PDF を生成するページは、次のコードを使用します: private void PDFPrint(string url) {

        PdfConverter pdfConverter = new PdfConverter();           

        pdfConverter.LicenseKey = "our license";            

        url = Request.Url.Scheme + "://" + Request.Url.Host + url;
        byte[] downloadBytes = pdfConverter.GetPdfFromUrlBytes(url);

        HttpResponse response = HttpContext.Current.Response;
        response.Clear();
        response.AddHeader("Content-Type", "binary/octet-stream");
        response.AddHeader("Content-Disposition", "attachment; filename=" + Sitecore.Context.Item.Name + ".pdf" + "; size=" + downloadBytes.Length.ToString());
        response.Flush();
        response.BinaryWrite(downloadBytes);
        response.Flush();
        response.End();
    }

私が得ている例外はこれです:

「URL からメタファイルを取得できませんでした。URL から画像を取得できませんでした。URL にアクセスできません..」

また、Winnovative FAQ からこのトリックを試してみましたが、役に立ちませんでした: http://www.winnovative-software.com/FAQ.aspx#authenticationQ

また、WebClient または HttpWebRequest を使用してコンテンツを取得しようとしました。

しかし、私がしていることは、ローカル以外ではうまくいかないようです。

基本的に、Winnovatives コンバーターで現在ログインしているユーザーを使用する方法、カスタムの "pdf" ユーザーまたは応答から html を取得する別の方法を作成したいと考えています。

この質問が漠然としすぎていないことを願っていますが、質問するのはちょっと難しいと思います。しかし、基本的には、Sitecore の通常のエクストラネット セキュリティによって保護されている、私が制御する Sitecore ソリューションのページから HTML コンテンツを取得したいと考えています。この html コンテンツは、文字列または byte[] 形式である必要があります。

Stackoverflowers を助けてください、あなたは私の唯一の希望です! :P

4

2 に答える 2

2

私はSitecoreに連絡して、解決策があるかどうか尋ねました。

彼らの解決策は、いくつかの基準に基づいてアクティブユーザーを設定するプロセッサを作成することでした。

これは私が自分のサイト用に作成したコードです(UserAgentがスプーフィングされる可能性があるため、おそらく最善の解決策ではありません):

public class MyResolver : HttpRequestProcessor
    {
        // Methods
        public override void Process(HttpRequestArgs args)
        {

            var userAgent = args.Context.Request.UserAgent ?? "";
            SiteContext site = Sitecore.Context.Site;
            if (site.Name == "site_name_in_webconfig" && userAgent.Contains("this_should_only_be_in_thepdfcreators_userAgent"))
            {
                Sitecore.Security.Accounts.User pdfuser = Sitecore.Security.Accounts.User.FromName("extranet\\theUser", true);
                AuthenticationManager.SetActiveUser(pdfuser);
            }

        }
    }

次に、UserResolverの前のweb.configに以下を追加します。

<processor type="Namespace.MyResolver, Assembly" />

これが他の人の助けになることを願っています。

于 2011-06-09T10:13:56.243 に答える
1

ASP.NET フォーラムで同様の問題を見つけましたが、それに対する答えは、PDF ツールの新しいバージョンを使用することでした: SessionState Problems ?

于 2011-06-03T16:03:42.820 に答える