Skip to content

AssetUrl call crashes with Server operation is not available in this context. #9

@wiesniak

Description

@wiesniak
  1. The issue is related to Sitecore 9 application. App is hosted locally on IIS 10 with integrated v4.0 application pool. I did check with standard ASP.NET MVC app and it should work fine (details in 4.; similar deployment settings).
  2. Webpack configuration is done via sitecore's initialize pipeline. This is a substitute for Application_Start and works fine with all initializations that I have. Configuration code:
private void RegisterWebpack()
{
	var applicationInstance = HttpContext.Current.ApplicationInstance;
	applicationInstance.ConfigureWebpack(new WebpackConfig
	{
		AssetManifestPath = "~/webpack-assets.json",
		AssetOutputPath = "~/",
	});
}
  1. Build succeeds, but when trying to enter website, application crashes with exception
[HttpException (0x80004005): Server operation is not available in this context.]
   System.Web.HttpServerUtility.MapPath(String path) +225
   Webpack.NET.Webpack.GetAssetDictionaryForConfig(WebpackConfig configuration, HttpServerUtilityBase httpServerUtility) +26
   System.Linq.WhereSelectArrayIterator`2.MoveNext() +78
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +436
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +70
   System.Lazy`1.CreateValue() +708
   System.Lazy`1.LazyInitValue() +184
   Webpack.NET.Webpack.GetAssetUrl(String assetName, String assetType, Boolean required) +101
   Webpack.NET.UrlHelperExtensions.WebpackAsset(UrlHelper urlHelper, String assetName, String assetType, Boolean required) +87
   ASP._Page_Views_Shared__Default_cshtml.Execute() in [full local path here]\Views\Shared\_Default.cshtml:17
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +252
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +148
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +122
   System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData) +136
   Sitecore.Mvc.Presentation.ViewRenderer.Render(TextWriter writer) +257
  1. I did some digging and found out that applicationInstance used in registration has Server property with null assigned to _context. This propagates into HttpServerUtility.MapPath and crashes as this method requires _context field to exist. In standard ASP.NET MVC app this _context is filled at Application_Start.
  2. When I move the code from initialize pipeline's handler directly to _Default.cshtml then everything works fine, because at this point HttpContext.Current.ApplicationInstance.Server contains _context with proper object assigned.
  3. I found out a suggestion (here) to use System.Web.Hosting.HostingEnvironment.MapPath method instead of HttpServerUtility.MapPath, because it does not require HttpContext and under the hood HttpServerUtility.MapPath reaches to suggested method.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions