2014-09-04 2 views
0

Так что у меня этот метод, чтобы установить некоторые основные теги метаданных, которые в конечном итоге будут добавлены к моему образу:Установка BitmapMetadata.Title в службе работает на Windows Server 2003 Web Edition бросает NotSupportedException

 BitmapMetadata metaData = new BitmapMetadata("jpg"); 
     foreach (var t in tags) 
     { 
      try 
      { 
       switch (t.Key) 
       { 
        case "Author": 
         metaData.Author = new System.Collections.ObjectModel.ReadOnlyCollection<string>(new string[] { t.Value }); 
         break; 

        case "Rating": 
         int rating = 0; 
         if (int.TryParse(t.Value, out rating)) 
         { 
          metaData.Rating = rating; 
         } 
         break; 

        case "Subject": 
         metaData.Subject = t.Value; 
         break; 

        case "Title": 
         metaData.Title = t.Value; 
         break; 

        case "Comment": 
         metaData.Comment = t.Value; 
         break; 

        default: 
         keywords.Add(string.Format("{0}:{1}", t.Key, t.Value)); 
         break; 
       } 
      } 
      catch (Exception ex) 
      { 
       //Do some logging 
      } 
     } 

И я продолжаю получать ошибка:

System.NotSupportedException: No imaging component suitable to complete this operation was found. ---> System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x88982F50 \ --- End of inner exception stack trace --- \ at System.Windows.Media.Imaging.BitmapMetadata.SetQuery(String query, Object value) \ at System.Windows.Media.Imaging.BitmapMetadata.set_Title(String value)

Работает как локальный хост на Windows 8.1, это прекрасно работает. Как только я развожу свою службу на свой Windows Server 2003 Web Edition, она выдает указанную ошибку. Что происходит?

+0

Возможно, вам не хватает кодировщика JPEG. Обычно это в System.Drawing.dll, в пространстве имен System.Drawing.Imaging. Попробуйте сделать «ImageCodecInfo [] encoderArray = ImageCodecInfo.GetImageEncoders();» и проверьте, что в возвращаемом массиве есть хотя бы один результат. – RenniePet

+0

Я побежал этот метод и напечатал имя Codec и получил: Встроенный BMP Codec, Встроенный GIF кодек, Встроенный TIFF кодеком, Встроенный PNG Codec, Я предполагаю, что я m отсутствует jpg-кодер? Как мне установить установку jpg-кодера на моем сервере Windows 2003? – user1

+0

Да. К сожалению, я не знаю об этой конкретной ситуации. Возможно, вы попытаетесь установить это: http://support.microsoft.com/kb/958911 (Но если это вызывает проблемы, не обвиняйте меня. :-) – RenniePet

ответ

2

Исправление этого было явно использовать SetQuery для метаданных ... Для примера:

BitmapMetadata jpgData = new BitmapMetadata("jpg"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/object name", "Test Title"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/keywords", "Test Tag"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/date created", "20090512"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/time created", "115300-0800"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/caption", "Test Comment"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/by-line", "Test Author"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/copyright notice", "Copyright 2009"); 

Из комментария на this link

Это происходит потому, что WIC используется в Windows Server 2003 не совпадает с Windows 7/8 и не может быть обновлен. и так metadata.Title и т. д. throw notfoundexception