0

IIS 8 で実行され、Expression Encoder SDK を使用してビデオ ファイルを開き、WMV としてエンコードする WCF サービスを作成しようとしています。次のコードは、以前に作成したデスクトップ アプリケーションでは問題なく動作します。

Job job = new Job();
job.ApplyPreset(Preset.FromFile(HttpRuntime.AppDomainAppPath + "Profiles\\" + profile + ".xml"));
job.CreateSubfolder = false;
job.SaveJobFileToOutputDirectory = false;
job.OutputDirectory = Path.GetDirectoryName(input);
MediaItem item;
item = new MediaItem(input);
item.OutputFileName = "{Original file name}.wmv";
job.MediaItems.Add(item);

job.EncodeProgress += new EventHandler<EncodeProgressEventArgs>(job_EncodeProgress);
job.EncodeCompleted += new EventHandler<EncodeCompletedEventArgs>(job_EncodeCompleted);
job.Encode();

しかし、IIS で実行されている WCF サービスでこのコードを実行しようとすると、次のエラーが発生します。

The type initializer for 'Microsoft.Expression.Encoder.SkuManager' threw an exception.
at Microsoft.Expression.Encoder.SkuManager.IsFeaturedSupported(Feature feature)
at MS.Internal.Expression.Encoder.FastProperties.FastPropertyCreate.ShouldAddProp(IFastProperty property, PropertyType propType)
at MS.Internal.Expression.Encoder.FastProperties.FastPropertyCreate.CreatePropertiesArray[T](Type classType, PropertyType propType)
at MS.Internal.Expression.Encoder.FastProperties.FastPropertyCreate.GetProperties[T](PropertyType propType)
at MS.Internal.Expression.Encoder.Persistence.JobPersistence.GetJobFilePropertiesCore[T](JobPropertiesMode mode)
at MS.Internal.Expression.Encoder.Persistence.JobPersistence.GetJobFileProperties[T](JobPropertiesMode mode)
at Microsoft.Expression.Encoder.JobBase.CreateDefaultValues(JobBase job)
at Microsoft.Expression.Encoder.JobBase..ctor()
at Microsoft.Expression.Encoder.Job..ctor()

サーバー上の通常のデスクトップ アプリケーションでこのコードを実行できますが、同じマシンで実行されている WCF サービスでは実行できません。

4

2 に答える 2

0

IIS のアクセス許可の問題であることがわかりました。

プログラムで Expression Encoder SDK を使用するには、マシンにインストールされている Expression Encoder プログラムにアクセスできる ID でプログラムを実行する必要があります。

そのため、IIS では、WCF サービスが実行されていた "ApplicationPoolIdentity" ID には、"管理者" アカウントによってマシンにインストールされた Expression Encoder プログラムを起動する権限がありませんでした。

これを修正するには、次の 2 つの方法のいずれかを実行できます。

  1. Expression Encoder をインストールするときは、「すべてのユーザー」がそれを起動できるようにします。

  2. IIS に WCF サービスをインストールするときは、Expression Encoder を起動できるアプリケーション プールで実行されていることを確認してください。

于 2014-05-27T17:26:13.690 に答える