Inhalte aufrufen

Profilbild
- - - - -

Nach Neuinstallation ArgumentException: String parameter 'extension' cannot be null or all whitespace.

ArgumentException extension GetCachedImagePath

  • Bitte melden Sie sich an, um eine Antwort zu verfassen.
7 Antworten zu diesem Thema

#1 cyberblast

cyberblast

    Newbie

  • Members
  • Punkt
  • 4 Beiträge

Geschrieben: 01 March 2015 - 14:14

Hallo,

ich habe gerade einen neuen Server (2012 R2 Core) mit SQL Datenbank (2014 Enterprise) aufgesetzt und smartstore.net (2.1.1) "installiert". Bei der Installationskonfiguration habe ich angegeben, dass Beispielinhalte angelegt werden sollen. Die Einrichtung läuft auch sauber durch inkl. der Meldung, dass alles geklappt hätte und der Shop das erste mal geladen wird.

 

Ich erhalte nun jedoch folgende Fehlermeldung beim Aufruf der Seiten:

 

String parameter 'extension' cannot be null or all whitespace.
Parameter name: extension

 

Source File: c:\inetpub\wwwroot\webshop\Views\Home\Index.cshtml    Line: 13

 

Stack Trace: [ArgumentException: String parameter 'extension' cannot be null or all whitespace.
Parameter name: extension]
   SmartStore.Guard.ArgumentNotEmpty(String arg, String argName) +107
   SmartStore.Services.Media.ImageCache.GetCachedImagePath(Nullable`1 pictureId, String seoFileName, String extension, ResizeSettings settings) +57
   SmartStore.Services.Media.ImageCache.GetCachedImage(Nullable`1 pictureId, String seoFileName, String extension, Object settings) +55
   SmartStore.Services.Media.PictureService.GetProcessedImageUrl(Object source, Nullable`1 pictureId, String seoFileName, String extension, Int32 targetSize, String storeLocation) +195
   SmartStore.Services.Media.PictureService.GetPictureUrl(Picture picture, Int32 targetSize, Boolean showDefaultPicture, String storeLocation, PictureType defaultPictureType) +360
   SmartStore.Web.Controllers.<>c__DisplayClass48.<PrepareProductOverviewModels>b__3c() +135
   SmartStore.Core.Caching.CacheManager`1.Get(String key, Func`1 acquirer, Nullable`1 cacheTime) +308
   SmartStore.Web.Controllers.CatalogHelper.PrepareProductOverviewModels(IEnumerable`1 products, Boolean preparePriceModel, Boolean preparePictureModel, Nullable`1 productThumbPictureSize, Boolean prepareSpecificationAttributes, Boolean forceRedirectionAfterAddingToCart, Boolean prepareColorAttributes) +5867
   SmartStore.Web.Controllers.CatalogController.HomepageProducts(Nullable`1 productThumbPictureSize) +292
   lambda_method(Closure , ControllerBase , Object[] ) +118
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +242

 

[...] etc.. und darunter

 

[HttpException (0x80004005): Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'.]
   System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) +2816
   System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage) +275
   System.Web.HttpServerUtilityWrapper.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) +94
   System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues, TextWriter textWriter) +716
   System.Web.Mvc.Html.ChildActionExtensions.Action(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues) +123
   ASP._Page_Views_Home_Index_cshtml.Execute() in c:\inetpub\wwwroot\webshop\Views\Home\Index.cshtml:13
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +280

 

[...] etc..

 

Hat jemand eine Idee woran es liegen könnte?

 

Besten Dank & Gruß,

Robert

 

EDIT: Habe die DB gelöscht, App_Data\Settings.txt gelöscht, erneute Installation OHNE Dummy Content => gleicher Fehler aus anderer Quelle:

Source File: c:\inetpub\wwwroot\webshop\Views\Shared\_Root.cshtml    Line: 15

 

Identischer Stack Trace


Bearbeitet von cyberblast, 01 March 2015 - 14:51,


#2 cyberblast

cyberblast

    Newbie

  • Members
  • Punkt
  • 4 Beiträge

Geschrieben: 01 March 2015 - 15:52

Habe mir nun mal die MimeType.MapMimeTypeToExtension Methode angesehen:

var key = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\" + mimeType, false))

 

Auf dem Server 2012 R2 Core gibt es unter HKEY_CLASSES_ROOT\MIME\Database\Content Type\ keinen Key "image/png"! Im IIS sind diese jedoch alle vorhanden.

 

Dann darunter:

key.GetValue("Extension", null)

 

Die Mime Types in der Registry haben keine Werte mit Namen "Extension".

 

Nach der Anlage des image/png Schlüssels mit passendem Extension Wert (png) klappte dann auch der Aufruf des Shops.

Das Auslesen der im IIS eingerichteten MimeTypes über HKEY_CLASSES_ROOT\MIME\Database\Content Type\ scheint mir nicht korrekt.

 

Beste Grüße,

Robert



#3 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3801 Beiträge

Geschrieben: 02 March 2015 - 11:10

Danke für die Infos! Ich habe einen Vorgang dafür angelegt.


Marcus Gesing

Smartstore AG


#4 Murat Cakir

Murat Cakir

    SmartStore AG

  • Administrators
  • 1118 Beiträge

Geschrieben: 02 March 2015 - 22:38

Habe mir nun mal die MimeType.MapMimeTypeToExtension Methode angesehen:

var key = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\" + mimeType, false))

 

Auf dem Server 2012 R2 Core gibt es unter HKEY_CLASSES_ROOT\MIME\Database\Content Type\ keinen Key "image/png"! Im IIS sind diese jedoch alle vorhanden.

 

Dann darunter:

key.GetValue("Extension", null)

 

Die Mime Types in der Registry haben keine Werte mit Namen "Extension".

 

Nach der Anlage des image/png Schlüssels mit passendem Extension Wert (png) klappte dann auch der Aufruf des Shops.

Das Auslesen der im IIS eingerichteten MimeTypes über HKEY_CLASSES_ROOT\MIME\Database\Content Type\ scheint mir nicht korrekt.

 

Beste Grüße,

Robert

Das ist nun ziemlich eigenartig, da ohne diesen essentiellen Eintrag so Einiges nicht funktionieren dürfte: z.B. wüsste der MSIE nicht, wie er PNGs darzustellen hat, weil der MSIE auf genau diesen Schlüssel zugreift, und zwar auf genau die selbe Weise wie SmartStore.NET.

 

Was mich jetzt interessieren würde:

  • Wieviele Child-Knoten ungefähr befanden sich denn unter dem Content Type Key?
  • Fehlt der Extension Wert in allen Content Type Knoten?

Murat Cakir
SmartStore AG


#5 cyberblast

cyberblast

    Newbie

  • Members
  • Punkt
  • 4 Beiträge

Geschrieben: 03 March 2015 - 09:00

Hallo Murat,

 

bin gerade auf der Arbeit, ich kann heute Abend nochmal genauer schauen, aber wenn ich mich recht entsinne gab es in der Registry nur so um die 10 Content Types. Habe nicht alle kontrolliert, aber stichprobenartig habe ich den Extension Wert in keinem der Schlüssel gefunden.


Im IIS - dort wo die Anwendung ja gehostet wird, waren jedoch die üblichen grob geschätzt um die  100 MIME Types registiert.

 

Bitte bedenke, dass es sich hier wie gesagt um ein Server 2012 R2 Core handelt. Da gibt es weder IE noch File Explorer oder ähnliche GUI Komponenten, die diese Types interpretieren können müssten. Der IIS hat dafür seine eigene Verwaltung. Ggf. existieren diese Schlüssel auch auf einem Core System in der Registry, wenn man das UI Feature auf dem Server einmal aktiv hatte - das kann ich nicht beurteilen.

 

Vielleicht würde es mehr Sinn machen, wenn die Anwendung die an der Webanwendung im IIS konfigurierten Mime Types auswerten würde. Diese können z.B. mit Hilfe des Namespaces Microsoft.Web.Administration aus c:\windows\system32\inetsrv\Microsoft.Web.Administration.dll ausgelesen werden. Beispiel

 

Beste Grüße,

Robert



#6 Murat Cakir

Murat Cakir

    SmartStore AG

  • Administrators
  • 1118 Beiträge

Geschrieben: 03 March 2015 - 18:50

Das macht jetzt natürlich Sinn.

 

Im übrigen nutzen wir bereits MimeMapping.GetMimeMapping(), das seit .NET 4.5 verfügbar ist, aber dieser liefert lediglich ContentTypes zu FileExtensions, und nicht umgekehrt. Die besagte Methode oben aber muss die passende Extension zu einem ContentType liefern, deswegen der Registry-Zugriff. Ich habe in einem Commit gestern die Methode etwas fehlertoleranter gestaltet, sodass jetzt bei einem beliebigen Fehlerfall ein Text-Parsing-Fallback gemacht wird. Damit wäre der o.g. Bug behoben.


Murat Cakir
SmartStore AG


#7 cyberblast

cyberblast

    Newbie

  • Members
  • Punkt
  • 4 Beiträge

Geschrieben: 03 March 2015 - 22:05

Hallo,

 

hier noch die standardmäßig vorhandenen Einträge, so wie ich sie auf dem System (Server noch am selben Tag aufgesetzt) vorgefunden habe (bis auf den Image/png, den habe ich selbst angelegt).

 

Es gibt jedoch schon noch einzelne, die einen Extension Wert haben. Die image/... Schlüssel haben jedoch alle keinen.

 

Beste Grüße,

Robert

Angehängte Bilder



#8 Murat Cakir

Murat Cakir

    SmartStore AG

  • Administrators
  • 1118 Beiträge

Geschrieben: 03 March 2015 - 22:12

OK Danke


Murat Cakir
SmartStore AG



Auch markiert mit einem oder mehrerer dieser Schlüsselwörter: ArgumentException, extension, GetCachedImagePath