0

我正在尝试编写将在 IIS 8 中运行的 WCF 服务,并将使用 Expression Encoder SDK 打开视频文件,然后将其编码为 WMV。以下代码在我之前编写的桌面应用程序中运行良好。

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 程序的身份下运行。

因此,在 IIS 中,运行 WCF 服务的“ApplicationPoolIdentity”标识无权启动由“管理员”帐户安装在计算机上的表达式编码器程序。

要解决此问题,您可以执行以下两项操作之一。

  1. 当您安装 Expression Encoder 时,允许“所有用户”能够启动它。

  2. 在 IIS 上安装 WCF 服务时,请确保它在可以启动表达式编码器的应用程序池中运行

于 2014-05-27T17:26:13.690 回答
0

我在 iis8 网站(不托管任何 wcf 服务)中遇到了同样的问题,是的,我还发现 IIS 需要在可以执行表达式编码器的权限下运行。但是有一天它刚刚停止工作并开始抛出同样的错误:

"The type initializer for 'Microsoft.Expression.Encoder.SkuManager' threw an exception."

尽管 AppPool 的标识很好。我拉了一天左右的头发,然后意识到不知何故 VS 复制到本地 bin 目录的二进制文件不想在 IIS 中运行。不知何故损坏或 dll 与表达式的安装不匹配???。我不得不删除 bin 目录的内容,然后 VS 替换了它们,它起作用了。将这些引用的 CopyLocal 设置为 false 不起作用(可以想象,仅从 gac 使用可能会很好)。

于 2014-12-03T00:34:08.063 回答