ECMモジュールの「メッセージ プレビュー(Message Preview)」および「メッセージ レンダリング(Message Rendering)」インターフェースで、時折以下のようなエラーが表示されることがあります。
これらの問題に共通の症状として、スタック トレース中で.DownloadStringメソッドが参照されているNonCriticalExceptionエラーがSitecoreログに記録されることが挙げられます。例えば、ECM 1.3.xでは次のようなエラーが記録されます。
ERROR EmailCampaign: The remote server returned an error: (500) Internal Server Error.
Exception: Sitecore.Modules.EmailCampaign.Exceptions.NonCriticalException
Message: The remote server returned an error: (500) Internal Server Error.
Source: Sitecore.EmailCampaign
at Sitecore.Modules.EmailCampaign.Core.WebContent.DownloadString(String url, Boolean useIisCredentials)
at Sitecore.Modules.EmailCampaign.WebPageMail.GetMessageBody()
at Sitecore.Modules.EmailCampaign.Core.MessagePreviewHelper.GetMessageInfo(MessageItem message)
ECM 2.xでは、次のようになります。
ERROR EmailCampaign: The remote server returned an error: (403) Forbidden.
Exception: Sitecore.Modules.EmailCampaign.Exceptions.NonCriticalException
Message: The remote server returned an error: (403) Forbidden.
Source: Sitecore.EmailCampaign
at Sitecore.Modules.EmailCampaign.Core.WebContent.DownloadString(String url, Boolean useIisCredentials)
at Sitecore.Modules.EmailCampaign.Messages.WebPageMail.GetMessageBody()
at Sitecore.Modules.EmailCampaign.Core.MessageInfo.FillCeInfo()
この問題をトラブルシューティングして修正するために、まずECMが実際にどのようにしてメッセージ コンテンツのレンダリングを実行しているかについて説明します。
メッセージ コンテンツをレンダリングするために、ECMはSitecoreソリューションに対して独立したwebリクエストを(.NET API、すなわちHttpWebRequestを利用して)実行します。この手法により、パーソナライズなどのSitecoreレンダリング エンジンのすべての機能を組み込むことができるようになります。このリクエストは、URLに対して次のように行われます。
http://<renderer-URL>/?sc_itemid=<message-item-id>&sc_lang=en&sc_device=<device>&sc_mode=preview&sc_duration=temporary&ec_database=master&ec_recipient=<user-name>&ec_id=<ec_id>
このようなリクエストがメッセージ コンテンツを返すことに失敗した場合、Sitecore ECMユーザーに対して上記のようなエラーが表示されます。従って、メッセージ プレビューの問題を解決するには、この特定のリクエストがエラーで失敗しないようにする必要があります。
メッセージ コンテンツ リクエストURLに渡されている実際のパラメータと、実際に返されたレスポンスを調査するには、以下の手順を実施してください。
ページの「Output」セクションに、いかなるECM固有のロジックも関与することなく、レスポンスのコンテンツがそのままレンダリングされます。
また、「Final URL」セクションでは、メッセージ コンテンツのリクエストの実行に使用された実際のURLが表示されます。