0

エラー ログに、次のエラーとスタック トレースが表示されます。

ページ エラー: URL: /SiteCollectionImages/Push/zh-cn/Machining_calculators.jpg
デバッグ有効: False
相関 ID: 857a397e-8063-447c-af92-b114074282b8
メッセージ: HTTP ヘッダーが送信された後、サーバーはヘッダーを追加できません。
ソース: System.Web
StackTrace
: Microsoft.SharePoint.Publishing.BlobCache.SetResponseHeaders(HttpContext コンテキスト、BlobCacheEntry ターゲット)の System.Web.HttpResponse.AppendHeader(文字列名、文字列値)で
Microsoft.SharePoint.Publishing.BlobCache.SendCachedFile( HttpContext コンテキスト、BlobCacheEntry ターゲット、SPUserToken currentUserToken、SiteEntry currentSiteEntry)
Microsoft.SharePoint.Publishing.BlobCache.SendCachedFile (HttpContext コンテキスト、BlobCacheEntry ターゲット、SiteEntry currentSiteEntry)
で Microsoft.SharePoint.Publishing.BlobCache.HandleCachedFile (HttpContext コンテキスト、BlobCacheEntry ターゲット、ブール値の anonymousUser、SiteEntry currentSiteEntry) で Microsoft.SharePoint.Publishing. System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() での Microsoft.SharePoint.Publishing.PublishingHttpModule.AuthorizeRequestHandler (オブジェクト送信者、EventArgs ea) の BlobCache.RewriteUrl (オブジェクト送信者、EventArgs e、ブール preAuthenticate
)
System.Web.HttpApplication.ExecuteStep (IExecutionStep ステップ、ブール値 & completedSynchronously) で

組み込みの BlobCache は、応答がサーバーに送信された後に httpresponse-headers を設定しようとしているようです。これを修正する方法を知っている人はいますか、それとも SharePoint プラットフォームのバグですか?

更新: 私の web.config は次のようになります。

<BlobCache location="d:\BlobCache\companyname" path="\.(gif|jpg|jpeg|jpe|jfif|bmp|dib|tif|tiff|ico|png|wdp|hdp|css|js|asf|avi|flv|m4v|mov|mp3|mp4|mpeg|mpg|rm|rmvb|wma|wmv)$" maxSize="10" enabled="true" />

また、これはすべての画像リクエストで発生するわけではないことにも注意してください。すべての画像リクエストの約 90 ~ 95% が、指定された場所に適切にキャッシュされ、適切な応答コードでクライアントに送信されます。

Update2: HttpModules から HttpApplication へのフック:

app.PreSendRequestContent += new EventHandler(app_PreSendRequestContent);

および HttpModule のいくつかの SharePoint 固有のコード:

var spApp = context as SPHttpApplication;
if (spApp != null)
{
    var labelHandler = new VaryByLabelHandler();
    spApp.RegisterGetVaryByCustomStringHandler(labelHandler);
    var countryHandler = new VaryByCountryHandler();
    spApp.RegisterGetVaryByCustomStringHandler(countryHandler);
    var claimHandler = new VaryByClaimHandler();
    spApp.RegisterGetVaryByCustomStringHandler(claimHandler);
}
4

3 に答える 3

2

この問題は、SharePoint プラットフォームのバグと思われるものが原因でした。この問題は SiteCollection-library に保存されている画像に影響を与えましたが、すべての画像ではありませんでした。より深く掘り下げた後、そしていくらかの昼食をとって。これらの画像は、「コンテンツと構造の管理」ツールを使用して確認できるように、リストのコンテンツ承認を無効にする前にアップロードされたことがわかりました。これらの画像はまだドラフト モードでした。コンテンツの承認をオフにしたため、これはそうではありませんが、何らかの理由で、この設定が BlobCache の適切なサービス提供能力に影響を与えました。

どの画像が影響を受けたかは、Fiddler を使用することで簡単に確認でき、これらの画像がサーバーから 304 応答を受け取ったのに対し、他の画像はクライアント キャッシュから直接フェッチされていることがわかりました。

解決策は、これらのイメージの一括チェックアウトと一括チェックインを実行することでした。その後、承認状態が「承認済み」になり、問題は解決されました。

于 2012-11-14T14:57:16.767 に答える
0

私の推測では、これは実際には blob キャッシュが原因ではなく、http モジュールの 1 つが原因です。たとえば、HttpApplication.ReleaseRequestState をどこかにフックしますか? その場合、HttpApplication.EndRequest に変更する必要があります。これは、この問題の非常に一般的な理由です...

于 2012-05-17T09:26:03.227 に答える
0

ネイティブの SharePoint のものをバイパス/上書きする顧客の http ハンドラーはありませんか? SharePointがディスクから応答を取得する前、またはデータベースから取得して後でディスクに保存する前に、何かが応答を送り返しているようです。

Web config の blobcache エントリを教えていただけますか? BLOB ストレージのターゲットの場所は、要求に応じて満たされていますか? そのフォルダに関連する許可を与えましたか?

よろしくお願いします。

于 2012-05-15T19:56:48.547 に答える